10 dd
如果我dd
按如下方式使用命令:
dd if=/dev/zero of=/dev/sdX bs=16M
Run Code Online (Sandbox Code Playgroud)
如果它不是 16M 的精确倍数,那么在磁盘末尾会发生什么?这是否意味着磁盘的最后剩余部分没有归零?
我在https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ 中注意到,他写道美国政府使用
dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc
Run Code Online (Sandbox Code Playgroud)
该conv=notrunc
选项是确保擦除每个最后一个字节的方法吗?
Gil*_*il' 12
无论其大小是否是您传递给的块大小的倍数,都会擦除整个输出设备dd
。
notrunc
当输出为设备文件时,该标志无效,因为截断设备文件无效。如果输出是一个普通文件,那么输出文件在写入之前不会被截断,这在某些文件系统上意味着旧数据被覆盖(而不是写入新数据块并保留其余数据块),但是,这没有用,因为所有文件系统都不能保证此属性,而且该命令不仅会覆盖文件,还会继续写入,直到它填满输出磁盘(或发生其他错误)。
不要使用dd
和担心您是否正确使用它(碰巧,它在这种特殊情况下有效,但它很复杂,有时不起作用),只需使用cat
.
cat /dev/zero >/dev/sdX
Run Code Online (Sandbox Code Playgroud)
尽管网络上流行这种看法,但绝对没有什么神奇之处dd
可以使它更适合写入磁盘。魔法就在/dev
文件中。任何可以处理二进制数据的工具,例如任何现代的cat
or 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
Run Code Online (Sandbox Code Playgroud)
没有问题 —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
Run Code Online (Sandbox Code Playgroud)
或者cryptsetup
对于带有验证步骤的随机数据(零被加密为随机数据;随机数据被解密回零)。
或者blkdiscard
对于 SSD。
或者,wipefs
如果它只是从头开始,而不是强行删除您曾经存储在驱动器上的所有内容。
归档时间: |
|
查看次数: |
2775 次 |
最近记录: |