我正在使用 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