VirtualBoxでホストのシャットダウンにゲストのバーチャルマシンも連動させる

スポンサーリンク
スポンサーリンク

Oracle VM VirtualBox の運用で、ホストのWindowsのシャットダウンに連動して、ゲストのバーチャルマシンでもシャットダウン等の動作をさせたいことがあります。
これが出来ないと、VirtualBoxが異常終了して状態が「中断」になったり、ホストのWindowsのシャットダウンがブロックされたりしてしまいます。

ところが、探した限りでは日本語の情報がありません。
英語のページですが、下記によると、2通りの方法があるとのことです。

virtualbox.org • View topic – How to auto-shutdown guest when doing host shutdown?

以降では、バーチャルマシンの起動状態によって、次の2通りについて説明します。
ホストのWindowsのシャットダウンだけでは無く、Windowsの「再起動」「ログオフ」でも同様です。

・ウィンドウ非表示で動作するHeadlessモードの場合
・通常の場合

また、Windows ではデフォルトでは、Windows Update の適用と再起動が自動的に行われますが、この時の再起動では、上記2つの方法でも対処できません。
この対処を説明していますので、本記事の最後の方の以下の項目を参照して下さい。

・Windows Update への対処

ウィンドウ非表示で動作するHeadlessモードの場合

VirtualBox 4.x での方法です。VirtualBox 5.x では実施出来ませんので注意して下さい。

次のようにしてバーチャルマシンを起動すると、ウィンドウ非表示で動作するHeadlessモードになります。

VBoxManage startvm "バーチャルマシン名" --type headless

このモードでは、VBoxHeadlessTray を使用すれば、Windowsのシャットダウンに連動して、バーチャルマシンで「仮想マシンの状態の保存」が実行されます。

但し、実施できるのは「仮想マシンの状態の保存」だけで、「シャットダウン シグナル送信」「仮想マシンの電源オフ」は出来ません。

なお、本方法 が VirtualBox 5.x では実施出来ないのは、VBoxHeadlessTray が 5.x に対応していない為です。

通常の場合

VirtualBox 4.x 、5.x 共に実施出来る方法です。
この方法は、文書化されていないもので、VirtualBox のソースコードから存在が確認された方法です。

バーチャルマシンのウィンドウを閉じる際に、次の選択肢が表示されますが、選択肢のデフォルトを指定して自動的に実行する方法です。

・仮想マシンの状態を保存
・シャットダウン シグナル送信
・仮想マシンの電源オフ
・現在のスナップショット ‘XXXX’ に復元 (スナップショットがある場合)

通常ならば、ホストのシャットダウン時に、バーチャルマシンのウィンドウが閉じられる際に選択肢のダイアログが出て、シャットダウンがブロックされます。
しかし、本設定では、ダイアログが表示されずにバーチャルマシンの終了動作が行われるので、問題無くシャットダウンが継続されます。

下記書式で実行します。
設定後に起動したバーチャルマシンから、設定が有効になります。

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "バーチャルマシン名" GUI/DefaultCloseAction デフォルトの動作

「デフォルトの動作」は、SaveState(仮想マシンの状態を保存)、Shutdown(シャットダウン シグナル送信)、PowerOff(仮想マシンの電源オフ)、PowerOffRestoringSnapshot(現在のスナップショットに復元(スナップショットがある場合))のいずれかを指定します。

例えば下記のようにすると、バーチャルマシン名「test」を閉じる際には、ダイアログが出ずにシャットダウンが実行されます。

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "test" GUI/DefaultCloseAction shutdown

GUI/DefaultCloseAction の後に何も指定せずに実行すると、元の選択肢を示すダイアログが出るように戻ります。

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "バーチャルマシン名" GUI/DefaultCloseAction

なお、VirtualBox 5.x では、VirtualBoxマネージャは通常は終了させておいて下さい。
こちらで試したところ、ホストのWindowsのシャットダウン時にVirtualBoxマネージャが立ち上がっていると、下記表示のエラーダイアログが出て、シャットダウンがブロックされてしまいます。
(XXXXの箇所は変わります)

「VirtualBox全体のエクストラデータキー: XXXX 値:{XXXX} の設定に失敗しました。」

VirtualBox 4.x では、この問題は起こりませんでした。

Windows Update への対処

Windows ではデフォルトでは、Windows Update の適用と再起動が自動的に行われます。
この時の再起動では、先述の方法でも対処できず、VirtualBoxが異常終了し、次回 VirtualBox起動時にはバーチャルマシンの状態が「中断」になってしまいます。

これの対処ですが、Windows Update 適用後の再起動を、自分で実行するしかありません。
以下の2通りを説明します。
なお、先述の「ウィンドウ非表示で動作するHeadlessモードの場合」「通常の場合」のいずれかを既に適用しておいて下さい。

1つは、Windows Update適用後の再起動を禁止する方法です。
再起動を自前で実施する必要があります。再起動は shutdownコマンドなどで実行できます。

Tech TIPS:Windows Update適用後の自動再起動を抑制する – @IT

もう1つは、Windows Update 自体を自前で実行する方法です。
下記記事中の「Here’s the contents of “windowsupdateauto.vbs”」 の箇所に、Windows Updateを実行するスクリプトがありますので、これを実行します。
これも再起動を自前で実施する必要があります。再起動は shutdownコマンドなどで実行できます。

virtualbox.org • View topic – FYI: Run Auto Windows Updates Without Killing Guests

以上、VirtualBoxでホストのWindowsのシャットダウンに連動して、ゲストのバーチャルマシンもシャットダウン等の動作をさせる方法でした。

コメント

タイトルとURLをコピーしました