smartctl 工具允许启动长时间的自检 ( smartctl -t long /dev/sda
)。但是badblocks
,我也可以在驱动器上运行。两者有什么关系?如果 badblocks 检测到坏块,驱动器是否会自动更新其 SMART 值(例如通过更新其重定位扇区计数)?badblocks 可以替换smartctl -t long
,反之亦然吗?
smartctl 工具允许启动长时间的自检 ( smartctl -t long /dev/sda
)。但是badblocks
,我也可以在驱动器上运行。两者有什么关系?如果 badblocks 检测到坏块,驱动器是否会自动更新其 SMART 值(例如通过更新其重定位扇区计数)?badblocks 可以替换smartctl -t long
,反之亦然吗?
正如我在其他回答中指出的那样,每个现代硬盘驱动器都有可用的重新映射空间(因为特别是在当今的磁盘密度下,没有完美的驱动器盘片 - 驱动器必须重新映射一些缺陷,即使在品牌上也是如此-新的从未使用过的从装配线到我手中的驱动器)。
因此,从理论上讲,您应该在
badblocks
通知(最终用户可见)驱动器上的坏扇区之前报告 SMART 故障。在现代硬盘上,任何最终用户可见的坏扇区(
badblocks
操作系统可能会报告或自动检测到)都是垂死磁盘的最后喘息和战栗。最终 SMART 并
badblocks
测试两个不同但相关的事物:SMART 是一种自我监控工具:
硬盘驱动器知道一些关于其操作参数的信息,并且有一些关于什么是对某些人来说是“正常”而对其他人来说是“可接受”的元知识。
如果驱动器检测到某些参数“异常”或“不可接受”,它将报告故障前状态——换句话说,驱动器仍在运行,但可能很快就会发生故障。
例如:主轴电机通常消耗 0.10 安培,但现在消耗 0.50 安培——异常高的消耗可能表明轴被卡住或轴承上的永久润滑剂消失了。最终电机将无法克服阻力,驱动器将卡住。
另一个例子:驱动器有 1000 个“重新映射”块来处理坏扇区。它已经使用了其中的 750 个,并且制造该驱动器的工程师确定重新映射的数量表明内部存在错误(坏盘、老化故障、磁头损坏)- 驱动器将报告故障前情况,让您有时间获得在重新映射空间用完并且坏扇区变得可见之前关闭您的数据。
SMART 寻找的不仅仅是坏扇区 - 它是对驱动器健康状况的更全面评估。您可能会在没有坏扇区和读/写错误的驱动器上收到 SMART 预故障警告(例如,我上面描述的主轴电机问题)。
badblocks
是一个具有特定(过时)目的的工具:查找坏扇区。badblocks
来自 SMART 和坏扇区重新映射之前的时间。那时我们知道驱动器有缺陷,但将它们映射出来以防止意外存储数据的唯一方法是对磁盘进行压力测试,导致故障,然后记住不要再将数据放在那里。我说它已经过时的原因是因为现代驱动器上的电子设备已经在
badblocks
内部完成了它的工作,而且速度快了几千倍。badblocks
基本上允许缺乏精密电子设备的古老驱动器重新映射(或跳过)发生故障的扇区,但现代硬盘驱动器已经检测到故障扇区并为您重新映射它们。从理论上讲,您可以使用
badblocks
数据来让操作系统重新映射(可见)故障,就好像您的现代磁盘是一个古老的温彻斯特磁盘一样,但这最终会适得其反——就像我之前说的,在现代驱动器上检测到的任何坏扇区badblocks
都是丢弃该磁盘的原因整个驱动器有缺陷(或即将发生故障)。可见的坏扇区表明驱动器没有重新映射空间,这对于现代磁盘来说相对罕见,除非它们是旧的(接近功能寿命结束)或有缺陷(出厂时盘片/磁头坏)。
所以基本上,如果
badblocks
在将其部署到生产环境之前在磁盘上运行会让你感觉更好,那就去做吧,但如果你的磁盘是本世纪制造的,并且它显示一个可见的坏扇区,你应该把它扔进垃圾桶(或打电话给它的保修)。对于我的钱,SMART 状态和深度防御比手动检查磁盘更能利用我的时间。我不同意voretaq7 — SMART 不是魔法。当您有一个驱动器并且其中一个扇区坏了时,您将无法再从中读取数据。因此,现代磁盘驱动器上完全有可能存在无法读取的文件。当失败后首次访问时,SMART 会将此不可读扇区标记为“当前待定”和“离线无法纠正”。
但是,当再次写入该扇区时,它将被重新映射到重新映射空间,未标记,并且“Reallocated_Sector_Ct”计数器会增加。然后整个驱动器将再次可读。
smartctl -t long
test 很有用——它将测试整个驱动器空间是否存在不可读扇区,并记录运行时遇到的第一个坏扇区并将其标记为“当前未决”和“离线无法纠正”。我正在将我的服务器配置为每周在每个驱动器上运行一次这种长时间测试。它不会对正常的驱动器功能产生太大影响,因为操作系统请求始终优先于 SMART 扫描。在服务器上,我总是在 RAID1 镜像中运行磁盘,因此当长时间测试发现坏扇区时,我可以使用镜像中另一个驱动器的数据重写其内容,强制重新分配。
badblocks
有时也很有用——例如它会测试整个驱动器并且不会在出现第一个错误时停止。它可以测试单个分区或驱动器的任何其他部分。您可以使用它来快速检查坏块是否已成功重新分配。这个问题的好答案是
https://superuser.com/a/693065
https://superuser.com/a/693064
与其他答案相反,我发现 badblocks 并没有过时,而是一个非常有用的工具。一旦我用新硬盘升级了我的电脑,它就开始运行不稳定。由于 badblocks,我花了很长时间才意识到磁盘表面有缺陷。从那时起,我为我开始使用的每个新硬盘驱动器运行完整的写入模式(可破坏!)badblocks,再也没有遇到过这个问题。我强烈推荐一个
时间 sudo badblocks -swvo sdX.log /sev/sdX
对于每个新硬盘。它会对磁盘的每一位进行多次写入和读取测试,这样可以避免以后出现很多麻烦。
在此测试期间,驱动器将映射出坏块。因此,应在测试前后记录“重新分配的扇区计数”,并将其与 SMART 阈值进行比较,因为它会说明驱动器的健康状况。
badblocks 是旧时代的遗物,并不是严格意义上的有用,它可以找到当前不可读的扇区,但处理坏扇区的正确方法是从备份中恢复数据。如果数据对您来说不重要,可以做的是删除相关文件并在该位置写入任何内容,这将使磁盘在认为需要时重新分配扇区并继续工作。
磁盘自检也会四处走动并测试整个介质的各种缺陷,与正常操作相比,它应该使用较低的阈值来查看磁盘是否有很多弱点,并且根据供应商逻辑可以决定磁盘已过使用寿命并声明测试失败。到那时,您应该取出所有数据或从备份中恢复数据并更换磁盘。
如果磁盘操作(通过 badblocks 或正常操作)遇到不可恢复的读取错误,磁盘将自动更新其重新分配挂起计数器,并且在执行重新分配时,它将更新重新分配挂起和重新分配计数器。一个简单的 dd 也会让这种情况发生。
如果您需要在两者之间进行选择,使用 smartctl -t long 会对磁盘有更好的分析。
我还可以建议使用我的磁盘扫描实用程序https://github.com/baruch/diskscan,它的工作方式更像 badblocks 但会尝试评估是否有坏区,有点像听力障碍区阅读时间更长。这表示正在发生的媒体问题,在未来的版本中也可能会提供自动尝试来帮助磁盘解决此问题。