无论其大小是您传递给的块大小的倍数,都会擦除整个输出设备dd
。
notrunc
当输出是设备文件时,该标志无效,因为截断设备文件无效。如果输出是常规文件,则其结果是在写入之前输出文件不会被截断,这在某些文件系统上意味着旧数据将被覆盖(与写入新的数据块并保留其余数据无关),但是,这并不是有用的,因为并非所有文件系统都保证此属性,而且该命令不仅会覆盖文件,还会继续写入,直到它填满输出磁盘(或发生其他错误)为止。
而不是使用的dd
和担心,无论您是正确使用它(因为它发生,它工作在这种特殊情况下,但它的复杂和有时不工作),只需使用cat
。
cat /dev/zero >/dev/sdX
尽管人们普遍相信网络,但绝对没有魔力dd
使它更适合写入磁盘。魔术在/dev
文件中。任何工具,可以用二进制数据,如任何现代应付cat
或者head
,因为可以做同样的工作dd
,除非你传递标志,如seek
或skip
。
请注意,存在一个共同的问题dd
,cat
即一旦成功运行,它们就会出错并显示“设备上没有剩余空间”(ENOSPC)。如果将其放在脚本中,则需要检查错误是否为ENOSPC或使用其他方法。一种更可靠的方法是首先确定设备的大小(例如,/proc/partitions
在Linux下使用),然后使用诸如之类的工具准确写入正确数量的字节head
。
size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX