我在用坏块对磁盘上的所有数据进行破坏性擦除;使用以下命令:
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)
通过阅读手册页,我可以看到该-w
选项本身包含四个过程:
-w 使用写入模式测试。使用此选项,badblocks 通过在设备的每个块上写入一些模式(0xaa、0x55、0xff、0x00)、读取每个块并比较内容来扫描坏块。此选项不能与 -n 选项结合使用,因为它们是互斥的。
这对我的需求来说太过分了。有没有办法实现单次破坏性传递?
答案1
进一步阅读手册页后,我解决了这个问题。-w
确实执行了一次传递,正如选项描述所暗示的那样-p
:
默认值为 0,表示坏块将在第一次通过后退出。
一次测试由四种测试模式组成:
-w 使用写入模式测试。使用此选项,badblocks 通过在设备的每个块上写入一些模式(0xaa、0x55、0xff、0x00)、读取每个块并比较内容来扫描坏块。
可以使用以下选项覆盖该模式-t
:
-t test_pattern 指定要读取(和写入)磁盘块的测试模式。test_pattern 可以是 0 到 ULONG_MAX-1 之间的数值(含 0 和 ULONG_MAX-1),也可以是单词“random”,它指定块应该用随机位模式填充。对于读/写(-w)和非破坏性(-n)模式,可以通过为每个所需的测试模式指定 -t 选项来指定一个或多个测试模式。对于只读模式,只能指定一个模式,并且不能是“随机的”。使用模式进行只读测试假定指定的模式先前已写入磁盘 - 如果不是,则大量块将无法通过验证。如果指定了多个模式,则将先用一个模式测试所有块,然后再继续下一个模式。
示例命令和输出:
# badblocks -wsvt 0 /dev/sdz
Checking for bad blocks in read-write mode
From block 0 to 488386583
Testing with pattern 0x00: done
Reading and comparing: done
Pass completed, 0 bad blocks found. (0/0/0 errors)
答案2
如果目标是销毁数据而不是查找错误,那么你可以使用
dd if=/dev/zero of=/dev/sdX status=progress
其中 X 是目标设备的字母。
但如果你真的担心磁盘上的数据,你可以多次运行 dd,使用其他工具(如 wipe 或 shred)或直接让 badblocks 完成它的工作。这一切都取决于你愿意投入多少时间来删除数据。