KVM ゲストがシャットダウンできない

久々に KVM ゲストを新規構築したのですが、KVM ホストからシャットダウンする際に、シャットダウンできない事態に遭遇した ( 単なる設定忘れなのですが ) ので、備忘録兼ねて対応方法を書いておきます。

はじめに

梅雨入りで気分も晴れない今日この頃、みなさまいかがお過ごしですか。

KVM ゲストの構築作業を久々に行ったのですが、シャットダウンが効かない状態に遭遇してしまいました。

単なる設定漏れだったのですが、シャットダウンができない場合の対応策としてはよろしくない ( と私的には思われる ) 情報が書かれているサイト等もあるようなので、備忘録として対応方法を書いておきます。

環境

環境は以下になります。

OS CentOS 6.6
仮想マシンマネージャ
( virt-manager )
virt-manager-0.9.0-28.el6
 
libvirt libvirt-0.10.2-46.el6_5

KVM ゲストのシャットダウン

仮想マシンマネージャからの操作

仮想マシンマネージャの一覧に表示される仮想マシン ( ゲストOS ) の一覧から操作したいゲストを選択、右クリックし表示されるコンテキストメニューから操作が行える。

KVM ゲスト シャットダウン

virsh コマンドでの操作

コマンドラインから操作を行う場合には以下で行えます。

$ sudo virsh shutdown <仮想マシン名>

動作しない

上記シャットダウン操作によってシャットダウンされるはずですが、シャットダウンされない場合があります。

「この場合、destroy でシャットダウンすればOK」的な事が書いてある場合があったりするようですが、電源スイッチをプチっとオフにするようなものなので、望ましくない事は言うまでもありません。

「シャットダウンされないのは設定に問題があるかも」 なので以下を見直しましょう。

対応方法

ゲストOS をシャットダウンさせる場合、ゲストOSで ACPI が動作している必要があります。

KVMゲスト設定の確認

先ず、KVM ゲスト設定で ACPI が有効になっているかを確認します。

virsh コマンドにて apci が有効になっているか確認します。

$ sudo virsh dumpxml

以下の設定が存在すれば KVM ゲストの設定はOKです。

  <features>
    <acpi/>
  </features>

設定が存在しない場合、 設定を追記してください。 ( fueatures 要素が無い場合これも含めて )

ゲストOSの確認

標準で ACPI が動作している OS の場合には、上記設定で OK ですが、ゲスト OS が Linux の場合には、ゲスト OS 上で acpid が動作している事も必要になります。

※以下 ゲストOS が CentOS(6.6) の場合の確認手順になります。

  1. acpid がインストールされているか確認します。
    $ sudo rpm -qa | grep acpid
    acpid-1.0.10-2.1.el6.x86_64
    

    ↑ この場合にはインストールされています。

  2. acpid がインストールされていない場合、yum でインストールします。
    $ sudo yum install acpid
    
  3. インストール後は自動起動設定します
    $ sudo chkconfig acpid on
    
  4. 設定が行われたか確認します。
    $ chkconfig --list | grep acpid
    acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off
    

    上記で再起動後に acpid は自動起動されます。

  5. 再起動させずに acpid を起動する場合
    $ sudo /etc/rc.d/init.d/acpid start
    

動作確認

acpid が実行されている状態で、上述のシャットダウン操作を行い、きちんとシャットダウンが行われれば OK です。

ゲストOS に (ssh) ログインしている状態で、ホストからシャットダウン実行して確認するのがよいでしょう。

まとめ

destroy ( 強制的に電源OFF ) 操作を行う事は可能な限り避けよう。