我想使用坏块来检查我的硬盘,并希望能够澄清其操作。
有人能解释一下使用-b
和 的最佳选项-c
吗?我已经从手册页中包括了它们的定义,但不确定更大的尺寸是否对具有 64MB RAM 和 4k 扇区的现代磁盘有益。
-b block-size Specify the size of blocks in bytes. The default is 1024.
-c number of blocks the number of blocks which are tested at a time. The default is 64
其次,我想知道写入模式测试是否比非破坏性读写模式更彻底?
最后,有多少个 SMART 扇区重新分配是可以接受的/是否应该立即替换具有非零重新分配计数的驱动器?
答案1
问题 1:
关于-b
选项:这取决于您的磁盘。现代大磁盘有 4KB 块,在这种情况下您应该设置-b 4096
。您可以获取块大小从操作系统,通常也可以通过从标签上读取磁盘信息或通过谷歌搜索磁盘型号来获得。如果-b
设置为大于块大小的值,badblocks
则结果的完整性可能会受到影响(即,您可能会得到假阴性:未找到坏块,但可能仍然存在)。如果-b
设置为小于驱动器的块大小的值,则运行速度badblocks
可能会受到影响。我不确定,但设置-b
为小于块大小的值可能会有其他问题,因为它不是在验证整个块的完整性,如果设置得太小,仍然可能会得到假阴性。
该-c
选项对应于应一次检查多少个块。基本上是批量读取/写入。此选项不会影响结果的完整性,但会影响运行速度badblocks
。badblocks
将(可选)按照指定的每 N 个块写入,然后读取、缓冲、检查、重复。-c
如果-c
设置得太低,这将使您的badblocks
运行时间比平时长得多,因为排队和处理单独的 IO 请求会产生开销,并且磁盘可能还会对每个请求施加额外的开销。如果-c
设置得太高,badblocks
可能会耗尽内存。如果发生这种情况,badblocks
将在启动后很快失败。这里的其他考虑因素包括并行badblocks
运行:如果您badblocks
针对同一个磁盘上的多个分区(坏主意)或通过同一个 IO 通道针对多个磁盘运行,则可能需要-c
在可用内存的情况下调整到合理的高值,badblocks
以便并行运行不会争夺 IO 带宽,并且可以以合理的方式并行化。
问题2:
与其他答案相反,写入-w
模式测试的可靠性并不比非破坏性读写测试更高或更低,但速度却是非破坏性读写测试的两倍,代价是破坏所有数据。我来解释一下原因:
在非破坏模式下,badblocks
执行以下操作:
- 读取现有数据,对其进行校验(如有必要,请再次读取),并将其存储在内存中。
- 将预定的模式(可使用
-p
选项覆盖,但通常没有必要)写入块中。 - 读回该块,验证读取的数据是否与模式相同。
- 将原始数据写回磁盘。
- 我对此不确定,但它也可能重新读取并验证原始数据是否已成功写入,并且仍然对同一内容进行校验。
在破坏性(-w
)模式下,badblocks
仅执行上述步骤 2 和 3。这意味着验证数据完整性所需的读/写操作次数减少了一半。如果某个块是坏的,则无论哪种模式,数据都是错误的。当然,如果您关心驱动器上存储的数据,则应使用非破坏性模式,因为非破坏性模式将删除-w
所有数据,而将badblocks
模式写入磁盘。
警告:如果一个区块去坏,但还没有完全消失,一些读/写验证对可能有效,而有些可能无效。在这种情况下,非破坏性模式可能会为您提供更可靠的块“糊状”指示,因为它会进行两组读/写验证(可能——请参阅步骤 4 下的项目符号)。即使非破坏性模式以这种方式更可靠,它也只是更可靠碰巧检查并非完全损坏但无法维持多次读/写操作的块的正确方法是badblocks
使用该选项对相同数据运行多次-p
。
问题 3:
如果 SMART 正在重新分配扇区,您可能应该考虑尽快更换驱动器。丢失几个扇区的驱动器不会总是不断丢失数据,但原因通常是使用频繁的驱动器磁力变弱,或磁头/电机故障导致读取/写入不准确或失败。当然,最终决定权在您手中:根据驱动器上数据的价值以及您需要在其上运行的系统所需的可靠性,您可能会决定继续使用。我的文件服务器中有一些已知坏块的驱动器,多年来一直发出 SMART 警告,但它们已按计划备份,因此我可以轻松处理完全故障。
答案2
1) 如果您的现代磁盘使用 512b 以外的扇区大小 - 那么您需要使用-b
选项 (即-b 4096
) 设置该大小。如果没有该选项,您的检查将运行得更慢,因为每个实际扇区将被多次尝试 (如果是 4k 扇区则为 8 次)。此外,正如 Olivier Dulac 在问题评论中提到的那样 -block is indeed 1 block, and not 1/2 or 1/4th or even 2 (or more) blocks.
选项-c
暗示一次尝试多少个扇区。它可能对性能有一定影响,并且性能值可能取决于特定的磁盘模型。
2)write-mode test
-据我了解,它只会检查您是否有硬错误或软错误(又称静默数据降级、位腐烂、存储介质腐烂、UNC 扇区)
3)我不会相信某个时间点的 SMART 报告。更重要的是价值观如何随时间而变化。以下是 Google 的研究大量磁盘驱动器的故障趋势以下是一些讨论以下是研究引述:
尽管相关性很高,但我们得出结论,仅基于 SMART 参数的模型不太可能用于预测单个驱动器故障。
关于其他人提到的更换磁盘 - 您可能没有硬盘坏盘问题,而是静默数据降级(位衰减、存储介质衰减、UNC 扇区)。在这种情况下,更换磁盘是没有意义的,但将相同数据读/写回磁盘是有用的。您可以看看这里如何解决该问题。
如果出现硬错误,您可以尝试重新分区驱动器,使坏区域不在任何分区中。对我来说,这种方法很有用,这种坏驱动器使用很长时间都没有出现任何问题。
答案3
除非您有特殊原因要更改 -b 和 -c,否则我会保留默认值。如果您的磁盘块大小为 4k,则可能可以将 -b 设置为 4096。
我建议您首先使用非破坏性 rw 测试运行坏块。如果发现任何坏扇区,则磁盘已损坏,应更换。如果在非破坏性测试中未发现任何坏块,但您仍然怀疑它有坏块,则运行破坏性 rw 测试。
最后,有多少个 SMART 扇区重新分配是可以接受的/是否应该立即替换具有非零重新分配计数的驱动器?
一旦扇区被替换,我就会更换驱动器。
答案4
回答您关于重新映射扇区的第二个问题,这要视情况而定。我是从偶尔监控此类内容的家庭用户的角度来谈这个问题的。
- 驱动器上存储的数据有多重要?
- 如果驱动器突然发生故障,会造成什么损失?
- 数据是否在其他地方备份?
- 该驱动器是否是 RAID 的成员,驱动器丢失的影响最小?
- 重新映射的扇区的数量是否在增长?
以下是我遇到的两种情况。我有一个由 6 个 200GB 驱动器组成的 RAID5。在一次导致灯光闪烁的电源故障后,一个驱动器显示 14 个重新映射的扇区并记录了几个错误。我观察了驱动器,没有记录更多错误,重新映射的扇区数保持稳定。我得出结论,驱动器因电源瞬变而受损,并没有其他故障。我继续使用它多年。最初的 RAID5 已退役,但我有两个驱动器在使用中,通电时间约为 10 年。它们有少量重新映射的扇区。我使用其中两个镜像来存储来自我的主要备份的增量备份转储。这样,主备份就会看到(大部分)读取操作,而写入将转到不同的设备。如果其中一个旧驱动器发生故障,另一个应该可以继续运行。如果两个都失败了,我会用其他驱动器替换它们并重新运行备份脚本。如果其中一个驱动器发生故障,影响接近于零,所以我不担心重新映射的扇区。
我有一块 2TB 的 HDD,它是一对镜像驱动器中的一个,它的重新映射扇区开始增长。一开始是几十个,然后是几百个,然后是几千个。这种情况持续了好几年。这对驱动器中的另一个驱动器仍然运行正常,事实上,缓慢故障的驱动器并没有从阵列中删除。最后,我用 6TB 驱动器替换了这两个驱动器,不断增长的重新映射扇区数不再是问题。我仍然有这个驱动器,它仍然“工作”,即使有大约 4500 个重新映射的扇区。我把这样的驱动器放在一个测试系统中(作为 RAID 成员),看看当一个驱动器真的坏了时会发生什么。我有几次机会来处理这个驱动器,在所有情况下,替换都没有出现任何问题。
我的主备份文件服务器上确实有一个驱动器发生故障。它没有发出任何提前警告,只是停止响应 SATA 命令。它是 ZFS RAIDZ2 的成员,我毫无意外地更换了它。事实上,在我的测试服务器上,我更换了故障驱动器,而无需关闭电源或重新启动服务器。
还有一点需要注意,我已将所有重要数据在现场和异地备份。如果任何一个系统丢失,其他地方还有两份数据副本。