购买二手硬件的一些人生经验
以往我是不直接在 eBay 上购买二手硬件(这不包括美国比较常见的「翻新refurbished」硬件, 这类卖家往往是比较专业的回收处理机构)的,原因是购买此类硬件多少有点像拆盲盒: 二手硬件的质量往往缺乏统一且一致的标准,并且通常只提供较短的退货窗口。
不过 上回书 说到我收了一台二手的 Dell R740 服务器,既然选择了消费降级索性一降到底试试看买二手内存和存储。
这次总共购买了:
- 2.5寸SAS硬盘9块
- HGST Ultrastar DC SN200 一块
- 内存12条
以及与这些存储配套的硬盘托架。简而言之,我最终只保留了机械硬盘及其托架,Western Digital SN200 和内存都退货了。
硬盘
硬盘的部分属于耗材,卖家对硬盘的说明是这些硬盘原本属于备件,除了他测试其好坏之外基本上没有正经使用过。 拿到硬盘之后发现这些硬盘是和原来的2.5寸转3.5寸托架一起送来的,我这台机器上只有2.5寸的槽并且规格不一样, 因此需要逐个拆下来装到新的2.5寸托架中再插到机器上。
测试方面,我主要观察以下几个指标:
- 硬盘固件。将硬盘固件刷成厂商提供的最新版本固件,有些品牌或型号的硬盘在出厂后可能会修正过一些可靠性或兼容性问题,更新固件有助于避免这些已知问题。
- 硬盘本身的 S.M.A.R.T. 数据。与卖家描述相符,硬盘的上电时间普遍不超过100小时,基本没怎么写过数据。
- 向硬盘做全盘写0、随机数、读出过程中温度的变化以及对读写时延迟的采样数据。这主要是观察硬盘本身是不是有什么未发现的问题。此操作我通常根据情况做3-5次左右。
这一批硬盘在测试过程中未见显著异常。
NVMe
我个人一直对购买二手的闪存心存疑虑,这次经历多少加强了这种疑虑。
HGST 的 Ultrastar DC SN200 系列采用的是 U2 接口,卖家声称这个闪存的上电时间不到12天。插上之后发现 FreeBSD 无法识别其上的 disk 设备,但使用 smartctl 观察可以看到该设备声称自己是 UCSC-NVMEHW-H1600。
这是一款 Cisco 贴牌的设备,使用的是为 Cisco 存储定制的固件,并且看了一下 SFH 论坛,发现这款固件的 NVMe 设备与 Dell 存在已知的兼容性问题,但一些民间人士表示刷新版 Cisco 定制固件可以改善兼容性。
和硬盘一样,我认为首先应该尽量将设备弄成一个厂商技术支持能够理解的状态,即刷新到最新版本的官方固件并做出厂初始化。 FreeBSD 的 nvmecontrol(4) 支持给 NVMe 设备刷新固件,于是我下载了 Cisco 的定制固件并刷新了此 nvme(4) 设备的固件, 但复位之后仍然无法用 nvmecontrol(4) 创建需要的 NVMe workspace。
我通过 iDRAC 启动了一个 Debian 的 Live System,结果发现 Debian 自带的 nvme 驱动比 FreeBSD 的情况还要更糟糕, 启动以后它就不断地给设备发 reset,无奈之下我临时装了一份 Windows 系统方便运行 HGST Device Manager。
Windows 的磁盘管理器中可以看到设备,但需要初始化,而初始化时则提示「Parameter error」,看起来还需要进行一些额外的操作。
拿 HGST Device Manager 扫描,发现无法找到 NVMe 设备,做了一些研究之后发现 HGST Device Manager 需要一个特别的 nvme 驱动,装上以后果然可以看到一个 nvme0 设备了。于是:
hdm get-state -a @nvme0
结果发现:
[...]
Product Name = Ultrastar SN260
Device Type = NVMe Controller
[...]
Alias = @nvme0
Device Status = Diagnostic Mode
Thermal Throttling Status = Disabled
Life Gauge = 100
System Area Percentage Used = 0
网上对 Diagnostic Mode 到底是什么颇有些语焉不详,民间人士对此有许多不同的猜测,包括但不限于 PCIe 电气兼容问题,
或是在 UEFI 中启用了 BIOS 支持,总之没有什么靠谱的结论,但 hdm 工具可以通过 capture-diagnostics
配合
--clear-diag-data
来清除这个状态,随后重新上电就可以让设备恢复正常工作的状态,然后用 hdm 将闪存恢复出厂状态即可。
如此 FreeBSD 中就可以正常识别出设备并使用了。
然而,在后续的测试中,我发现在多次重启之后这个设备会再次回到 Diagnostic Mode,并且设备上的数据也会全部丢失。 尽管我的本意是使用这个盘来做cache,但这种状态是很难堪用的。尽管此产品列为「不接受退货」,但在和卖家沟通之后, 卖家还是十分爽快地同意了退货。
内存
内存方面主要是找到机器的规格说明,然后按照与之兼容的内存去下单。测试方面,ECC内存是相对比较容易测试的: 运行一些吃内存的编译任务,观察有没有异常的崩溃或是ECC异常。
我购买的这批内存中有两条有一些问题。经过反复的替换法测试,我将有问题的内存标记出来,但由于卖家这批是尾货, 出于担心从另外的卖家那里购买得到的可能不是同批次同规格内存的顾虑,我选择了将所有内存退货。