如何将 pv 与 dd 一起使用?

如何将 pv 与 dd 一起使用?

我正在尝试使用 dd 和 pv 将 iso 写入 USB 驱动器。我做了:

iso="myiso.iso"; dd if="$iso" bs=1M | pv --eta --size $(ls -l "$iso" | awk '{print $5}') --progress --bytes --rate --wait > /dev/sdg

遵循本指南: https://gist.github.com/rriemann/1406035

然而,发生的情况是,根据 pv 的输出,iso 很快就被“写入”了。我猜它都被放入磁盘缓存或类似的地方。然后pv就挂了。 ps 显示 pv 仍在运行,但 dd 没有运行。我尝试了 strace pv,但没有输出,而且 strace 也挂起! ctrl+c 对 strace 没有影响。事实上,它不响应信号 15、3、2 或 1。每个信号等待几分钟。我最终被迫发送了9。

根据这个: http://www.reddit.com/r/linux/comments/1xvr25/linux_tip_dont_use_kill_9/ strace 二进制文件的行为很糟糕。

这是我的问题:

  1. 如何让光伏报告中的数据更有用?我知道它可能正在做它“应该”做的事情,即只是报告它管道的字节。但这对我想知道的没有帮助,这是对写入 USB 驱动器、eta 等的字节的粗略估计。

  2. 为什么 strace 不响应任何信号?我的猜测是 strace 在处理下一个信号之前等待它所监视的进程的系统调用,我认为这是一个错误。但这只是一个猜测。 strace 版本 4.5.20。

答案1

也许您可以放在dd棍子的另一端并尝试通过使用它directsync标志来避免缓存。

pv "$iso" | dd bs=1M oflag=direct,sync of=/dev/sdg

这样,您应该缓存大多数dd的块大小,在这种情况下1M......加上|我猜管道本身中的任何内容。

相关内容