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),任何想要的人都应该能够在自己的计算机上复制它。
有人可以解释一下这里发生了什么吗?
如果您指定的块大小(512 字节)小于磁盘的块大小(通常为 4096 字节,但现在可能更多),则块将被部分写入,因此必须保留块其余部分的内容在写作之前。
这是因为不能仅用 512 字节写入磁盘块,而必须一次写入完整块(4096 或更大)。当你写入这个(4096)数量或更多时,没有部分写入,所以它不必读取。