Windowsログオン時にVirtualBoxのゲストOSを起動する

vbox-pict

今回の目的

今回ホストとなるWindowsServer上に、VirtualBox入れてその中で自宅内のサーバを監視するZabbixサーバやメールサーバを立てた。
しかし、Windowsアップデートや停電など不意に再起動してしまった場合にゲストOSも自動的に起動させたいと思い設定してみました。
自宅サーバの仕様メモがてらエントリーします。

環境

ホストOS:WindowsServer2008 Standard SP2(役割/機能は一切触らず)
仮想化ソフト:Oracle VirtualBox Ver.5.0.2
ゲストOS:Debian7、Debian8、CentOS7

図にするとこんな感じです。
vbox-structure

自動起動したい仮想マシン名を調べる

コマンドプロンプトを立ち上げて、起動したいゲストマシンの仮想マシン名を調べます。
なお、管理用のVBoxManage.exeは次のパスにあるものとします。
パス:”C:Program FilesOracleVirtualBoxVBoxManage.exe”
基本的に、VirtualBoxがインストールされているディレクトリと同じ場所にあるはずです。

下記のようにlist vms オプションを指定して実行すると、仮想マシンの名前とUIDが表示されます。

[shell title=”VBoxManage”] C:UsersAdministrator>cd C:Program FilesOracleVirtualBox
C:Program FilesOracleVirtualBox>VBoxManage.exe list vms
“justice-zabbix-debian7” {a66b0ba6-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
“world-mailsv-centos7” {6ad1d8dc-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
“moon-asterisk-debian8” {83beb905-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
C:Program FilesOracleVirtualBox>
[/shell]

実際にバッチファイルを書く

起動したいバーチャルマシンの仮想マシン名が分かったら、あとはバッチファイルを数行書くだけです。
仮想マシン名の確認と同じく、VBoxManage.exeで仮想マシンの電源投入が可能なので、コマンドを並べます。

ただ、複数台のゲストマシンを同時に上げると物理マシン・仮想マシンの負荷が上がってしまうので、時間を若干ずらしなが起動するように、【TIMEOUT /T 60】で1分ごとに起動するように設定しました。

また、管理自体は基本的にSSHで行っているのでヘッドレスモードで動かすオプションをつけました。

下記の内容をバッチ形式で保存します。

[shell title=”StartVM.bat”] TIMEOUT /T 60
cd “C:Program FilesOracleVirtualBox”

VBoxManage.exe startvm “justice-zabbix-debian7” –type headless
TIMEOUT /T 60

VBoxManage.exe startvm “world-mailsv-centos7″ –type headless
TIMEOUT /T 60

VBoxManage.exe” startvm “moon-asterisk-debian8” –type headless
[/shell]

スタートアップに登録

あとは、Windowsのスタートアップにでもこのバッチファイルを登録しておけばログオン時に自動で仮想マシンが動き始めます。
今回の環境では、電源投入時や再起動時に自動でログインするよう設定してあるので、事実上ホストのWindowsServerが立ち上がると時間差でゲストマシンも起動する形になります。

おまけ

ホストマシンを再起動させたり、電源落とす時にもゲストOSにSSHでログインするの面倒なのでゲストマシンの電源停止スクリプトも書きました。

[shell title=”StopVM.bat”]

cd “C:Program FilesOracleVirtualBox”

VBoxManage.exe controlvm “justice-zabbix-debian7” acpipowerbutton
TIMEOUT /T 60

VBoxManage.exe controlvm “world-mailsv-centos7” acpipowerbutton
TIMEOUT /T 60

VBoxManage.exe controlvm “moon-asterisk-debian8” acpipowerbutton
TIMEOUT /T 60

[/shell]