仮想マシンのある断面を保持し、いつでもその断面に戻せる機能だ。
フルバックアップしておいて、戻したいときにそのバックアップからリストアする、というのに似たイメージを持っているが、実際には異なる。
技術的には、スナップショットは「その瞬間と、現在との差分」のみ保持している状態だ。
つまり、現在の環境がまるっと消し飛ぶと、スナップショットから戻すことも出来なくなる。
また、差分管理のみのため、取得にかかる時間は非常に短くて済む。フルバックアップとは雲泥の差だ。
スナップショットとバックアップを組み合わせて、システム停止時間を出来る限り短くしたり、バックアップにかかるシステム負荷を小さくする、なんていうことを行っている人もいる、と思う。
また、仮想マシンのスナップショットを上手く使えば、
- パッチ適用の検証
- アプリケーション導入の手順の確認
- システム設定変更の影響調査
いずれも、作業前にスナップショットを取り、作業を行った後に、スナップショットに戻す、という流れで可能だ。
何度も繰り返し検証を行いたい場合にとても便利だ。
で、KVMではスナップショットは使えるのか?という点だけど、当然実装されている。
GUIのvirt-managerでも使えるけど、少し使い勝手が悪そうだ。
今回は、コマンドライン(virsh)で試してみよう。
とは言っても、スナップショット関連のオプションは幾つかある。
(aquarius) $ 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 ドメインのスナップショットへの復帰
しかもなぜか、「作成」が2つもある。
それぞれ、helpを引いてみると、似たようなオプションが指定できるようだ。
(aquarius) $ virsh help snapshot-create
(aquarius) $ virsh help snapshot-create-as
(オプションの一覧は省略する。各自確認してみてほしい。)
細かいところは抜きにして、とりあえず作ってみよう。
操作はコマンドラインで実施するが、仮想マシンのコンソール画面が見えていた方が変化がわかるかもしれないので、virt-managerを使って、仮想マシンpiscesのコンソール画面を見ておこう。
(aqaurius) $ virt-manager
(仮想マシンpiscesを選んで「開く」だ)
あと、主にaqauriusから操作を行うが、動作状況の確認のために、時々piscesで操作をする。
間違えないようにしよう。
で、piscesにスナップショットが無いことを確認。
(aquarius) $ virsh snapshot-list pisces
続いて、稼働中でも取得できることを確認するために、仮想マシンを起動してしまおう。
(aquarius) $ virsh list --all
(aquarius) $ virsh start pisces
(virt-managerから表示したコンソールを見て、piscesが起動したのを確認しておくこと。)
piscesが表示されているコンソールからログインし、空ファイルを一つ作っておこう。
(pisces) $ cd
(pisces) $ touch snap-before
(pisces) $ ls -l snap-before
そうしたら、スナップショットの作成だ。現時点でのスナップショットを取る。
(aquarius) $ virsh snapshot-create-as pisces --name pisces-1
ドメインのスナップショット pisces-1 が作成されました
無事に作成されたか確認だ。
(aquarius) $ virsh snapshot-list pisces
名前 作成時間 状態
------------------------------------------------------------
pisces-1 2016-11-10 09:45:59 +0900 running
どうやら無事に作成されたようだ。
ちなみに、piscesの画面は数秒間反応が無かったと思う。スナップショットを作成する数秒間だけ、動きが止まるようだ。
(aquarius) $ virsh list --all
piscesは稼動しているステータスのはずだ。
さて、今のpiscesのコンソールを使って、少しいじってみよう。
先ほど作ったファイルを削除してみたり…
(pisces) $ cd
(pisces) $ rm snap-before
(pisces) $ ls -l snap-before
別にファイルを作ってみたり…
(pisces) $ touch snap-after
(pisces) $ ls -l snap-after
piscesを落としてみたり…
(pisces) $ sudo shutdown -h now
piscesが停止したところでステータスを確認してみよう。
(aquarius) $ virsh snapshot-list pisces
名前 作成時間 状態
------------------------------------------------------------
pisces-1 2016-11-10 09:45:59 +0900 running
こちらはステータス変わらず。
(aqaurius) $ virsh list --all
こちらは、piscesはシャットダウン状態だ。
もう一度起動してみよう。
(aquarius) $ virsh start pisces
(aquarius) $ virsh list --all
普通に起動してきたはずなので、piscesのコンソールから状態を確認。
(pisces) $ ls -l snap-*
snap-afterだけ存在する状態だ。
この状態で、スナップショット取得時点(pisces-1作成時点)に戻してみよう。
(aquarius) $ virsh snapshot-revert pisces --snapshotname pisces-1
piscesのコンソールがリフレッシュされて、snap-beforeファイルを作成した直後に戻ったはずだ。
念のために確認してみよう。
(pisces) $ ls -l snap-*
snap-beforeが出てきて、snap-afterが無い状態だ。
つまり、pisces-1を作成したタイミング(virsh snapshot-create-as pisces --name pisces-1 を実行したタイミング)に戻ってきたわけだ。
もう一回、ダミーファイルの削除・作成をしてみよう。
(pisces) $ rm snap-before
(pisces) $ touch snap-after2
(pisces) $ ls -l snap-*
snap-after2だけ存在しているはずだ。
この状態で、スナップショットpisces-1を削除したらどうなるだろうか?
やってみよう。
(aquarius) $ virsh snapshot-delete pisces --snapshotname pisces-1
(aquarius) $ virsh snapshot-list pisces
(aquarius) $ virsh list --all
piscesのコンソールには何も変化が無く、スナップショットが消えただけだ。
pisces自身も稼働中のステータスだ。
pisces上のダミーファイルはどうなっているだろうか?
(pisces) $ ls -l snap-*
特に何も変化無く、snap-after2だけ存在している状態だ。
ざっと図にすると、以下のような流れで試してみた、ということだ。
これらをやってみると、他にも色んなことが考えられるのではないだろうか?
例えば、
- スナップショットって差分を管理しているってことだけど、差分情報はドコにあるの?
- スナップショットのスナップショットは作れるの?
- スナップショットの分岐は可能なの?
- 子スナップショットがいるスナップショットを削除したら?
次回以降、この辺りを試していく。
0 件のコメント:
コメントを投稿