停電を繰り返すうちにどうもUPSによるサーバーのシャットダウンがちゃんとできてないことがわかってきました。そういえばUPSは前のサーバー機から継続だけど、今のXen環境にしてからあんまり実地テストとかしてなかったなと。
我が家のUPSは三菱のFREQSHIP Fで、同社がフリーで配布しているFREQSHIP-mini for FreeUNIXをインストールして運用しています。起動スクリプト/etc/init.d/freqshipを実行するとなにやらCOMポートがどうのとエラーを返します。設定ファイルは/etc/freqship/UPSFILEで、一行目に、
Port=/dev/ttyS0
という記述があります。UPSとの通信に使用しているCOMEポートとして/dev/ttyS0を指定してあるのですが、これがなんらかの理由で使用できないようです。次に起動時のコンソールメッセージを
dmesg | grep tty
としてttyという文字を含むものを検索。すると、
Xen virtual console successfully installed as ttyS
とXen絡みのメッセージを発見。どうもXenがシリアルポートを占有してしまってるのが問題のようです。そこでググった結果の解決策は、/boot/grub/grub.confを編集し、
title CentOS (2.6.18-194.32.1.el5xen)
root (hd0,0)
kernel /xen.gz-2.6.18-194.32.1.el5 dom0_mem=768M
module /vmlinuz-2.6.18-194.32.1.el5xen ro root=/dev/lvm1/Domain0 xencons=off
module /initrd-2.6.18-194.32.1.el5xen.img
のように赤字部分を追加し、Xenにシリアルコンソールを使用しないよう指示しました。grub.confには同じようなブロックが複数セット書かれていると思います。大抵は一番上がデフォルトで使用される記述だと思いますが、まぁとりあえず全てに書いておきました。
これで再起動したところ、/etc/init.d/freqshipでエラーが出なくなりました。
停電の多い地区の皆さん、いちどちゃんとシャットダウンできてるかお試しあれ。
■オマケ:XenのDomain-U仮想マシンを自動的に起動する
Domain-0が再起動した後、自動でDomain-U(仮想OS)も起動させたい場合、/etc/xen/autoに設定ファイルを置いておけばいいようです。大抵は/etc/xen/においてあるでしょうから、シンボリックリンクを張っておくのが簡単でしょう。たとえばHogeという定義ファイルなら、
ln-s /etc/xen/Hoge /etc/xen/auto/Hoge
とか。ちなみにXenはシャットダウン時にDomain-Uを自動でサスペンド状態にしてくれて、次回Domain-0起動に自動的に復帰させてくれるようです。上記の設定はちゃんとそれをチェックしてレジュームに失敗した場合のみ実行してくれるみたいなので、Domain-Uが二重に起動してしまうようなことはないようです。賢い。