ddでpvを使用する方法は?

ddでpvを使用する方法は?

ddとpvを使用してUSBドライブにisoを書き込もうとしています。私はそうしました:

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. PVレポートのデータをどのように便利にすることができますか?私はそれがおそらく「しなければならない」こと、つまりパイプされたバイトを報告することをしていることを知っています。しかし、これはUSBドライブ、エタなどに記録されたバイトのおおよその推定値である私が知りたいことには役に立ちません。

  2. なぜstraceはどの信号にも応答しないのですか?私の考えでは、straceが次の信号を処理する前に監視しているプロセスのシステムコールを待っているようですが、これがバグだと思います。しかし、これは単なる推測です。トレースバージョン4.5.20。

答え1

ddたぶんスティックのもう一方の端に置いて、それとdirectフラグsyncを使用してキャッシュを避けたいと思うかもしれません。

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

これを行うと、ほとんどddのチャンクサイズをキャッシュする必要があります。この場合、パイプ自体のすべてのコンテンツ1Mもキャッシュする必要があります。|

関連情報