如何将 pv 与 dd 一起使用?

cat*_*nts 3 dd strace pv

我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)

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

但是,发生的情况是根据 pv 的输出非常快速地“写入”iso。我猜它都被放到了磁盘缓存或类似的地方。然后 pv 就挂了。ps 显示 pv 仍在运行,但 dd 不是。我试过 stracing 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。

fro*_*utz 5

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

pv "$iso" | dd bs=1M oflag=direct,sync of=/dev/sdg
Run Code Online (Sandbox Code Playgroud)

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