- 1 virsh snapshotコマンドとは?
- 2 検証環境
- 3 オプション一覧
- 4 スナップショットを作成する方法(snapshot-create-as)
- 5 スナップショットを削除する方法(snapshot-delete)
- 6 スナップショットを切り替える方法(snapshot-revert)
- 7 スナップショットの実験
- Z 参考情報
1 virsh snapshotコマンドとは?
スナップショットは仮想マシンのある時点の状態を保存する機能です。保存した状態は、あとで仮想マシンに復元することができます。たとえば、時刻T1でスナップショット(snapshot1)を取得したとします。そして、時刻T2の時にsnapshot1を仮想マシンに戻すと、仮想マシンを時刻T1の状態に戻すことができます。
T1 T2 -------|---------------------------------------|-----------> 時刻 snapshot1
なお、virshコマンドの使い方については、以下を参照してください。
virshコマンドの使い方 - hana_shinのLinux技術ブログ
2 検証環境
KVMホストのAlmaLinux版数は以下のとおりです。
[root@kvm ~]# cat /etc/redhat-release AlmaLinux release 8.6 (Sky Tiger)
カーネル版数は以下のとおりです。
[root@kvm ~]# uname -r 4.18.0-372.9.1.el8.x86_64
virshコマンドの版数は以下のとおりです。
[root@kvm ~]# virsh -v 8.0.0
3 オプション一覧
オプションは以下のとおりです。
[root@kvm ~]# virsh help snapshot Snapshot (ヘルプのキーワード 'snapshot'): snapshot-create XML によるスナップショットの作成 snapshot-create-as 一組の引数からのスナップショットの作成 snapshot-current カレントスナップショットの取得・設定 snapshot-delete ドメインのスナップショットの削除 snapshot-dumpxml ドメインのスナップショットの XML 形式ダンプ snapshot-edit スナップショットの XML の編集 snapshot-info スナップショット情報 snapshot-list ドメインのスナップショットの一覧表示 snapshot-parent スナップショットの親の名前の取得 snapshot-revert ドメインのスナップショットへの復帰
4 スナップショットを作成する方法(snapshot-create-as)
スナップショットを取得する仮想マシンを確認します。ここでは、vm1のスナップショットを作成します。
[root@kvm ~]# virsh list Id 名前 状態 --------------------- 1 vm1 実行中
vm1のスナップショットをvm1-snap1という名前で作成します。
[root@kvm ~]# virsh snapshot-create-as --domain vm1 --name vm1-snap1 --description "snap1" ドメインのスナップショット vm1-snap1 が作成されました
スナップショットを確認すると、vm1-snap1という名前のスナップショットが作成されたことがわかります。
[root@kvm ~]# virsh snapshot-list --domain vm1 名前 作成時間 状態 -------------------------------------------------- vm1-snap1 2023-01-26 07:29:51 -0500 running
5 スナップショットを削除する方法(snapshot-delete)
スナップショットを確認します。vm1-snap1という名前のスナップショットが存在することがわかります。
[root@kvm ~]# virsh snapshot-list --domain vm1 名前 作成時間 状態 -------------------------------------------------- vm1-snap1 2023-01-26 07:29:51 -0500 running
vm1-snap1という名前のスナップショットを削除します。
[root@kvm ~]# virsh snapshot-delete --domain vm1 --snapshotname vm1-snap1 ドメインのスナップショット vm1-snap1 が削除されました
スナップショットを確認します。vm1-snap1という名前のスナップショットが削除されたことがわかります。
[root@kvm ~]# virsh snapshot-list --domain vm1 名前 作成時間 状態 ------------------------- [root@kvm ~]#
6 スナップショットを切り替える方法(snapshot-revert)
スナップショットを切り替えると、仮想マシンの状態を切り替えることができます。
6.1 事前準備
スナップショットを取得する仮想マシンを確認します。ここでは、vm1のスナップショットを2つ作成してみます。
[root@kvm ~]# virsh list Id 名前 状態 --------------------- 1 vm1 実行中
vm1-snap1という名前のスナップショットを作成します。
[root@kvm ~]# virsh snapshot-create-as --domain vm1 --name vm1-snap1 ドメインのスナップショット vm1-snap1 が作成されました
vm1-snap2という名前のスナップショットを作成します。
[root@kvm ~]# virsh snapshot-create-as --domain vm1 --name vm1-snap2 ドメインのスナップショット vm1-snap2 が作成されました
スナップショットを確認します。スナップショットが2つ作成されたことがわかります。
[root@kvm ~]# virsh snapshot-list --domain vm1 名前 作成時間 状態 -------------------------------------------------- vm1-snap1 2023-01-27 05:58:38 -0500 running vm1-snap2 2023-01-27 05:58:47 -0500 running
6.2 スナップショットの切り替え
動作中の仮想マシンが使用しているスナップショットをカレントスナップショットと言います。カレントスナップショットを確認すると、vm1がvm1-snap2を使っていることがわかります。
[root@kvm ~]# virsh snapshot-info --domain vm1 --current 名前: vm1-snap2 ドメイン: vm1 カレント: はい (yes) 状態: running 場所: 内部 親: vm1-snap1 子: 0 子孫: 0 メタデータ: はい (yes)
カレントスナップショットをvm1-snap1に切り替えます。
[root@kvm ~]# virsh snapshot-revert --domain vm1 --snapshotname vm1-snap1
カレントスナップショットを確認します。vm1が使用しているスナップショットがvm1-snap1に切り替わったことがわかります。
[root@kvm ~]# virsh snapshot-info --domain vm1 --current 名前: vm1-snap1 ドメイン: vm1 カレント: はい (yes) 状態: running 場所: 内部 親: - 子: 1 子孫: 1 メタデータ: はい (yes)
7 スナップショットの実験
スナップショットを利用して、仮想マシンの状態を過去の状態に戻してみます。時刻T2でbcパッケージをインストールしたあと、時刻T3でsnapshot2を作成します。そして、時刻T4でsnapshot1を使って、仮想マシンの状態を時刻T1の状態に戻してみます。
T1 T2 T3 T4 -------|-----------------------|-----------------------|---------> 時刻 snapshot1 snapshot2
スナップショットを取得する仮想マシンを確認します。
[root@kvm ~]# virsh list Id 名前 状態 --------------------- 3 vm1 実行中
vm1のスナップショットを作成します。
[root@kvm ~]# virsh snapshot-create-as --domain vm1 --name snapshot1 ドメインのスナップショット snapshot1 が作成されました
作成したスナップショットを確認します。
[root@kvm ~]# virsh snapshot-list --domain vm1 名前 作成時間 状態 -------------------------------------------------- snapshot1 2023-01-27 07:46:09 -0500 running
vm1のコンソールに接続します。なお、コンソールを使うためには、あらかじめvm1のカーネルコマンドラインパラメータに"console=ttyS0,115200"を追加して、grub2-mkconfigコマンドを使って、て、/boot/grub2/grub.cfgに設定変更を反映しておく必要があります。
[root@kvm ~]# virsh console vm1 Connected to domain 'vm1' Escape character is ^] (Ctrl + ]) CentOS Linux 7 (Core) Kernel 3.10.0-1160.el7.x86_64 on an x86_64 server login: root パスワード: 最終ログイン: Fri Jan 27 21:36:11 ttyS0 上
bcコマンドがvm1にインストールされているかどうかを確認します。
[root@server ~]# bc -bash: /bin/bc: そのようなファイルやディレクトリはありません
bcコマンドをインストールします。
[root@server ~]# yum -y install bc
bcコマンドがvm1にインストールされているかどうかを確認します。
[root@server ~]# bc --version bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
Ctrl+]を押下してkvmホストに戻ります。そして、snapshot2を作成します。snapshot2にはbcパッケージがインストールされています。
[root@kvm ~]# virsh snapshot-create-as --domain vm1 --name snapshot2 ドメインのスナップショット snapshot2 が作成されました
スナップショットの一覧を確認します。
[root@kvm ~]# virsh snapshot-list --domain vm1 名前 作成時間 状態 -------------------------------------------------- snapshot1 2023-01-27 07:46:09 -0500 running snapshot2 2023-01-27 07:48:52 -0500 running
スナップショットをsnapshot1に切り替えて、仮想マシンの状態を確認してみます。bcパッケージがインストールされていないことがわかります(期待値)。
[root@kvm ~]# virsh snapshot-revert --domain vm1 --snapshotname snapshot1
カレントのスナップショットを確認すると、snapshot1であることがわかります。
[root@kvm ~]# virsh snapshot-info --domain vm1 --current 名前: snapshot1 ドメイン: vm1 カレント: はい (yes) 状態: running 場所: 内部 親: - 子: 1 子孫: 1 メタデータ: はい (yes)
vm1のコンソールに接続します。
[root@kvm ~]# virsh console vm1 Connected to domain 'vm1' Escape character is ^] (Ctrl + ])
bcコマンドの版数を確認します。bcコマンドがインストールされていないことがわかります。
[root@server ~]# bc --version -bash: /bin/bc: そのようなファイルやディレクトリはありません
Ctrl+]を押下してkvmホストに戻ります。そして、スナップショットをsnapshot2に切り替えて、仮想マシンの状態を確認してみます。bcパッケージがインストールされていることがわかります
[root@kvm ~]# virsh snapshot-revert --domain vm1 --snapshotname snapshot2
vm1のコンソールに接続します。
[root@kvm ~]# virsh console vm1 Connected to domain 'vm1' Escape character is ^] (Ctrl + ])
仮想マシンの状態を確認してみます。bcパッケージがインストールされていることがわかります(期待値)
[root@server ~]# bc --version bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ