ddは、出力をパイピングしながら「生」の進行状況を表示します。

ddは、出力をパイピングしながら「生」の進行状況を表示します。

特定のdd操作を実行し、トランスポートの「生」データを他のインターフェース(たとえばターミナルではない)からのトランスポートのリアルタイムビューを提供するために、他のものによってポーリングされるログファイルに追加しようとしています。

dd操作は次のとおりです。

dd if=/some/lvm bs=512K | gzip -c > /tmp/whatever

私が見る最も簡単な方法は、コマンドをファイルに出力し、同時に-SIGUSR1 pidで終了して出力を表示することです。しかし、プロセスのpidを変数に保存し、終了コマンドで使用する方法を見つけることはできません。 。

私はこれのための1つか2つのライナーを見ました。

dd if=/some/lvm of=/some/fat/image/which/I/cant/use bs=512K& pid=$!; \
sleep 1; while [[ -d /proc/$pid ]]; do kill -USR1 $pid && sleep 1; done

pidを変数にインポートする方法を理解していないので、パイプ出力を使用するように変更することはできません。

ddの代替案を見てうれしいですが、ほとんどはdcflddと同じ行を更新するのと同じくらい複雑ですが、私の考えでは呪いのようなアプローチです。これにより、毎秒その出力のスナップショットを撮り、必要なデータを抽出することが困難になります。これを処理する簡単な方法がある場合、または「生」出力を取得できる場合は、PVにパイプすることもできます。

私を啓発してください。 ;-)

挨拶

編集:だから「解決策」を見つけました。まだきれいじゃないけど

pgrepを使用してプロセスIDを見つけることができるので、ddコマンドが実行されてファイルに出力されると、毎秒出力転送の進行watch -n1 'sudo kill -USR1 $(pgrep ^dd)'状況を実行し、ポーラーがその進行状況を解釈できます。

これはまだエレガントな解決策ではなく、ジレンマのように感じます。より良い方法がある場合は、まだ提案に開いています。 :-)

ベストアンサー1

最良の答えは、pvパイピングできるすべてのプロセスの進行状況を見ることができるということです。

dd if=/some/lvm bs=512K | pv | gzip -c > /tmp/whatever

以下を使用して、ddディスクイメージを作成または書き込みする一般的な目的にも使用できます。ddpv

dd if=/dev/cdrom | pv | dd of=/path/to/some.iso

おすすめ記事