起動時にVirtualBoxヘッドレスVMを起動する

起動時にVirtualBoxヘッドレスVMを起動する

Ubuntu 12.04 ホスト上で 2 つの VirtualBox ヘッドレス VM を実行しています。システムの起動時にこれらの VM が自動的に起動するようにしたいと思います。

次のように 2 つの crontab エントリを設定しています (VM を所有するユーザーの下)。

@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx

しかし、それではうまくいかないようです。ターミナルから直接コマンドを実行すると、マシンは問題なく起動しますが、システムが起動すると、マシンが起動しないようです。VirtualBox プログラム/ライブラリがロードされる前に crontab が実行されているのではないかと考えています。

これらの VM を自動的に起動するにはどうすればよいですか?

答え1

これは私が使っているものです。起動時にVMを起動し、シャットダウン/再起動時に状態を保存します。

#!/bin/bash
### BEGIN INIT INFO
# Provides:       vmboot
# Required-Start: vboxdrv
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: Stop/Start VMs on System shutdown
### END INIT INFO

VBOXUSER=vboxuser
SU="sudo -H -u $VBOXUSER"
VBOXMANAGE=/usr/bin/VBoxManage
VBOXHEADLESS=/usr/bin/VBoxHeadless
RUNNINGVMS=$($SU $VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/')
ALLVMS=$($SU $VBOXMANAGE --nologo list vms | sed -e 's/^".*".*{\(.*\)}/\1/')

case $1 in
stop)
if [[ -n $RUNNINGVMS ]]; then
echo "Saving the state of all running VMs..."
for v in $RUNNINGVMS; do
    $SU $VBOXMANAGE --nologo controlvm $v savestate
done
fi
;;
start)
for v in $ALLVMS; do
if [[ -n $($SU $VBOXMANAGE --nologo showvminfo $v | grep saved) ]]; then
    echo "Restoring VMs..." && $SU $VBOXHEADLESS -s $v & > /dev/null
fi
done
;;
*)
echo "Usage: /etc/init.d/vmboot start | stop"; exit 1
;;
esac
exit 0

/etc/init.d に保存するだけです。私の場合は vbox という名前にしました。実行すれupdate-rc.d <script name> defaultsば準備完了です。

答え2

VMを手動で起動するときに、root以外のアカウントでログインしているのではないかと思います。 はcronrootとして実行されているため、VMについて認識していません。 コマンドを実行することで確認できます。

sudo /usr/bin/vboxheadless -startvm io

エラーが発生した場合

Invalid machine name or UUID!

VM がルート アカウントに登録されていません。その場合は、自分のアカウントでコマンドを実行するシェル スクリプトを作成し、そのスクリプトを次のようにスケジュールしますcron

#!/bin/sh

USERNAME=...

su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME

答え3

また、MB/CPU がハードウェア視覚化をサポートしている場合、2 番目のオプションとして ProxMox があります。これは Linux、KVM、Web インターフェイスの自己完結型インストールです。カーネル レベルで実行されるため、VirtualBox よりもはるかに優れたパフォーマンスを発揮します。また、VirtualBox が使用する「仮想」ドライブのみではなく、KVM のゲストを物理ドライブに接続できるため、ディスク I/O が大幅に少なくなります。

システムがハードウェアの視覚化をサポートしているかどうかを簡単に確認します。

egrep -c '(vmx|svm)' /proc/cpuinfo

関連情報