对我来说,以下命令执行完全相同的操作:
dd if=/dev/zero of=/dev/sd1
dd if=/dev/null of=/dev/sd1
rm -r /dev/sd1/*
也就是说,它们的应用结果是相同的。或者至少,对于第一和第三个是这样的。事实真的如此吗?
答案1
不,他们不做同样的事情。rm /dev/sda1
删除设备节点,设备上的所有文件都保持不变。如果我们假设您犯了一个错误并且实际上是rm -r /mountpoint/of/dev/sda1
,那么这些命令将具有类似的效果。
但它们仍然有显着的不同:rm
删除索引节点,使文件数据无法通过文件系统有效访问。但数据仍保留在设备上,直到被新数据覆盖。您通常可以通过复制原始设备数据 ( dd if=/dev/sda1
) 并在其上运行恢复工具来恢复大部分数据。
dd if=/dev/zero of=/dev/sda1
将覆盖设备的每个字节,使其显著地从设备恢复数据变得更加困难。一些取证公司仍然可以发挥一些魔力,并且通常建议使用随机数据多次覆盖设备以防止这种情况发生。但如果您确实担心这一点,那么消除数据的最佳方法就是从物理上销毁设备。