dd 函数在完成后似乎冻结

Nat*_*tjo 30 linux dd arch-linux

我正在尝试使用以下命令在 USB 记忆棒上复制 ISO:

sudo dd bs=4M if=lubuntu-17.04-desktop-amd64.iso of=/dev/sdc status=progress 
Run Code Online (Sandbox Code Playgroud)

什么是直截了当的。iso大小为912M。为什么输出文本在这里冻结而不是结束程序?

956301312 bytes (956 MB, 912 MiB) copied, 11.216 s, 85.3 MB/s
Run Code Online (Sandbox Code Playgroud)

我什至无法阻止程序运行ctr-c.

Tho*_*est 47

您看到的行为只是dd在操作后同步磁盘上的数据。为了优化 IO 操作,Linux 通常以比请求更大的块读取数据(预读)并延迟写入以便将它们组合起来(脏缓存)。在操作结束时,dd同步磁盘上的文件或内核隐式执行此操作,并且该进程保持活动状态直到所有写入完成。

如果机器上没有其他大量 IO 操作,您应该能够通过查看“Dirty:”值来估计还有多少数据要写入/proc/meminfo- 这是待写入磁盘的数据总量。

可以使用以下 sysctl 调整旋钮控制系统可以在任何时候未写入内存中的数据量。默认情况下仅使用比率。您可以以百分比(比率)或字节为单位定义该值。

vm.dirty_background_ratio
vm.dirty_ratio
vm.dirty_background_bytes
vm.dirty_bytes
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到这些参数的官方文档:

https://www.kernel.org/doc/Documentation/sysctl/vm.txt