这里出了什么问题(清除我的主分区)

这里出了什么问题(清除我的主分区)

我正在使用 DD 命令

sudo dd if=/dev/zero of=/dev/sda4 bs=10M

来自 Xubuntu live USB。SDA4 是我的 Home 分区,在尝试使用此命令之前,它已被正常擦除。

这是我在终端中收到的错误:

dd: error writing '/dev/sda4': No space left on device
28474+0 records in
28473+0 records out
298563141632 bytes (299 GB, 278 GiB) copied, 4957.43 s, 60.2 MB/s

任何帮助都将非常感激!

答案1

dd一直写入,直到填满整个设备,错误“设备上没有剩余空间”表示设备已满。它写入了 298563141632 字节(299 GB,278 GiB),而您说您的 sda4 是 278 GiB,因此您已经用零填充了它,它工作正常,没有出错。

显然,dd它并不那么关心写入完整的块,而是写出尽可能多的内容,并且会报告写入的块比读取的块少一个。

为了再检查一下,我用 1M 环路设备尝试了这个小实验:

fallocate -l 1M file1
sudo losetup /dev/loop1 file1
sudo hd /dev/loop1
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00100000

我的 fallocate 已经为零填充,因此准备将 2M 和 700,000 个块中的 dd 写入 1,048,576 设备

$ dd if=/dev/zero bs=2M |tr '\0' x | sudo dd of=/dev/loop1 bs=2M
dd: error writing '/dev/loop1': No space left on device
0+121 records in
0+120 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0274112 s, 38.3 MB/s

没有剩余空间错误,但仍然将 x 写入 /dev/loop1 的每个字节

$ sudo hd /dev/loop1
00000000  78 78 78 78 78 78 78 78  78 78 78 78 78 78 78 78  |xxxxxxxxxxxxxxxx|
*
00100000
$ sudo dd if=/dev/zero of=/dev/loop1 bs=700000 
dd: error writing '/dev/loop1': No space left on device
2+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0148556 s, 70.6 MB/s

再次使用稍微小一点的 bs,仍然填充了设备

$ sudo hd /dev/loop1
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00100000

即使将 bs 与设备大小匹配(在此示例中为 1M),仍然会出现错误

$ sudo dd if=/dev/zero bs=1M  of=/dev/loop1
dd: error writing '/dev/loop1': No space left on device
2+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0164516 s, 63.7 MB/s

bs除非你用&匹配大小count(再次用 x 填充后)

$ sudo dd if=/dev/zero of=/dev/loop1 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0213422 s, 49.1 MB/s

相关内容