CentOS の KVM + libvirtd 環境でホストOSのshutdownでゲストOSも自動shutdownさせるには
CentOS 6.2 のデフォルト設定だと、ホストが shutdown するときゲストは visrh save で VM のサスペンド状態になる。
これだと、ゲストを復帰させたときにゲストOSの状態によっては「ディスク書き込みのタイムアウト」とか言われて fcsk が走ったり、悪くするとデータロストってしまうので、ホストが graceful shutdown するならゲストも graceful shutdown する設定にしてみる。
ホスト起動・shutdown 時のゲストへの操作はホストの /etc/init.d/libvirt-guest が操っているので、その設定ファイルの /etc/sysconfig/libvirt-guests の設定を変更して、shutdown 時にゲストにも shutdown メッセージが飛ぶようにする。
# vi /etc/sysconfig/libvirt-guests START_DELAY=20 (VM起動時のディレイ) ON_SHUTDOWN=shutdown (ホスト shutdown 時にゲストも shutdown) SHUTDOWN_TIMEOUT=180 (ゲストが shutdown するのを待機する時間)
続いてゲストOSはホストからの shutdown メッセージを拾うため、 acpid をインストールする。
Windows な場合は、コントロールパネルの電源管理あたりから「電源ボタンが押されたとき」の動作で、終了するかハイバネーションするようにしておけばOK。
# yum install acpid (略) Downloading Packages: acpid-1.0.10-2.1.el6.x86_64.rpm | 36 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : acpid-1.0.10-2.1.el6.x86_64 1/1 Installed: acpid.x86_64 0:1.0.10-2.1.el6 Complete! # /etc/init.d/acpid start acpi デーモンを起動中: [ OK ] # chkconfig acpid on
これでホストを shutdown すると、走ってるゲストが順に shutdown されて、全ゲストが落ちてからホストが落ちるようになる。
要は shutdown させるにもハイバネーション/サスペンドさせるにしても、ゲストにイベントを通知させてゲスト側で準備させろってことで。
virsh save だと、ゲストのファイルシステムがおかしな事になったことがあるので、ここらのイベントが飛んでないんだと思われ。
自動的に shutdown されたゲストは記録されていて、次回ホストの起動時に自動的に動いていたゲストが起動するようになってるので安心。