2016年11月18日金曜日

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

前回は、軽くスナップショットを作ってみるところを試してみた。

今回は、スナップショットの情報、特に親との差分情報がドコに格納されているのか?を探してみる。

まずはざっと、スナップショットを作ってみよう。
(あえて、piscesが稼動している状態で作ってみるぞ。)
(aquarius) $ virsh start pisces
(aquarius) $ virsh snapshot-create-as pisces --name pisces-1

スナップショットが作成されたら、pisces自体は停止しておこう。
(pisces) $ sudo shutdown -h now
(aquarius) $ virsh list --all

スナップショットが出来ているか確認
(aquarius) $ virsh snapshot-list pisces

スナップショットが作られているのが確認できただろうか?

これで、スナップショット作成時はpiscesは稼働中、現在はpisces停止状態、という形になった。
というわけで、少なくともpisces-1の状態から今までの間に、システム停止に伴うログ情報の差分や、メモリ使用状況が大きく変わっているはずだ。
これらの情報はいったいドコに記録されているのだろうか?

というわけで、そのスナップショットの情報を見てみる。
(aquarius) $ virsh snapshot-info pisces pisces-1

何行か情報が出てくるがその中に
場所:         内部
という行がある。
もしかして、これが「差分情報をドコに持っているか?」ということなのだろうか?

となればまずは、ディスク情報を見てみよう。
(aquarius) $ virsh vol-info pisces.qcow2 default

う~ん…。特に変わった情報は無いなぁ…。

virshで見ることが出来なくて、qemuコマンドなら見ることが出来る、とかか…?
(aquarius) $ sudo qemu-img info /var/lib/libvirt/images/pisces.qcow2
(一部略)
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         pisces-1               543M 2016-11-11 19:01:30   51:41:26.974
(一部略)

何か出た…ぞ!?

こちらのコマンドでも出せる。
(aquarius) $ sudo qemu-img snapshot -l /var/lib/libvirt/images/pisces.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         pisces-1               543M 2016-11-11 19:01:30   51:41:26.974

どうやら、スナップショットの情報は、同一仮想ディスク上に格納されているようだ。
スナップショット情報が、別の仮想ディスクとして記録されるVMware等とは異なる挙動だ。
そうすると、72GBしか割り当てていないはずの仮想ディスク、スナップショットで使い切ったらどうなるんだろう…?
調査はしていないけど、どうやらスナップショット数分、仮想ディスクの大きさは増えていくみたいだな。

さて、じゃぁスナップショット作成時のメモリの情報はドコに?
先ほどの出力結果を見てみると、VM SIZEという欄に「543M」という記載がある。
仮想マシンには、メモリを512MBしか割り当てていない。もしかしたら、スナップショットの瞬間のメモリ情報も、仮想ディスク内に格納されているのか?

これを確認するには、一旦メモリ割り当てサイズを変更して、スナップショットを取り直してみれば判るだろう。

というわけで、スナップショットの削除。
(aquarius) $ virsh snapshot-delete pisces pisces-1
(aquarius) $ virsh snapshot-list pisces

piscesが停止していることを確認して、メモリ割り当て量を変更。
(aquarius) $ virsh list --all
(aquarius) $ virsh edit pisces
以下の2行を書き換えよう。(割り当てサイズを512MBから128MBへ減らす)
  <memory unit='KiB'>524288</memory>
  <currentMemory unit='KiB'>524288</currentMemory>

  <memory unit='KiB'>131072</memory>
  <currentMemory unit='KiB'>131072</currentMemory>

そしたら、piscesを起動し、スナップショットを取得
(aquarius) $ virsh start pisces
(aquairus) $ virsh snapshot-create-as pisces --name pisces-1

スナップショットの状態を確認
(aquarius) $ virsh snapshot-list pisces

では、仮想ディスクの状態を見てみる。
(aquarius) $ sudo qemu-img info /var/lib/libvirt/images/pisces.qcow2
(一部略)
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         pisces-1               145M 2016-11-18 11:07:00   00:02:07.609
(一部略)

(aquarius) $ sudo qemu-img snapshot -l /var/lib/libvirt/images/pisces.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         pisces-1               145M 2016-11-18 11:07:00   00:02:07.609

おおおおっ!?VM SIZEが145Mになっている!やはりメモリ空間もこの仮想ディスクに格納されているのか!

VMwareの製品などは、仮想マシンの稼働中のスナップショットは、メモリ内容も別ファイルに格納されるようになっているから、実装が違うということか!
これでは、仮想マシンのスナップショットからのバックアップっていうのは無理かもしれないな。

ちなみに、仮想マシンが停止している状態で取得したスナップショットはどうなのだろうか?
同じ手順で確認してみよう。

まずはスナップショットの削除だ。
(aquarius) $ virsh snapshot-delete pisces pisces-1
(aquarius) $ virsh snapshot-list pisces

スナップショットが削除されたことが確認できたら、piscesを停止しよう。
(pisces) $ sudo shutdown -h now

piscesが停止していることを確認し、停止状態のままスナップショットの取得だ。
(aquarius) $ virsh list --all
(aquairus) $ virsh snapshot-create-as pisces --name pisces-1

スナップショットが取れたことを確認して、仮想ディスクの状態を確認してみる。
(aquarius) $ virsh snapshot-list pisces
(aquarius) $ sudo qemu-img snapshot -l /var/lib/libvirt/images/pisces.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         pisces-1                  0 2016-11-18 11:26:55   00:00:00.000

予想通り、VM SIZEは0だ。
なるほど、仮想マシンスナップショットのメモリ空間は、デフォルトでは仮想ディスクに格納されるっていうことか。

というわけで次回は、メモリ保存とスナップショットディスクを、外部保管に出来ないか?という観点で調査してみる。

0 件のコメント:

コメントを投稿