'dd' で raw ドライブを lvm にコピーするのは非効率的です。もっと良い方法はありますか?

'dd' で raw ドライブを lvm にコピーするのは非効率的です。もっと良い方法はありますか?

proxmox をインストールしています。vmdk を lvm にインポートしたいのですが、手順は次のとおりです。

$ qemu-img convert -p -f vmdk "IE11 - Win7-disk1.vmdk" -O raw "IE11 - Win7-disk1.raw"

その後:

$ dd if="IE11 - Win7-disk1.raw" bs=1M|pv| dd of=/dev/mapper/pve-vm--103--disk--1

そしてそれはうまく機能します。

しかし、127GB の仮想ドライブには 8.8GB のデータがあります。

$ qemu-img info "IE11 - Win7-disk1.raw"
image: IE11 - Win7-disk1.raw
file format: raw
virtual size: 127G (136365211648 bytes)
disk size: 8.8G

また、raw ドライブを「dd」すると、127 GB がコピーされたことがわかりますが、そのうち 8.8 GB だけが重要です。 そしてそれは非常に遅いのです。

もっと良い方法はあるでしょうか?

答え1

より速い方法は使わないことですdd

pv < "IE11 - Win7-disk1.raw" > /dev/mapper/pve-vm--103--disk--1

cat一番早いのは直接使うことです

cat "IE11 - Win7-disk1.raw" > /dev/mapper/pve-vm--103--disk--1

の呼び出しではdd512 バイトのブロックが使用されていたため、KB あたり 2 回のシステム コール読み取り、つまり MB あたり約 2000 回読み取りが行われます。 を使用すると、catおそらく MB あたり 1 回で済むでしょう。

答え2

XenServer から Proxmox に移行していたときに、この解決策を見つけました。

まず、qcow2 ファイルがない場合はそれを取得します (ソース ファイルが raw ディスク イメージでない場合は、ここで別のコマンドを使用する必要があるかもしれません。重要なのは、結果として qcow2 ファイルを取得することです)

qemu-img convert rawimage.img -O qcow2 thinimage.qcow2

qcow2イメージをrawに変換するスパースファイル:

qemu-img convert -p -f qcow2 -O raw -t none -T none thinimage.qcow2 rawsparce.raw

スパース ファイルを VM のシン LV に書き込みます。

dd if=rawsparce.raw of=/dev/mapper/pve-vm--100--disk--1 bs=8M conv=sparse status=progress

答え3

RAW 形式は事前割り当てのみをサポートするため、 で変換するとフル サイズのディスクが得られますqemu-img

事前割り当てなしでも動作する形式vmdkに画像ファイルを変換してみてください。qcow2

関連情報