磁盘末尾的dd命令bs选项


10

如果我要使用以下dd命令:

dd if=/dev/zero of=/dev/sdX bs=16M

如果它不是16M的整数倍,那么在磁盘末尾会发生什么?这是否意味着磁盘的最后剩余部分未归零?

我在https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/中注意到,他写道,美国政府使用

dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc

conv=notrunc选项是否可以确保擦除每个最后一个字节?

dd 

Answers:


12

无论其大小是您传递给的块大小的倍数,都会擦除整个输出设备dd

notrunc当输出是设备文件时,该标志无效,因为截断设备文件无效。如果输出是常规文件,则其结果是在写入之前输出文件不会被截断,这在某些文件系统上意味着旧数据将被覆盖(与写入新的数据块并保留其余数据无关),但是,这并不是有用的,因为并非所有文件系统都保证此属性,而且该命令不仅会覆盖文件,还会继续写入,直到它填满输出磁盘(或发生其他错误)为止。

而不是使用的dd和担心,无论您是正确使用它(因为它发生,它工作在这种特殊情况下,但它的复杂有时不工作),只需使用cat

cat /dev/zero >/dev/sdX

尽管人们普遍相信网络,但绝对没有魔力dd使它更适合写入磁盘。魔术在/dev文件中。任何工具,可以用二进制数据,如任何现代应付cat或者head,因为可以做同样的工作dd,除非你传递标志,如seekskip

请注意,存在一个共同的问题ddcat即一旦成功运行,它们就会出错并显示“设备上没有剩余空间”(ENOSPC)。如果将其放在脚本中,则需要检查错误是否为ENOSPC或使用其他方法。一种更可靠的方法是首先确定设备的大小(例如,/proc/partitions在Linux下使用),然后使用诸如之类的工具准确写入正确数量的字节head

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX

8

没问题- dd写入末尾(No space left on device),除非它用完了输入,否则受限制count=x,或者发生另一个错误(例如,坏扇区,电缆不良等)。

如果覆盖整个块设备是您的目标,则更shred易于使用。

shred -v -n 1 /dev/deleteme     # pseudorandom data
shred -v -n 0 -z /dev/deleteme  # zeroes

cryptsetup对于带有验证步骤的随机数据(将零加密为随机数据;将随机数据解密回零)。

blkdiscard用于SSD。

或者,wipefs如果只是从头开始,而不是强行清除存储在驱动器上的所有内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.