有时同步会因 dd 而卡住

有时同步会因 dd 而卡住

有时,当我使用ddthensyncddwithconv=fsync时,同步过程会被卡住,但有时不会,因为输入和输出目标和配置完全相同。

dd if=2016-03-18-raspbian-jessie-lite.img of=/dev/sdg conv=fsyn
sync # freeze here

或者

dd if=2016-03-18-raspbian-jessie-lite.img of=/dev/sdg conv=fsync

我在 Ubuntu、Linux Mint(很久以前)等不同发行版上经历过这种不一致的行为,现在在 Gentoo 和 4 台不同的机器上也经历过这种不一致的行为。

答案1

我发现自己经常遇到这样的情况:pv image_file | dd of=/dev/slow_usb_stick显示前几百兆字节刚刚飞过(到缓冲区),然后传输速度严重减慢。退出时dd需要刷新整个缓冲区。然后,sync为了移除棒子,我必须再等待几分钟,因为缓冲区很大并且设备很慢。

所以也许这就是耐心。我想缓冲区大小取决于可用内存。有时缓冲区可能非常大并且sync“卡住”,有时则不然。这是一个猜测。


我观察到的另一个现象:sync刷新所有缓冲区(即所有设备)。有几次我想移除 USB 记忆棒(在dd拔掉它之后)sync,但同时我的 HDD 正忙于进行大量写入操作。 HDD 的数据传输速度太快,缓冲区无法清空。冰冻sync与那时无关dd。因此,我希望sync能够针对特定设备并退出,而不管所有其他设备。

编辑:

我的愿望实现了。在 Ubuntu 16.04.2 LTS 中我sync (GNU coreutils) 8.25目标特定文件系统。万岁!

相关内容