最近我遇到了奇怪且罕见的文件系统损坏,我怀疑这是我的 SSD 的问题。我正在寻找一个好的驱动折磨测试工具。可以写入整个磁盘,然后返回并读取它以查找快速写入、损坏的块、恢复到较旧版本的块以及其他错误。这将比所做的要多得多badblocks
。有这样的工具吗?
注意我是不是正在寻找性能基准并已检查 SMART 状态;说健康并且没有报告坏块。
答案1
可能有点矫枉过正,但有Phoronix 测试套件。还有bonnie++
, 也hdparm
。
我通常使用hdparm
, 例如:
% hdparm -Tt /dev/hdb
/dev/hdb:
Timing buffer-cache reads: 128 MB in 1.25 seconds =102.40 MB/sec
Timing buffered disk reads: 64 MB in 16.70 seconds = 3.83 MB/sec
我不会称之为hdparm
酷刑测试,但它确实可以让您大致了解驱动器的整体性能。
确定驱动器的运行状况
对驱动器进行测试后,您可以使用此命令来检查驱动器的总体运行状况:
% sudo udisks --dump | grep -A 24 Updates
Attribute Current|Worst|Threshold Status Value Type Updates
===============================================================================
raw-read-error-rate 103| 99| 34 good 5854752 Pre-fail Online
spin-up-time 100| 99| 0 n/a 0 Pre-fail Online
start-stop-count 98| 98| 20 good 2785 Old-age Online
reallocated-sector-count 100|100| 36 good 0 sectors Pre-fail Online
seek-error-rate 72| 60| 30 good 25872884688 Pre-fail Online
power-on-hours 89| 89| 0 n/a 424.4 days Old-age Online
spin-retry-count 100|100| 97 good 0 Pre-fail Online
power-cycle-count 98| 98| 20 good 2753 Old-age Online
attribute-184 100|100| 99 good 0 Old-age Online
reported-uncorrect 100|100| 0 n/a 0 sectors Old-age Online
attribute-188 100| 96| 0 n/a 0 Old-age Online
high-fly-writes 100|100| 0 n/a 0 Old-age Online
airflow-temperature-celsius 58| 42| 45 FAIL_PAST 42C / 108F Old-age Online
g-sense-error-rate 100|100| 0 n/a 124 Old-age Online
power-off-retract-count 100|100| 0 n/a 15 Old-age Online
load-cycle-count 1| 1| 0 n/a 248327 Old-age Online
temperature-celsius-2 42| 58| 0 n/a 42C / 108F Old-age Online
hardware-ecc-recovered 45| 38| 0 n/a 5854752 Old-age Online
reallocated-event-count 89| 89| 30 good 14877766723263 Pre-fail Online
current-pending-sector 100|100| 0 n/a 0 sectors Old-age Online
offline-uncorrectable 100|100| 0 n/a 0 sectors Old-age Offline
udma-crc-error-count 200|200| 0 n/a 0 Old-age Online
attribute-254 100|100| 0 n/a 0 Old-age Online
磁盘健康/维护工具
在我工作的地方,我们使用以下两种工具取得了良好的成功。HDAT2&旋晶体。后者是一个商业工具,而前者 HDAT2 是一个开源项目。
以下是 HDAT2 的几个屏幕截图:
您必须将系统重新启动到这两个状态,以便在执行这些操作时系统处于脱机状态,但它们都恢复了发生故障或开始出现故障的驱动器。 HDAT2 中的 UI 导航起来有点粗糙,我们通常在大部分情况下使用默认选项,并尽量不要偏离那里太远。
答案2
我想到了邦妮++:
因此,根据您的盒子的硬件配置:
bonnie++ -d /path/to/mounted/ssd -r your-system-ram-size-in-MB
例子:
# For a 32GB system with the SSD formatted and mounted at /mnt/mounted-ssd-001
bonnie++ -d /mnt/mounted-ssd-001 -r 32000
它应该可以为您的设备提供良好的压力测试。您也可以自定义它。
请注意,对于 SSD,当发生坏块时,驱动器硬件可能会自动重新映射它,具体取决于您正在使用的驱动器。此外,严酷测试会缩短 SSD 的写入寿命。因此,请根据您自己的判断使用。
编辑:
添加有关 SSD 故障的注释,因为有人指出 Bonnie++ 进行压力测试,但不跟踪错误。 SSD“重新映射坏块”的方式与硬盘驱动器重新映射的方式不同。它的运作方式完全取决于您拥有的 SSD 品牌/品牌/型号:
- 便宜的 SSD 只会失败,因为它们没有备用容量来重新映射,或者因为它们无法隔离失败的闪存块。他们只会挂起或离线,并且不会重新上线。
- 没有备用容量的中端 SSD 可能会在检测到故障块时生成 Smartd 警报,甚至可能生成操作系统级块设备错误。然而,当发生故障时,SSD的注册大小将会改变。这可能会导致错误并且设备被操作系统脱机,或者可能导致设备本身挂起并需要拔出并重新插入才能再次识别。重新注册时,设备的可用块大小将减少。
- 具有备用容量的高端 SSD 将在幕后重新映射坏块,并可能生成操作系统级别的警报/警告。当备用容量耗尽时,设备可能会像中型 SSD 一样出现故障。
当 SSD 由于坏块被隔离而自行调整大小时,如果驱动器的固件没有自动执行正确的更新,您可能需要执行以下操作来恢复驱动器:
https://web.archive.org/web/20130728024542/http://communities.intel.com/message/145676
除非压力测试和错误记录工具是专门针对 SSD 设计的,否则您只是在耗尽设备的使用寿命。
编辑:
根据上述答案中的信息,建议使用更好的电缆更换电缆或更换驱动器(RMA/保修更换),因为这种操作系统文件系统级别错误是不正常的。
此外,如果您的驱动器支持,您可以增加为处理错误保留的空间量:
http://www.thomas-krenn.com/en/wiki/SSD_Over-provisioning_using_hdparm
答案3
我知道这已经有一年多了,但为了将来阅读该帖子的任何人的利益,我预计您需要的软件(d)在 HP 实验室之外尚不存在:
《了解电源故障下 SSD 的鲁棒性》 https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf
用选择的事件代替电源故障注入(或者在检测间歇性固件错误的情况下什么都不做),并且该软件似乎可以检测到它。不幸的是,我认为没有其他选择,否则惠普可能不会在内部编写一些东西。
很遗憾,因为我也需要类似的东西来证明虚拟环境中的问题;我怀疑提交的写入实际上并未到达物理磁盘。如果能够像这样对存储堆栈进行压力测试,而不仅仅是 SSD,那就太棒了。我还没有找到合适的东西。
答案4
压力盘
它旨在对您的压力进行测试已安装磁盘并查找其中的故障。
缺点是它的测试配置为运行时间,默认24小时,而不是TBW。因此,您无法每 100 TBW 退出测试,保存驱动器的相关 SMART 统计数据,然后继续下一个 100 TBW。
https://github.com/ncw/stressdisk
Anvil 的存储实用程序
TechReport的SSD耐久性实验使用了这个 Windows 实用程序。基准菜单包括耐力测试。
集成的 MD5 哈希检查可验证数据完整性。 Anvil 的耐久性测试并不是理想的现实世界模拟,因为它按顺序写入文件。该实用程序可以写入 5 个压缩等级的压缩数据。
注意:对于耐久性测试,需要将 AnvilPro.exe 复制到被测设备并从该设备运行。
下载:https://www.guru3d.com/download/anvils-storage-utilities-download/
斯宾瑞特
即使在原始驱动器上也可以运行,它只会运行离线在修改后的 FreeDos 操作系统上。然而 SpinRite 将在部门层面。
使用一些 DOS 批处理文件脚本,SpinRite 折磨测试可以自动运行多次。最新的 SpinRite 6.1 RC5 默认将日志写入其 FAT32 USB 拇指驱动器。
5级
在级别 5 SpinRite 将读取和写入所有数据扇区两次。所有数据都从 1 到 0 以及从 0 到 1 “反转”,以验证是否可以成功写入和读取任何数据。 SpinRite 写入过程不会导致数据丢失。您的原始数据被反转两次,从而恢复到原始状态。
5 级还将标记驱动器中以前发现有缺陷但现在可能测试可靠的任何区域,因为可以再次完全使用。