KVMのスナップショットによるゲストOSの状態管理


KVM スナップショット概要

KVM スナップショットはKVM のとある時点の状態を保持する機能です。
スナップショットは普通のバックアップのように全データを保持しておくのとは異なり、ゲストOS 上への変更が発生した時に差分のみを保持することで、スナップショットを作成した時点の状態を保持します。
また、ゲストOS の全データをコピーするわけではないのでスナップショットの作成処理は高速です。
スナップショットは、ゲストOS 本体もしくはスナップショットファイルのいずれかが破損してしまうと、元の状態に戻すことはできなくなるので、バックアップの代わりとして利用する場合は注意してください。
スナップショットの作成手順としては、external 親スナップショットを作成し、それから派生する子スナップショットを作成していくイメージです。

スナップショット(external)の取得

virsh snapshot-create-as コマンドを使用することで、ゲストOS のexternal スナップショットを取得することができます。
スナップショットの取得は、ゲストOS が起動中でも可能です。

書式
# virsh snapshot-create-as <KVMドメイン名> <スナップショット名> "<コメント>" --disk-only --atomic
Domain snapshot sn01_kvm_centos7 created
コマンド例
# virsh snapshot-create-as kvm_centos7 sn01_kvm_centos7 "test snap shot" --disk-only --atomic
Domain snapshot sn01_kvm_centos7 created

スナップショット(external)の復元について

external スナップショットの復元は2015年06月現在、対応していない様子。

$ virsh snapshot-revert kvm_centos7 sn01_kvm_centos7
error: unsupported configuration: revert to external snapshot not supported yet

スナップショット復元については、internal スナップショットを取得してから行ってください。

スナップショットの確認

コマンド書式
# virsh snapshot-list <KVMドメイン名>
コマンド例
# virsh snapshot-list kvm_centos7
 Name                 Creation Time             State
------------------------------------------------------------
 sn01_kvm_centos7     2015-01-18 18:04:44 +0900 shutoff

スナップショット(internal)の取得

外部スナップショットを取得した状態で、次のようにコマンドを実行すると、スナップショットを取得することができます。
なお、スナップショットの名前は外部スナップショットや他の内部スナップショットと被らないようにしてください。

書式
# virsh snapshot-create-as <KVMドメイン名> <スナップショット名> "<コメント>"
コマンド例
# virsh snapshot-create-as kvm_centos7 sn02_kvm_centos7 "comment"

スナップショットをtree 表示する

スナップショットの派生関係を確認したい場合、--tree オプションを付けることで確認することができます。

# virsh snapshot-list kvm_centos7 --tree
sn01_kvm_centos7
  |
  +- sn02_kvm_centos7
      |
      +- mariadb_kvm_centos7
      +- postgresql_kvm_centos7

現在の状態が、どのスナップショットからの派生かを調べる

virsh snapshot-list コマンドに--tree, --current オプションを使用することで確認することができます。

# virsh snapshot-list kvm_centos7 --tree --current
mariadb_kvm_centos7

特定のスナップショット状態に戻す

特定のスナップショットのポイントに戻すにはvirsh snapshot-revert コマンドを使用します。
指定するスナップショットは内部スナップショットを指定するようにしてください。

書式
# virsh snapshot-revert <KVMドメイン名> <スナップショット名>
コマンド例
# virsh snapshot-revert kvm_centos7 sn02_kvm_centos7

スナップショット(internal)の削除

virsh snapshot-delete コマンドを実行することで、スナップショットを削除することができます。

書式
# virsh snapshot-delete <KVMドメイン名> <スナップショット名>
コマンド例
# virsh snapshot-delete kvm_centos7 sn03_kvm_centos7

スナップショット(external)の削除

external snapshot を削除する場合は--metadata オプションをつけることで削除できます。

書式
# virsh snapshot-delete <KVMドメイン名> <スナップショット名> --metadata
コマンド例
# virsh snapshot-delete kvm_centos7 sn01_kvm_centos7 --metadata