如何在破坏性模式下对坏块进行单次传递?

Jon*_*ley 4 linux hard-drive bad-sectors

我正在使用坏块同时 (a) 检查磁盘是否有错误,以及 (b) 对磁盘上的任何数据进行破坏性擦除;使用以下命令:

badblocks -wsp 0 /dev/sdb1

我通过了这个选项-p 0,希望这只会导致一次通过,但我得到了多次通过:

Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: 19.01% done, 7:43:47 elapsed. (0/0/0 errors)
Run Code Online (Sandbox Code Playgroud)

通过阅读联机帮助页,我可以看到该-w选项本身包括四遍:

-w 使用写模式测试。使用此选项,badblocks 通过在设备的每个块上写入一些模式(0xaa、0x55、0xff、0x00)、读取每个块并比较内容来扫描坏块。此选项不能与 -n 选项结合使用,因为它们是互斥的。

这对我的需求来说太过分了。有没有办法实现单一的破坏性传球?

Jon*_*ley 5

进一步阅读手册页后,我已经解决了这个问题。-w正如-p选项的描述所暗示的那样,确实做了一次传递:

默认值为 0,意味着 badblocks 将在第一次通过后退出。

一个通过由四个测试模式组成:

-w 使用写模式测试。使用此选项,badblocks 通过在设备的每个块上写入一些模式(0xaa、0x55、0xff、0x00)、读取每个块并比较内容来扫描坏块。

可以使用以下-t选项覆盖模式:

-t test_pattern 指定要读取(和写入)到磁盘块的测试模式。test_pattern 可以是介于 0 和 ULONG_MAX-1 之间的数值,也可以是单词“random”,它指定应使用随机位模式填充块。对于读/写 (-w) 和非破坏性 (-n) 模式,可以通过为每个所需的测试模式指定 -t 选项来指定一个或多个测试模式。对于只读模式,只能指定一个模式并且它可能不是“随机”的。使用模式进行只读测试假定指定模式之前已写入磁盘 - 如果没有,大量块将无法通过验证。如果指定了多个模式,则在继续下一个模式之前,所有块都将使用一个模式进行测试。

例如:

badblocks -wst 0 /dev/sdb1

  • @ArchLinuxTux 从`-p` 选项的描述中暗示:*“默认为0,意味着坏块将在第一次通过后退出。”* (2认同)