KVM - ライブ外部スナップショットと適切なディスク名

KVM - ライブ外部スナップショットと適切なディスク名

実行中のKVMゲストの外部スナップショットを撮るには、次のコマンドを実行します。

# create the directory for the snapshot data
mkdir /vms/$DOMAIN/snapshots/$SNAPSHOT_NAME

# create the snapshot
virsh snapshot-create-as \
--domain $DOMAIN $SNAPSHOT_NAME \
--diskspec vda,file=/vms/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2,snapshot=external \
--memspec file=/vms/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem,snapshot=external \
--atomic

VMが呼び出され、新しくインストールした直後にスナップショットを撮るために自分のスナップショットがvm1呼び出された場合は、次のフォルダ構造を持つことができます。base-installation

/
|- vms/
   |- vm1/
      |- disk.qcow2
      |- snapshots/
           |-base-installation/
               |-disk.qcow2
               |-mem

これで構造は私が望むようになりましたが、残念ながらdisk.qcow2ファイルの向きが間違っています(交換する必要があります)。スナップショットフォルダ内disk.qcow2のファイルは、base-installation実際にスナップショットを作成したときのディスクの状態を示す必須の読み取り専用バックアップファイルではなく、仮想マシンへの将来のすべての書き込みに使用されるオーバーレイディスクイメージです。このフォルダのすぐ下にあるdisk.qcow2ファイルは、vm1最近上書きされたディスクイメージではなく、読み取り専用バックアップファイルです。

質問

virsh snapshot-create-as読み取り専用サポートファイルを指定されたdisk-specパスに保存し、上書きポインタディスクファイルを元の場所に置くようにコマンドを変更する方法はありますか?または、VMの「一時停止」、ディスクファイル交換、ゲストのxml定義の更新、VMの復元などの回避策はありますか?理想的には、訪問者をブロックしたり、かなりのダウンタイムを引き起こしたくありません。

答え1

メタデータからスナップショットを削除し、「実際の」スナップショットを実行する前に、中間の「スナップショット」を実行し、そのスナップショットでブロックプールを実行して解決策を見つけました。その後、オーバーレイ画像が開始位置に戻り、データが配置されます。スナップショットフォルダにあります。少し手間がかかり、将来的にはより良い基本的な解決策があることを願っていますが、私のように待つことができない場合は、以下の手順を詳しく説明します。

スピード

まず、設定を適切に設定してください。

# Your settings may vary
DOMAIN="guest1"
SNAPSHOT_NAME="base-installation"
VMS_DIR="/vms" 

これで、スナップショットデータを保存するディレクトリを作成します。

mkdir -p $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME

これで、作成したスナップショットディレクトリにオーバーレイイメージを作成する中間スナップショットを作成します。

virsh snapshot-create-as \
--domain $DOMAIN intermediary_snapshot \
--diskspec vda,file=$VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2,snapshot=external \
--memspec file=$VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem,snapshot=external \
--atomic

メモ:仮想マシンでpingを実行していますが、コマンドの実行中にPingが一時的に一時停止するようです。

blockpullを使用して、バックアップファイルのデータをスナップショットディレクトリのアクティブオーバーレイイメージに移動します。

virsh blockpull \
--domain $DOMAIN \
--path $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2 \
--wait \
--verbose

メモ:あなたはする必要がありますいいえコマンドに引数を指定してください--base。それ以外の場合は何も行いません。なぜなら、引数を指定すると、コマンドは指定されたベースを--baseデフォルトディレクトリとして保持し、デフォルトディレクトリではなく中間層(私たちが持っていない)だけをマージするからです。それ自体。

以前のコマンドを実行するのに約30秒かかりましたが、VMはその間に幸せにpingを実行しました。

ls -alhスナップショットディレクトリを表示するイメージdisk.qcow2のサイズは2.2 GBですが、より重要なのはバックアップファイルがqemu-img info disk.qcow2表示されないため、すべてのデータがスナップショットディレクトリにあり、「スタンドアロンイメージ」であることがわかります。

これで、この中間スナップショットステップの知識を削除してメタデータをクリーンアップします。

virsh snapshot-delete \
--domain $DOMAIN \
intermediary_snapshot \
--metadata

これで、不要になった元のサポートファイルと、絶対に使用しない中間のmemspecファイルも削除されました。

rm $VMS_DIR/$DOMAIN/disk.qcow2
rm $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem

この時点でインスタンスを終了し、手動で起動して問題がないか、すべてが正常に動作するかどうかをテストしました。

この時点で、すべての「準備」が完了したと考えることができます。これでスナップショットを撮るだけです。ただし、オーバーレイイメージが最上位の$DOMAINディレクトリにあり、memspecファイルがスナップショットフォルダにあることを指定する必要があります。バックアップディスクイメージの横にあります。

virsh snapshot-create-as \
--domain $DOMAIN $SNAPSHOT_NAME \
--diskspec vda,file=$VMS_DIR/$DOMAIN/disk.qcow2,snapshot=external \
--memspec file=$VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/mem,snapshot=external \
--atomic

それだけです!

ストレージへの影響

上記の手順を繰り返して多くのスナップショットを作成すると、各スナップショットフォルダ内の他のファイルに依存せずに完全に回復可能なスナップショットが得られますが、これは多くのスペースを無駄にすることに注意する必要があります。後続のスナップショットでは、パラメータ変更コマンドを使用blockpullして--base、各スナップショットに以前のスナップショットをマージするのではなくバックアップイメージとして使用させることができます。

スナップショットの復元

スナップショットリストを実行すると、新しいスナップショットを表示できます。ただし、外部スナップショットの復元はまだサポートされていないため、そのコマンドを実行できないためvirsh snapshot-revert(少なくとも私が使用しているubuntu 16.04ではサポートされていません)、現在アクティブなオーバーレイイメージを削除して手動で実行する必要があります。

rm $VMS_DIR/$DOMAIN/disk.qcow2

次に、復元したいスナップショットベースイメージから新しいオーバーレイイメージを作成します。

qemu-img create \
-b $VMS_DIR/$DOMAIN/snapshots/$SNAPSHOT_NAME/disk.qcow2 \
-f qcow2 \
$VMS_DIR/$DOMAIN/disk.qcow2

これでゲストを起動できます。

sudo virsh start $DOMAIN

残念ながら、私はこの答えから抜け出した最大の点であるmemspecファイルを使用する方法を見つけることができませんでした。

引用する

すべてを理解しようとする過程で素晴らしい投稿 fedorapeople.orgこれは私が最も有用だと思う外部スナップショットをマージする方法を説明します。

関連情報