15.5.16. blockpull を使用したバッキングチェーンの短縮化

blockpull は、以下のように応用して使用することができます。
  • イメージにそのバッキングイメージチェーンのデータを設定することにより、イメージをフラット化します。これにより、イメージファイルはバッキングイメージやこれに類するものに依存しなくてすむような自己完結型のファイルになります。
    • 使用前: base.img ← Active
    • 使用後: ゲストによる base.img の使用がなくなり、Active にすべてのデータが含まれます。
  • バッキングイメージチェーンの一部をフラット化します。この部分はスナップショットをトップレベルのイメージにフラット化するために使用でき、以下のようになります。
    • 使用前: base ← sn1 ←sn2 ← active
    • 使用後: base.img ← active。active には sn1 および sn2 からの全データが含まれ、ゲストは sn1 も sn2 も使用しません。
  • ディスクのイメージをホスト上の新規ファイルシステムに移動します。これにより、ゲストの実行中にイメージファイルを移動できます。以下のようになります。
    • 使用前 (元のイメージファイル): /fs1/base.vm.img
    • 使用後: /fs2/active.vm.qcow2 が新規ファイルシステムで、/fs1/base.vm.img は使用されません。
  • ポストコピー型ストレージ移行のライブマイグレーションで役立ちます。ディスクイメージは、ライブマイグレーションの完了後にソースホストから移行先ホストにコピーされます。
    つまり、以下のようになります。過去:/source-host/base.vm.img 今後:/destination-host/active.vm.qcow2/source-host/base.vm.img は使用されなくなります。

手順15.3 blockpull を使用したバッキングチェーンの短縮化

  1. blockpull を実行する前に以下のコマンドを実行すると便利です。
    # virsh snapshot-create-as $dom $name - disk-only
  2. チェーンが base ← snap1 ← snap2 ← active となっている場合、以下を実行します。
    # virsh blockpull $dom $disk snap1
    このコマンドは、データを snap2 から active にプルしてから base ← snap1 ← active の状態にすることにより、'snap1' を active のバッキングファイルにします。
  3. blockpull が完了すると、チェーン内の追加イメージを作成したスナップショットの libvirt 追跡は役に立たなくなります。以下のコマンドを使って、古くなったスナップショットの追跡を削除します。
    # virsh snapshot-delete $dom $name - metadata
blockpull のその他の応用は、以下のように実行できます。
  • 単一イメージをフラット化し、これにそのバッキングイメージチェーンのデータを設定する: # virsh blockpull example-domain vda - wait
  • バッキングイメージチェーンの一部をフラット化する: # virsh blockpull example-domain vda - base /path/to/base.img - wait
  • ディスクイメージをホスト上の新規ファイルシステムに移動する: # virsh snapshot-create example-domain - xmlfile /path/to/new.xml - disk-only、およびその後の # virsh blockpull example-domain vda - wait
  • ポストコピー型ストレージ移行のライブマイグレーションを使用する方法:
    • 移行先で以下を実行:
       # qemu-img create -f qcow2 -o backing_file=/source-host/vm.img /destination-host/vm.qcow2
    • ソースで以下を実行:
      # virsh migrate example-domain
    • 移行先で以下を実行:
      # virsh blockpull example-domain vda - wait