2010年3月3日

libvirtd を終了時にGuestOSを保存する方法

libvirt+QEMU/KVM を使った仮想化の運用を続けていると、どうしても気になる事がある。

libvirtd の設定には、自動起動するGuestVMは登録できるのだが、 終了時には有無を言わさず GuestVM を強制終了してしまう事である。

自前で libvirt (0.7.2)を入れているので今のバージョンでは何らかのサポートが入ってかもしれない。 ただ「libvirt: Releases」を見る限り入って無さそうである。

それにQEMU/KVMドライバだけの挙動かもしれない。他とドライバ(Xen等々)だと状況は違うかもしれない。

まぁ。。。そのうち何らかの対応が入るんだろうなぁ。。。

そうは言っても、ホストマシンを終了するときイチイチ確認するのは難儀である(とくにACPIサポートが悪く電源断しないGuestOSタイプとかねぇ)。

さて、QEMUにはVMの状態を保存復帰(save/restore)がサポートされている。コイツとストレージ共有を組み合わせると、ライブマイグレーションが一丁上がりになるので、つい何年か前に小躍りしてる人がたくさんいた気がする。

まぁ普通にサスペンド/レジュームの仕組みなので、コイツをなんとか上手く使うスクリプトを組んでみた。

指定する項目は3つで、それぞれスクリプト冒頭に書かれている。

libvirt-start-stop-vm.sh

...
SAVEVMDIR="/var/lib/libvirt/save"            # 保存するVMの置き場所
LISTVM_SHUTDOWN="linux_sid linux_fedora"     # 終了時 shutdown するもの
LISTVM_SAVE="freebsd_cur netbsd_cur solaris" # 終了時 save するもの
...

やってる事は単純で virsh コマンドを叩いてるだけである。 ただ、LISTVM_なんたらで指定し無かったり、15分以内に正常に電源断しない奴は、 最後に念のためsaveしてある。

コイツを、/etc/init.d/libvirt-binのスクリプトの必要な部分に入れ込むだけ。

うん〜、これでマシンを立ち上げると前回マシンを落とした時の状態のままのSolaris10/FreeBSDが立ち上がるようになった。。。しかし、時刻が合わん。なんか、GuestOSが共通に取れるイベントの仕組みがあるのかなぁ。。。SNMPとかで叩くんかなぁ。。。SSHとかで叩くんかいなぁ。。。順当に cron でntp引っ張ってくるが原始的でいいのかぁ。。。でも、時刻合わせの精度は低いし、常時CPUをちょっとだけ使うのはなぁ。。。ぶつぶつ

あんまり、すっきりしないが個人で使う分には用は足りそうである。

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...