会
dd if=/dev/zero of=somepartition bs=512
之后还会擦除分区somepartition
或者在结束时停止somepartition
?
答案1
使用以下方式覆盖分区dd
dd
是一款功能强大但也很危险的工具。它会毫无顾忌地执行你的指令。因此,如果你让它删除家庭照片,……只需输入一个小小的错误即可。
但如果你检查再三,你可以使用它。
dd if=/dev/zero of=somepartition bs=512
或者我建议
dd if=/dev/zero of=/dev/sdxn bs=4096
在哪里x
是驱动器号,n
是分区号和块大小4096字节使得写入过程更快。
写入分区很重要在这种情况下。如果您写入整个驱动器(驱动器头端),/dev/sdx
整个驱动器将被覆盖。但写入分区将在分区末尾中断,后面的分区将被保留。(我测试过现在在 Lubuntu 16.04 LTS 中的 USB 闪存盘上,所以我知道它是这样工作的。)
扩展分区的例外
扩展分区 (逻辑分区的容器,以便在 MSDOS 分区表中拥有超过四个分区) 有一个例外。以下链接对此进行了描述,
但还有另一个问题。我在测试环境中测试了您的命令,当我想让它创建扩展分区的映像时,dd 只读取了 1 千字节(1024 字节)。
我现在也在 Lubuntu 16.04 LTS 中的 USB 闪存盘上测试了这一点,这适用于写入(以及读取)。只有第一个千字节被覆盖。
总而言之,覆盖主分区和逻辑分区的工作方式与本答案中的主要描述一致。但不要使用此方法覆盖扩展分区,因为只会覆盖第一个千字节。扩展分区的逻辑分区将不再通过分区表找到,但存储在其中的数据仍然存在。
答案2
我认为你的问题是基于对dd
(事实上类 Unix 操作系统一般而言)工作原理的根本误解:
dd
无法覆盖相邻分区,只是因为dd
无法覆盖分区,时期。
dd
只需写信给文件。 就是这样。
现在,如果你传递dd
代表的文件多种的分区,然后dd
将覆盖那个文件。但在这种情况下,它不会dd
写入分区末尾。dd
仍然会写入到文件末尾,并且仅有的直到文件末尾。
但是,如果您传递的dd
文件仅代表一个分区,则dd
不会写入该分区末尾以外的内容。同样,这与 无关dd
。dd
只是写入您告诉它写入的文件。此文件代表单个分区这一事实(在本例中)由内核中的块设备驱动程序确保。dd
与此无关。
简而言之:dd
写入文件。这些文件代表什么,与 无关dd
。dd
对分区一无所知。
答案3
写入分区设备不会写入该分区之外的内容,无论是使用 dd 还是其他任何命令。您需要使用整个磁盘设备才能在单个分区之外产生任何影响。
(警告:除非您的磁盘具有重叠分区的分区表,否则这种情况永远不会发生。)
答案4
你必须小心使用 dd,因为如果你犯了一个错误,你可能会覆盖比你预期更多的内容,这取决于你使用 dd 的目的(OP 在使用 dd 以及 dd 命令的确切语法时含糊其辞)。
如果您指定分割它将写入该分区,直到该分区已满。
如果您犯了一个错误并放入了整个驱动器,例如 of=/dev/sda ,则 dd 将从头到尾写入整个驱动器,忽略(并覆盖)您的分区表。
您还可以在分区上使用 dd 来覆盖已删除的文件(已删除的文件可能会保留在分区上,并被各种恢复工具以不同程度的成功率发现,直到它们被覆盖。在这种情况下,您可以使用 dd 通过写入文件来填充可用空间。
dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_file
但是,根据你正在做的事情,你可能希望使用其他工具来安全地删除文件。请参阅如何以安全的方式删除文件?选项。