21.14. virt-sparsify: 空きディスク容量の再利用
virt-sparsify コマンドラインツールを使用すると、仮想マシンのディスク (またはディスクイメージ) をスパースにできます。これは、シンプロビジョニングとも呼ばれます。ディスクイメージの空きディスク領域は、ホストの空き領域に変換されます。
virt-sparsify コマンドは、ext2、ext3、ext4、btrfs、NTFS などのほとんどのファイルシステムで機能します。また、LVM 物理ボリュームでも動作します。virt-sparsify は、仮想マシンのディスクイメージだけでなく、任意のディスクイメージで動作できます。
警告
稼働中の仮想マシンで virt-sparsify を使用したり、他のディスク編集ツールを併用すると、ディスクが破損する可能性があります。このコマンドを使用する前に、仮想マシンをシャットダウンする必要があります。また、ディスクイメージは同時に編集しないでください。
このコマンドは、一部のディスク形式の間での変換にも使用できます。たとえば、virt-sparsify は、未加工のディスクイメージを、シンプロビジョニングの qcow2 イメージに変換できます。
注記
仮想マシンに複数のディスクがあり、ボリュームマネージメントを使用する場合は、virt-sparsify が機能しますが、それほど効果はありません。
入力が raw の場合、デフォルトの出力は raw sparse になります。出力イメージのサイズは、スパース性を理解するツールを使用して確認する必要があります。
$ ls -lh test1.img -rw-rw-r--. 1 rjones rjones 100M Aug 8 08:08 test1.img $ du -sh test1.img 3.6M test1.img
なお、ls コマンドでは、イメージのサイズは 100M であることを示しています。ただし、du コマンドは、イメージサイズが 3.6M であることを正しく示しています。
重要な制限
以下は、重要な制限のリストです。
- virt-sparsify を使用する前に、仮想マシンを シャットダウンする必要があります。
- 最悪の場合は、virt-sparsify はソースディスクイメージの最大 2 倍の仮想サイズを必要とする場合があります。1 つは一時コピー用で、もう 1 つは宛先イメージ用です。
--in-place
オプションを使用すると、大量の一時領域が必要なくなります。 - virt-sparsify を使用して、ディスクイメージのサイズを変更することはできません。ディスクイメージのサイズを変更するには、virt-resize を使用します。virt-resize の詳細は、「virt-resize: ゲスト仮想マシンのオフラインでのサイズ変更」 を参照してください。
- 暗号化されたディスクはスパース化できないため、virt-sparsify は暗号化されたディスクでは機能しません。
- virt-sparsify では、パーティション間の領域をスパースにすることはできません。この領域はブートローダーなどの重要なアイテムによく使用されるため、実際には未使用のスペースではありません。
copy
モードでは、qcow2 の内部スナップショットは、宛先イメージにコピーされません。
例
virt-sparsify
をインストールするには、次のいずれかのコマンドを実行します。
# yum install /usr/bin/virt-sparsify
または
# yum install libguestfs-tools-c
ディスクのスパース化
# virt-sparsify /dev/sda1 /dev/device
/dev/sda1
のコンテンツを/dev/device
にコピーして、出力をスパースにします。/dev/device
がすでに存在する場合は上書きされます。/dev/sda1
の形式が検出され、/dev/device
の形式として使用されます。
形式を変換するには、次のコマンドを実行します。
# virt-sparsify disk.raw --convert qcow2 disk.qcow2
ソースディスクイメージ内にあるすべてのファイルシステムの空き領域をゼロに設定し、スパース化します。
特定のファイルシステムで、空き領域がゼロで上書きされないようにするには、次のコマンドを実行します。
# virt-sparsify --ignore /dev/device /dev/sda1 /dev/device
ファイルシステムの空き領域をゼロで上書きすることなく、ディスクイメージ内のすべてのファイルシステムからスパース化されたディスクイメージを作成します。
一時コピーを作成せずにディスクイメージをスパースにするには、次のコマンドを実行します。
# virt-sparsify --in-place disk.img
指定したディスクイメージをスパースにし、イメージファイルを上書きします。
virt-sparsifyオプション
virt-sparsify では、以下のコマンドオプションを使用できます。
コマンド | 説明 | 例 |
---|---|---|
--help | 特定のコマンドまたは virt-sparsify ユーティリティーに関する簡単なヘルプエントリーを表示します。詳細なヘルプは、man ページの virt-sparsify を参照してください。 | virt-sparsify --help |
--check-tmpdir ignore |continue |warn |fail | tmpdir に、操作を完了するのに十分な領域があるかどうかを推定します。操作を完了するのに十分な領域がない場合の動作を指定するには、このオプションを使用します。
--in-place オプションとは併用できません。 |
virt-sparsify --check-tmpdir ignore
/dev/sda1 /dev/device
virt-sparsify --check-tmpdir continue
/dev/sda1 /dev/device
virt-sparsify --check-tmpdir warn
/dev/sda1 /dev/device
virt-sparsify --check-tmpdir fail
/dev/sda1 /dev/device
|
--compress | 出力ファイルを圧縮します。これは、出力形式が qcow2 の場合に のみ 機能します。このオプションは、--in-place オプションとは併用できません。 | virt-sparsify --compress /dev/sda1 /dev/device |
--convert |
指定した形式を使用してスパースイメージを作成します。形式を指定しない場合は、入力形式が使用されます。
raw、qcow、vd の出力形式がサポートされ、動作が確認されています。
QEMU エミュレーターで対応している形式はどれでも使用できます。
--convert オプションを使用することが推奨されます。この方法では、virt-sparsify が入力形式を推測する必要がありません。
このオプションは、
--in-place オプションとは併用できません。
|
virt-sparsify --convert raw
/dev/sda1 /dev/device
virt-sparsify --convert qcow2
/dev/sda1 /dev/device
virt-sparsify --convert other_format indisk outdisk
|
--format | 入力ディスクイメージの形式を指定します。指定しない場合は、イメージから形式が検出されます。信頼できない raw 形式のゲストディスクイメージを使用する場合は、形式を指定してください。 |
virt-sparsify --format raw
/dev/sda1 /dev/device
virt-sparsify --format qcow2
/dev/sda1 /dev/device
|
--ignore |
指定したファイルシステムまたはボリュームグループを無視します。
ファイルシステムを指定し、
--in-place オプションを指定しない場合は、ファイルシステムの空き領域はゼロになりません。ただし、ゼロの既存ブロックはスパース化されています。--in-place オプションを指定しても、ファイルシステムは完全に無視されます。
ボリュームグループを指定しても、ボリュームグループは無視されます。ボリュームグループ名には、/dev/ 接頭辞を使用しないでください。たとえば、‑‑ignore vg_foo です。
--ignore オプションは、複数回指定できます。
|
virt-sparsify --ignore filesystem1
/dev/sda1 /dev/device
virt-sparsify --ignore volume_group
/dev/sda1 /dev/device
|
--in-place |
一時的なコピーを作成する代わりに、イメージをインプレースでスパースにします。インプレーススパース化は、スパース化をコピーするよりも効率的ですが、スパース化をコピーするのと同じディスク領域は復旧できません。インプレーススパース化は、破棄 (トリムまたはアンマップとしても知られている) サポートを使用して機能します。
インプレーススパース化を使用するには、インプレースでスパース化されるディスクイメージを指定します。
インプレーススパース化を指定する場合は、以下のオプションを使用できません。
| virt-sparsify --in-place disk.img |
-x | libguestfs API 呼び出しの追跡を有効にします。 | virt-sparsify -x filesystem1 /dev/sda1 /dev/device |
詳細および追加オプションは、libguestfs.org を参照してください。