为什么在用随机数据填充驱动器时,GNU Shred 比 dd 更快?

为什么在用随机数据填充驱动器时,GNU Shred 比 dd 更快?

我注意到,在退役前安全地擦除硬盘时,这dd if=/dev/urandom of=/dev/sda需要将近一整天的时间,而shred -vf -n 1 /dev/sda使用同一台计算机和同一个硬盘则只需要几个小时。

这怎么可能?我猜瓶颈在于 的输出有限/dev/urandom。shred 是否使用了一些伪随机性生成器,这种生成器的随机性比 低,并且仅能满足其单一用途(即更高效)urandom

答案1

撕碎使用内部伪随机数发生器

默认情况下,这些命令使用由少量熵初始化的内部伪随机生成器,但可以使用 --random-source=file 选项指示使用外部源。如果文件不包含足够的字节,则会报告错误。

例如,设备文件/dev/urandom可以用作随机数据源。通常,此设备会将来自设备驱动程序和其他来源的环境噪声收集到熵池中,并使用该池生成随机位。如果池中数据不足,设备会使用加密安全的伪随机数生成器重新使用内部池来生成更多位。但请注意,此设备并非设计用于批量随机数据生成, 相对较慢

我不认为随机数据比单次通过(或任何其他字节值)来掩盖先前的内容。

为了安全地退役驱动器,我使用了一个大磁铁和一把大锤子。

答案2

我猜这可能是因为dd使用较小的块来写入数据。尝试dd if=... of=... bs=(1<<20)看看它是否能更好地执行。

相关内容