2016年11月11日金曜日

スナップショットを使おう その1

仮想マシン環境を使うメリットの一つに、スナップショット機能がある。
仮想マシンのある断面を保持し、いつでもその断面に戻せる機能だ。
フルバックアップしておいて、戻したいときにそのバックアップからリストアする、というのに似たイメージを持っているが、実際には異なる。

技術的には、スナップショットは「その瞬間と、現在との差分」のみ保持している状態だ。
つまり、現在の環境がまるっと消し飛ぶと、スナップショットから戻すことも出来なくなる。

また、差分管理のみのため、取得にかかる時間は非常に短くて済む。フルバックアップとは雲泥の差だ。

スナップショットとバックアップを組み合わせて、システム停止時間を出来る限り短くしたり、バックアップにかかるシステム負荷を小さくする、なんていうことを行っている人もいる、と思う。

また、仮想マシンのスナップショットを上手く使えば、
  • パッチ適用の検証
  • アプリケーション導入の手順の確認
  • システム設定変更の影響調査
等にも利用できる。

いずれも、作業前にスナップショットを取り、作業を行った後に、スナップショットに戻す、という流れで可能だ。
何度も繰り返し検証を行いたい場合にとても便利だ。

で、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 件のコメント:

コメントを投稿