如果我将零添加到 dd 所在的驱动器会发生什么?

agz*_*agz 10 linux dd

dd if=/dev/zero of=/dev/sda bs=1M如果 dd 命令最初在 /dev/sda 上,这个命令会成功吗?这会因为 dd 当时在内存中而完成吗?

Hen*_*nes 40

可能会发生三种情况:

  1. 命令启动,运行直到完成,您将返回到提示。由于磁盘被有效地擦除了,之后你不能做太多事情,尽管你可能会幸运地使用一些 shell 内置命令。
  2. 命令开始。在某些时候,由于内存压力,它会被调出。通常这不是问题,因为它的一部分可以从交换的磁盘(未更改的数据)重新加载。但是,如果您只是擦除了这些内容,则 dd 命令会在填充磁盘时部分失败。
  3. 第三个选项来自 BSD。已安装磁盘上的 MBR 受到保护,不会被覆盖。即使您以 root 身份运行命令。有几十个 Linux 发行版,每个发行版都略有不同。他们中的一些人很可能会效仿这一点。


到此为止的理论。现在进行实际测试。

我在虚拟机上安装了一个全新的 Ubuntu 12.10。(win7-x64 上的 VMware 工作站,使用默认选项和 10 GB 虚拟磁盘)。

dd 命令成功完成,我在似乎可以正常工作的提示下返回。我可以输入新命令,但由于显而易见的原因它们会失败。

擦除磁盘后 Ubuntu VM 的屏幕截图

  • 我看到“分段错误”,你声称它成功完成......? (10认同)
  • 实际测试大+1! (9认同)

Mar*_*mas 6

在使用 Damn Small Linux 的虚拟机中进行的快速实验表明 dd 命令确实按预期完成;程序最初被加载到内存中运行,在此过程中一次又一次地加载可执行文件几乎没有意义。最终,dd 将退出并报告“设备上没有剩余空间”。

之后,操作系统乍一看似乎运行正常,但在第一个命令后挂起,由于明显的原因无法再执行并变得无响应。对硬盘驱动器内容的简要检查表明该分区确实已被清零。