![`dd` 在物理层面还是文件系统层面起作用?](https://linux22.com/image/1411038/%60dd%60%20%E5%9C%A8%E7%89%A9%E7%90%86%E5%B1%82%E9%9D%A2%E8%BF%98%E6%98%AF%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%B1%82%E9%9D%A2%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
当您从设备(比如 USB 记忆棒)中删除文件时,那么(无需执行任何其他操作)只有文件系统中的条目会被删除,该文件的原始字节仍然在设备上(这就是文件恢复工具通过逐个扫描驱动器上的物理扇区来工作的原因)。
现在,如果我这么做
dd if=/path/to/usbdrive of=/backup/usbdrive.img
USB 驱动器的内容将被复制到指定文件。
当到达已删除文件所在的位置时,将dd
复制零还是复制物理上仍然存在的文件内容?
答案1
dd
只是将输入字节流复制到输出字节流。输入和输出都必须是实际文件。它不会对目录进行操作。因此,在上面的示例中,如果/path/to/usbdrive
是设备节点(即/dev/usb
或其他),则它会执行块级复制,因为/dev/usb
是块设备。在这种情况下,它将复制仍然存在的文件内容。但是您将无法将输入流指向刚刚删除的文件,因为您不再拥有它的句柄。
答案2
它将复制已删除文件的内容(假设该文件未被任何人覆盖)。然而,在目标位置,您将无法访问这些内容,因为您是通过文件系统访问的,而文件系统不知道此空间中存在该文件(因为它已被删除)。
因此从取证角度来说,dd 将复制源设备上的所有垃圾以及数据片段。
你还必须明白,总是存在碎片问题,你的文件可能不在连续的磁盘空间中。这会带来更多麻烦。
我希望这能为你解释清楚。至少如果这是一个理论问题的话。
另一方面,如果这是一个实际问题,那么我认为如果你能更好地解释你想要实现的目标,你会得到更详细的答案。