Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 では、以下のコマンドオプションを使用できます。

表21.4 virt-sparsifyオプション

コマンド 説明
--help 特定のコマンドまたは virt-sparsify ユーティリティーに関する簡単なヘルプエントリーを表示します。詳細なヘルプは、man ページの virt-sparsify を参照してください。 virt-sparsify --help
--check-tmpdir ignore|continue|warn|fail tmpdir に、操作を完了するのに十分な領域があるかどうかを推定します。操作を完了するのに十分な領域がない場合の動作を指定するには、このオプションを使用します。
  • ignore: この問題を無視し、操作を続行します。
  • continue: エラーを報告し、操作を続行します。
  • warn: エラーを報告し、ユーザーが Enter キーを押すのを待ちます。
  • fail: エラーを報告し、操作を中止します。
このオプションは、--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
一時的なコピーを作成する代わりに、イメージをインプレースでスパースにします。インプレーススパース化は、スパース化をコピーするよりも効率的ですが、スパース化をコピーするのと同じディスク領域は復旧できません。インプレーススパース化は、破棄 (トリムまたはアンマップとしても知られている) サポートを使用して機能します。
インプレーススパース化を使用するには、インプレースでスパース化されるディスクイメージを指定します。
インプレーススパース化を指定する場合は、以下のオプションを使用できません。
  • --convert および --compress は、ディスクフォーマットの大規模な変更が必要なため、使用できません。
    --check-tmpdir は、大量の一時領域が必要ないため、使用できません。
virt-sparsify --in-place disk.img
-x libguestfs API 呼び出しの追跡を有効にします。 virt-sparsify -x filesystem1 /dev/sda1 /dev/device
詳細および追加オプションは、libguestfs.org を参照してください。