DCFLDD 和十六进制编辑器

DCFLDD 和十六进制编辑器

我有时会使用 dcfldd,因为它比常规 dd 功能更多,使用起来也更方便。它提供恒定状态并快速更新,还具有模式输入,这比从 /dev/zero 或任何其他设备读取要快得多。

举个例子,假设我想用 dcfldd 擦除驱动器,我会这样做

dcfldd pattern="00" of=/dev/hda bs=4096

它会将“00000000”逐字节写入驱动器,然后您可以使用 vf= 函数来验证模式。

但我注意到一个小问题,想知道你们是否有人能帮忙。当我运行这个

dcfldd pattern="FF" of=/dev/hda bs=4096; sync
or
dcfldd pattern="11111111" of=/dev/hda bs=4096; sync

我可以用 1 填充驱动器,而且速度非常快。我可以在一个 74GB 的驱动器中填充 5GB 的 1,前提是驱动器已清零。如果我在 Linux 中使用十六进制编辑器(如 xxd 或 hd),我可以看到所有的 1。

但如果我运行这个命令,

dcfldd pattern="00" of=/dev/hda bs=4096; sync

假设只有 1gb 的 0,那么仍然应该有 4gb 的 1。我写了 5gb 的 1,而只有 1gb 的 0 覆盖在 1 上。

尽管我随后用十六进制编辑器查看驱动器,发现驱动器全是 0,即使软件声明它只写入了 1gb 的 0。我尝试尽可能缩短程序的运行时间,并在运行后立即发送 SIGINT。

知道为什么会发生这种情况吗?您可以复制它吗?

答案1

如果您指定块数而不是手动中断它,会发生什么情况?

time dcfldd pattern="FF" of=/dev/hda bs=4096 count=102400; sync

然后做

time dcfldd pattern="00" of=/dev/hda bs=4096 count=51200; sync

并比较结果时间。然后查看磁盘上的数据,看看 1 变为 0 的边界是否在应在的位置(本例中约为 200 兆字节*)。

* 那是真实的MB(1024*1024),而不是“可能”字节。

答案2

要获得任何有意义的结果,除非您希望覆盖整个分区或磁盘,否则您需要提供一个计数参数。在您提供的示例中,您没有指定计数。我不明白您怎么会期望得到 5gb 的 1 或 1gb 的 0。

相关内容