在现代磁盘上使用“坏块”


21

我想使用Badblocks检查我的HDD,并希望对其操作进行说明。

有人可以解释与-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扇区重新分配/应该立即更换具有非零重新分配计数的驱动器吗?


3
对于第二部分:一旦您开始看到坏块,这意味着出了点问题。这可能是一个好兆头,您应该在根本无法读取之前更换磁盘。但是在所有情况下,在出现故障之前,除工作副本外,还应始终保留2个重要数据备份(1个本地备份,1个远程备份)。在此处查看我的答案的详细信息:superuser.com/a/528181/174998
Olivier Dulac

4
对于块大小:应反映您的操作系统用于在该硬盘驱动器上存储数据的实际块大小(根据使用的文件系统)。并不是要加快速度,而是要将一个块标记为“坏”,该块的确是1个块,而不是1/2或1/4甚至2个(或更多)块。
Olivier Dulac

Answers:


21

问题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执行以下操作:

  1. 读取现有数据,对其进行校验和(必要时再次读取),并将其存储在内存中。
  2. 将预定的模式(-p虽然通常不是必需的)写到该块中(可以用该选项覆盖)。
  3. 读回该块,确认读取的数据与模式相同。
  4. 将原始数据写回到磁盘。
    • 我对此不确定,但是它也可能会重新读取并验证原始数据是否已成功写入,并且仍然对同一件事进行校验和。

在破坏性(-w)模式下,badblocks仅执行上面的步骤2和3。这意味着验证数据完整性所需的读/写操作数量减少了一半。如果一个块坏了,则在任何一种模式下数据都将是错误的。当然,如果您关心驱动器上存储的数据,则应使用非破坏性模式,因为这样-w会清除所有数据,而将badblocks'模式写入磁盘。

警告:如果一个块差,但还没有完全消失,一些读/写验证对可工作,有的可能没有。在这种情况下,非破坏性模式可以为您提供一个可靠的块“笨拙”指示,因为它会进行两组读/写验证(也许-请参阅步骤4的项目符号)。即使非破坏性模式以这种方式更可靠,但碰巧它也仅是更可靠。检查不是很坏但不能承受多次读/写操作的块的正确方法是badblocks使用该-p选项对同一数据运行多次。

问题3:

如果SMART正在重新分配扇区,则您可能应该考虑尽快更换驱动器。丢失了几个扇区的驱动器并非总是会丢失,但是其原因通常是频繁使用的驱动器变得磁糊,或者磁头/电机故障导致读取/写入不正确或失败。当然,最终的决定权取决于您:根据驱动器上数据的值以及运行于其上的系统所需的可靠性,您可能会决定保持该数据不变。我的文件服务器中有一些带有已知坏块的驱动器,多年来一直在运行SMART警告,但它们已按计划进行备份,因此我可以轻松处理全部故障。


4
知道为什么-b默认为1024吗?在我看来,这很奇怪。为什么不512呢?
Ryan J

6
@RyanJ 1024是的最小块大小ext2。badblocks是e2fsprogs的一部分,最初旨在填充ext2文件系统的坏块列表。您必须使用与FS相同的块大小来运行它,才能以正确的格式获取mkfs.ext2的数字。TL; DR:您不应该担心的历史原因。
sourcejedi 2016年

BUUUTT,@ Zac B说:“如果将-b设置为大于块大小的值,则坏块结果的完整性可能会受到损害” 1024> 512。但是也许应该重申一下:“如果-b设置为大于块大小的值,而不是块大小的两倍,那么坏块结果的完整性可能会受到损害”。你怎么说原始海报,其他人比我聪明?
Billy C.

4

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暗示一次有多少个类Tryid。它可能会对性能产生一定的影响,而该性能的价值可能取决于特定的磁盘模型。

2)write-mode test-以我的理解,它只会检查您是否存在严重错误或软错误(aka静默数据降级,位腐烂,存储介质衰减,UNC扇区)

3)我不会在某个时间点信任SMART报告。价值如何随时间变化更重要。另外,这里是Google 大量磁盘驱动器故障趋势的研究,下面是一些讨论。这是根据研究得出的:

尽管相关性很高,但我们得出的结论是,仅基于SMART参数的模型不太可能对预测单个驱动器故障有用。

关于其他人提到的磁盘替换问题-您可能不是硬盘坏问题,而是静默数据降级(位腐烂,存储介质衰减,UNC扇区)。在那种情况下,替换磁盘没有意义,但是对同一数据执行读/写回磁盘很有用。您可以在这里查看如何解决。

如果您遇到严重错误,则可以尝试以损坏区域位于所有分区之外的方式对驱动器进行重新分区。对我而言,这种方法很有用,这种不良的驱动器被长时间使用而没有任何问题。


第一句话是错误的,-b默认为1024。如果磁盘使用的扇区大小不是1024,这在ext2文件系统之外很常见,则应指定该大小。
Hashim

1

除非您有特定原因要更改它们,否则我将-b和-c保留为默认设置。如果磁盘的块大小为4k,则可以将-b设置为4096。

我建议您首先使用无损rw测试运行坏块。如果发现任何坏扇区,则表明磁盘已损坏,应进行更换。如果它在非破坏性上未找到任何坏块,但您仍然怀疑它有坏块,请运行破坏性rw测试。

最后,可接受多少SMART扇区重新分配/是否应立即更换具有非零重新分配计数的驱动器?

更换扇区后,我将立即更换驱动器。


2
更换扇区后,我将立即更换驱动器。您怎么知道模块在正常运行中会变坏?您是否以某种方式收到信号?
亚历克西斯·威尔克

5
您必须监视SMART日志。
ЯрославРахматуллин

1
除非您有特定理由要更改它们。就像块大小不同于默认值1024一样,这很常见吗?
卡卡马诺

1

这种类型进入了坏块读取模式(非破坏性)和写入模式(破坏性)之间的区别:

仅当写入失败时,驱动器才会重新分配坏扇区。仅当尝试重新写入文件时,文件的读取错误才会“更正”。除此以外。假设您可能能够恢复某些内容,则坏块仍是文件的一部分。只能通过在写入模式下运行坏块并重新创建分区来“更正”分区表的读取错误。

因此,读取模式将告诉您坏块在哪里,但对它们无能为力。写入模式会测试每个扇区的运行状况,并将导致磁盘重新分配坏块,但会破坏数据。随便你吧。


0

要回答有关重映射扇区的第二个问题,这取决于。我是从(偶尔)监视此类内容的家庭用户的角度讲的。

  • 数据在驱动器上的重要性如何?
  • 如果驱动器突然断电会丢失什么?
  • 数据是否在其他地方备份?
  • 该驱动器是否是RAID的成员,对驱动器的丢失影响最小?
  • 重新映射的部门数量在增加吗?

这是我遇到的两种情况。我有6个200GB驱动器的RAID5。电源故障导致指示灯闪烁后,一个驱动器显示了14个重新映射的扇区,并记录了多个错误。我看着驱动器,没有更多的错误记录下来,并且重新映射的扇区数保持稳定。我得出的结论是,该驱动器由于电源瞬变而遭受了损坏,并且没有其他故障。我继续使用了多年。原来的RAID5已退役,但我有两个这样的驱动器投入使用,且通电时间约为10年。他们有一些重新映射的部门。我使用其中两个镜像来存储主备份中的增量备份转储。这样,主备份将看到(主要是)读取操作,而写入将转到不同的设备。如果这些古老的驱动器之一发生故障,则其他驱动器应继续运行。如果都失败了 我将它们替换为其他内容,然后重新运行备份脚本。如果这些驱动器之一发生故障,影响将接近零,因此我不必担心重新映射的扇区。

我有一个2TB HDD,它是一对镜像驱动器之一,并且开始增加重新映射的扇区。最初是几十个,然后是数百个,然后是数千个。这是过去的几年。该对中的另一个驱动器保持健康,实际上,失败失败的派生驱动器并未从阵列中删除。最终,我将两个驱动器都替换为6TB驱动器,并且越来越多的重新映射的扇区数成为问题。我仍然拥有该驱动器,即使重新映射了大约4500个扇区,它仍然可以“运行”。我已经将这样的驱动器放入测试系统中(作为RAID成员),以查看当一个驱动器实际死亡时会发生什么。我有很多机会可以解决这个问题,并且在任何情况下替换工作都不会引起任何麻烦。

我的主备份文件服务器上确实有驱动器故障。它没有产生任何高级警告,只是停止响应SATA命令。它是ZFS RAIDZ2的成员,我没有任何戏剧性地替换了它。实际上,在我的测试服务器上,我已经更换了发生故障的驱动器,而没有关闭并重新启动服务器。

还有一点要注意,我对所有重要数据进行了现场和非现场备份。如果任何一个系统丢失,则在其他位置有两个数据副本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.