badblocks
我最近买了一块4TB的硬盘,想在使用之前对其进行读写测试。由于badblocks
使用-w
选项运行 4TB 需要很长时间,因此我想首先在磁盘上写入一个模式,然后使用该-t
选项通过 读取该模式badblocks
,在几小时而不是几天内完成它。
问题是我无法理解该-t
选项是如何工作的,并且在网上搜索使用with选项badblocks
的示例时没有搜索结果。从手册页来看,测试模式是 0 到 ULONG_MAX-1 之间的数值(我疯狂猜测 ULONG_MAX 是),但我不确定如何提供模式(十进制?十六进制?二进制?ASCII 字符串长度 < ?)。图案大小与块大小有关吗?badblocks
-t
2^32
2^(32/8)
问题的另一部分是编写一个脚本来用该模式填充硬盘。我可以编写一个 Ruby 脚本来做到这一点,但是通过管道传输一个单行 bash 命令pv
就更好了!
答案1
badblocks
首先编写模式应该不会比以其他方式编写模式慢。特别是如果您使用-b block-size
和-c blocks-at-once
选项,这样它就不会进行小的读/写操作。
此示例以 1MiB 块的“随机”模式覆盖磁盘:
badblocks -v -w -t random -b 4096 -c 256 /dev/thedisk
如果速度有问题,应该有其他原因......
答案2
我想,使用一种工具编写模式并使用它读取它badblocks
不会比使用单一模式运行坏块快得多。
该模式需要以十六进制指定,至少我是这么理解的:
badblocks -t 0x55 -w [...]
来源:https://github.com/autotest/ctcs/blob/master/runin/ Destructiveblocktstrnd
答案3
因此,经过更多研究,我想出了一种利用-t
坏块选项的方法(但你应该更喜欢frostschutz 的回答(我在问这个问题时不知何故错过了注意到这个-c
选项))。
写入42
整个硬盘。
yes 4 | tr '\n' 2 | pv -pterb -s 4000G > /dev/sdx
验证通过badblocks
badblocks -vs -t 0x3432 /dev/sdx