问题1:
关于-b
选项:这取决于您的磁盘。现代的大磁盘具有4KB的块,在这种情况下,您应该设置-b 4096
。您可以从操作系统中获取块大小,通常也可以通过从标签上读取磁盘信息或通过查询磁盘的型号来获得块大小。如果-b
将其设置为大于块大小的值,则badblocks
可能会损害结果的完整性(即,您可能会得到假阴性:当坏块可能仍然存在时,找不到坏块)。如果-b
将其设置为小于驱动器的块大小,则badblocks
可能会降低运行速度。我不确定,但是设置可能还会有其他问题-b
小于您的块大小,因为它无法验证整个块的完整性,因此,如果将其设置得太小,可能仍然会得到假阴性。
该-c
选项对应于应一次检查多少个块。基本上是批量读取/写入。此选项不会影响结果的完整性,但会影响badblocks
运行速度。badblocks
将(可选)对N指定的每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警告,但它们已按计划进行备份,因此我可以轻松处理全部故障。