有时,当我使用dd
thensync
或dd
withconv=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
有能目标特定文件系统。万岁!