dd
をpv
と組み合わせて進行状況を示す例をオンラインで常に見ています...しかし、私が理解していないことは、pv
が完全に機能するということです完全にそれ自身でタスクを実行します。では、なぜdd
も使用するのでしょうか。 dd
がpv
に提供しない利点はありますか?
dd
とpv
の両方を使用した例。これらのいくつかは本当に複雑です...
dd if=/dev/sda | pv | dd of=/mnt/backup.img
dd if=/dev/sda | pv -s 10G | dd of=/mnt/backup.img
dd if=/dev/sda | (pv -s `fdisk -l /dev/sda | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | dd of=/mnt/backup.img
pv
だけを使用して、同じことを達成できます。
pv /dev/sda > /mnt/backup.img
ええと、 pv
はパイプ操作の見通しを提供するだけなので、本当の問題は、パイプ/リダイレクトが dd
と同等であるということです。もちろん答えはノーです。
dd
の使用法の単純なケースは、IOリダイレクトまたはパイピングと同様に機能するように見えるかもしれませんが、dd
は、ファイルに関連する多くの機能を備えたかなり複雑なツールです。データ変換(パイプはファイルが何であるかをほとんど知らず、バイトの順序/エンコードの種類は言うまでもありません)、リダイレクトはビットをプッシュするだけで、pv
はパイプを通過するデータを監視するだけです。単にバイトを数えるだけではありません。
dd
は、ブロックやアドレスなどのディスク構造を理解しますが、pv
はそれを認識していません。 dd
はドライバーレベルでカーネルとインターフェースしますが、pv
は大量のIO抽象化の上で発生します。
たとえば、dd
は、次の方法でディスクのMBRのバックアップを取得できます(常に63番目のブロックにあります)。
dd if=/dev/sda of=MBR_boot.img bs=512 count=1 skip=62
リダイレクト/配管でそれを行うためのクリーンな方法はありません。