21.13. スナップショットの使用
21.13.1. データのコピーによるバッキングチェーンの短縮化
virsh blockcommit domain <path> [<bandwidth>] [<base>] [--shallow] [<top>] [--active] [--delete] [--wait] [--verbose] [--timeout <number>] [--pivot] [--keep-overlay] [--async] [--keep-relative] コマンドを使用してバッキングチェーンを短縮する方法について説明します。このコマンドには数多くのオプションがあり、これらは help メニューまたは man ページに一覧表示されています。
virsh blockcommit コマンドは、チェーンの一部にあるデータをバッキングファイルにコピーし、コミットされた部分をバイパスするためにチェーンの残りの部分をピボットします。たとえば、以下が現在の状態であるとします。
base ← snap1 ← snap2 ← active.virsh blockcommit を使用して、snap2 のコンテンツを snap1 に移行します。これにより、チェーンから snap2 を削除でき、より迅速にバックアップを作成することができます。
手順21.1 バッキングチェーンの短縮化方法
- 以下のコマンドで guest1 をゲスト仮想マシンの名前で、disk1 をディスク名で置き換えて実行します。
#
virsh blockcommit guest1 disk1 --base snap1 --top snap2--wait--verbosesnap2 のコンテンツが snap1 に移行します。以下のようになります。base ← snap1 ← activesnap2 は無効になり、削除することができません。警告
virsh blockcommitは、--base引数に依存するすべてのファイルを破損させます (--top引数に依存していたファイルを除く。これらは base を指すようになる)。これを防ぐには、複数のゲストが共有するファイルへの変更をコミットしないでください。--verboseオプションを使用すると、進捗が画面に出力されます。
21.13.2. イメージのフラット化によるバッキングチェーンの短縮化
virsh 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は使用されなくなります。
手順21.2 データのフラット化によるバッキングチェーンの短縮化
virsh blockpullの実行前にスナップショットを実行すると便利です。スナップショットを作成するには、virsh snapshot-create-asコマンドを使用します。以下の例で guest1 をゲスト仮想マシンの名前に、snap1 をスナップショットの名前に置き換えます。#
virsh snapshot-create-as guest1 snap1--disk-only- チェーンが
base ← snap1 ← snap2 ← activeのようになる場合、以下のコマンドを入力し、guest1 をゲスト仮想マシンの名前に、path1 をディスクのソースパス (/home/username/VirtualMachines/*など) に置き換えます。#
virsh blockpull guest1 path1このコマンドは、データを snap2 から active にプルすることでbase ← snap1 ← activeとなり、snap1 を active のバッキングファイルにします。 virsh blockpullが完了すると、チェーン内の追加イメージを作成したスナップショットの libvirt 追跡は意味をなさなくなります。以下のコマンドを使って、古くなったスナップショットの追跡を削除します。この際、guest1 をゲスト仮想マシンの名前に、snap1 をスナップショットの名前に置き換えます。#
virsh snapshot-delete guest1 snap1 --metadata
virsh blockpull は他にも、以下の使い方ができます。
例21.31 単一イメージをフラット化し、バッキングイメージチェーンのデータを設定する方法
# virsh blockpull guest1 vda --wait
例21.32 バッキングイメージチェーンの一部をフラット化する方法
# virsh blockpull guest1 vda /path/to/base.img --base --wait例21.33 ディスクイメージをホストの新規ファイルシステムに移動する方法
# virsh snapshot-create guest1 --xmlfile /path/to/snap1.xml --disk-only# virsh blockpull guest1 disk1 --wait例21.34 ポストコピー型ストレージ移行のライブマイグレーションを使用する方法:
# qemu-img create -f qcow2 -o backing_file=/source-host/vm.img /destination-host/vm.qcow2# virsh migrate guest1# virsh blockpull guest1 disk1 --wait21.13.3. ゲスト仮想マシンのブロックデバイスのサイズ変更
virsh blockresize コマンドを使用して、ゲスト仮想マシンの実行中にゲスト仮想マシンのブロックデバイスのサイズを変更することができます。この際、固有のターゲット名 (<target dev="name"/>) またはソースファイル (<source file="name"/>) にも対応するブロックデバイスの絶対パスを使用します。これは、ゲスト仮想マシンに割り当てられているディスクデバイスのいずれかに適用できます (コマンド virsh domblklist を使用して、所定のゲスト仮想マシンに関連付けられたすべてのブロックデバイスの簡単な情報を表示する表を出力できます)。
注記
echo > /sys/class/scsi_device/0:0:0:0/device/rescan を使って、ゲスト内の再スキャンを手動でトリガーすることが求められます。さらに IDE の場合、ゲストが新たなサイズを認識する前にゲストを再起動しておく必要があります。
例21.35 ゲスト仮想マシンのブロックデバイスのサイズを変更する方法
# virsh blockresize guest1 90 B
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.