为什么 dd 读取和写入同一个磁盘?

Emm*_*maV 6 linux dd external-hdd

我一直dd在 Linux 中使用来覆盖外部 USB 硬盘驱动器。

当我使用 512 字节的默认块大小时,使用以下命令:

# dd if=/dev/zero of=/dev/sdb
Run Code Online (Sandbox Code Playgroud)

在整个操作过程中,硬盘驱动器(/dev/sdb)被交替读取和写入,一次大约 1GB。即read 1GB... ... write 1GB... ... read 1GB... ...write 1GB等尽可能多的数据从硬盘读出被写入。

我知道这是因为它显示在我的自定义 Conky 面板 ( diskio_read, diskio_write) 中,我知道它是磁盘 I/O 活动的 100% 可靠指标。

我在另一台计算机上使用不同的外部硬盘驱动器重复了这一点。它通过 USB 2.0 和 USB 3.0 发生。

相比之下,当我做同样的事情,但使用 1MB 的块大小时,使用以下命令:

# dd if=/dev/zero of=/dev/sdb bs=1M
Run Code Online (Sandbox Code Playgroud)

除了开始时有少量读取外,在运行过程中根本不读取硬盘驱动器。

鉴于这种现象发生在我的两台不同的计算机和两个不同的硬盘上,使用标准的 Linux 发行版(Xubuntu 14.04),任何想要的人都应该能够在自己的计算机上复制它。

有人可以解释一下这里发生了什么吗?

ctr*_*l-d 7

如果您指定的块大小(512 字节)小于磁盘的块大小(通常为 4096 字节,但现在可能更多),则块将被部分写入,因此必须保留块其余部分的内容在写作之前。

这是因为不能仅用 512 字节写入磁盘块,而必须一次写入完整块(4096 或更大)。当你写入这个(4096)数量或更多时,没有部分写入,所以它不必读取。