web-dev-qa-db-ja.com

圧縮する前にqcow2画像をゼロフィルする必要がありますか?

動的に割り当てられたqcow2イメージを縮小するために再作成したいと思います。不要なファイルをすべて削除するだけで十分ですか、それとも以前はそれらのファイルが占めていたスペースをゼロで埋める必要がありますか?言い換えれば、qemu-imgファイルシステムは認識していますか?

6
Josh

参照:virt-sparsify、ディスクイメージ内のファイルシステムをゼロで埋めることができるユーティリティ(さまざまな形式をサポート):

http://libguestfs.org/virt-sparsify.1.html

3

はい、削除されたファイルによって使用されていたスペースを回復したい場合は、ファイルシステムをゼロで埋める必要があります。いいえ、qemu-imgはfsに対応していません。

今日作成した1つのVMイメージ(稼働中のopenstackクラウド用の最小限のDebian Sidイメージ))に対してこれを行うのを忘れ、qcow2に「-c」を付けても900MB近くになりました。圧縮。

「ddif =/dev/zero of =/root/zero; rm -f/root/zero; shutdown -h now」を実行した後、再作成しましたが、イメージサイズは約335MBに縮小しました。これは、新しいインスタンスを起動するたびにコピーするデータがはるかに少ない(価値がない)ものです。

VMはdebiansqueezeとして開始され、apt-getがsidにアップグレードされたため、削除されたファイルがたくさんありました。

3
cas

私はzerofreeを使用しています(apt-get install zerofree)このタスクの場合:

Zerofreeは、ext2、ext3、またはext4ファイルシステムでゼロ以外の値のコンテンツを持つ未割り当てのブロックを検索し、それらをゼロで埋めます

その後、画像を縮小できます。
kvm-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2

1
ThorstenS

個人的には、ClonezillaまたはSymantecGhostを使用してディスクのクローンを作成する方がうまくいくと思います。ドライブをゼロで埋めるよりもはるかに高速です。また、画像がさらに大きくなるのを防ぎます。

私はこれをGhostとWinのゲストで数え切れないほど行ってきました。 「使用済みスペース」がゼロ化されるスペースよりも小さい場合は、実際には高速です。また、qemu-nbdを使用してイメージをマウントし、ホストからClonezillaを実行して、ゲスト内のClonezillaの煩わしさを回避することもできます。いずれにせよ、私の経験では、常にsdelete/ddよりもはるかに高速です。 (また、完全なゼロアウトゲストディスク操作のためにホスト上で使用可能なスペースがなくなることがよくあるため、ゲストの使用可能なスペースを埋めることはほとんど不可能です。)

0
phoeagon