我一直在Linux中使用dd来覆盖外部USB硬盘.
当我使用512字节的默认块大小时,使用以下命令:
# dd if=/dev/zero of=/dev/sdb
在整个操作过程中,硬盘驱动器(/ dev / sdb)交替读取和写入,一次大约1GB.即读取1GB …写入1GB …读取1GB …写入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
除了在开始时的少量读数之外,在操作期间根本不读取硬盘驱动器.
鉴于这种现象发生在我的两台不同的计算机和两台不同的硬盘驱动器上,使用标准的Linux发行版(Xubuntu 14.04),任何想要的人都应该能够在自己的计算机上复制它.
有人可以解释一下这里发生了什么吗?
解决方法:
如果指定的块大小(512字节)小于磁盘的块大小(通常为4096字节,但现在可能更多),则将部分写入块,以便必须保留块的其余部分的内容在写之前.
这是因为磁盘块只能用512字节写入,但您必须一次写入一个完整的块(4096或更大).当你写这个(4096)金额或更多时,没有部分写,所以它不必阅读.
标签:linux,dd,external-hdd
来源: https://codeday.me/bug/20190810/1641319.html