将
dd if=/dev/zero of=somepartition bs=512
Run Code Online (Sandbox Code Playgroud)
还擦除分区后somepartition或停止在结束somepartition?
sud*_*dus 19
dddd是一个非常强大但也很危险的工具。它会做你告诉它做的事情,没有问题。因此,如果您告诉它擦除全家福,......这是一个轻微的打字错误。
但是,如果您检查并仔细检查,则可以使用它。
dd if=/dev/zero of=somepartition bs=512
Run Code Online (Sandbox Code Playgroud)
或者我会建议
dd if=/dev/zero of=/dev/sdxn bs=4096
Run Code Online (Sandbox Code Playgroud)
其中x是驱动器号,n是分区号和块大小 4096 字节使写入过程更快。
在这种情况下,写入分区很重要。如果您写入整个驱动器(驱动器头端)/dev/sdx,整个驱动器将被覆盖。但是写入分区会在分区结束时中断,并且会保留其后面的分区。(我现在在 Lubuntu 16.04 LTS 中的 U 盘上进行了测试,所以我知道它是这样工作的。)
扩展分区有一个例外(它是逻辑分区的容器,以便在 MSDOS 分区表中有四个以上的分区)。这在以下链接中有所描述,
但还有另一个问题。我在测试环境中测试了您的命令,当我希望它制作扩展分区的映像时,dd 只读取了 1 千字节(1024 字节)。
我现在也在 Lubuntu 16.04 LTS 的 U 盘上测试了这个,这适用于写作(以及阅读)。只有第一个 kibibyte 会被覆盖。
总而言之,覆盖主分区和逻辑分区根据此答案中的主要描述工作。但不要使用此方法覆盖扩展分区,因为只会覆盖第一个 kibibyte。扩展分区的逻辑分区将不再通过分区表找到,但存储在其中的数据仍然存在。
我认为您的问题是基于对dd(实际上是类 Unix 操作系统)如何工作的根本误解:
dd不能覆盖相邻的分区,只是因为dd不能覆盖分区,period。
dd只是写入文件。就是这样。
现在,如果您传递dd一个代表多个分区的文件,那么dd将覆盖该文件。但在这种情况下,它不会dd写入超过分区的末尾。dd仍然会写到文件末尾,并且只写到文件末尾。
但是,如果您传递dd一个仅代表一个分区的文件,则dd不会写入超过该分区的末尾。同样,这与dd. dd只需写入您告诉它写入的文件。该文件代表单个分区的事实(在这种情况下)由内核中的块设备驱动程序确保。dd与此无关。
所以,简而言之:dd写入文件。这些文件所代表dd的内容与 无关。dd对分区一无所知。