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 されたゲストは記録されていて、次回ホストの起動時に自動的に動いていたゲストが起動するようになってるので安心。