Ubuntu12.04ホストで2つのVirtualBoxヘッドレスVMを実行しています。システムの起動時にこれらのVMを自動的に起動したいのですが。
私はこのように設定された2つのcrontabエントリを持っています(VMを所有するユーザーの下で):
@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx
しかし、それはうまくいかないようです。ターミナルから直接コマンドを実行すると、マシンは問題なく起動しますが、システムが起動すると、マシンを起動させることができないようです。 VirtualBoxプログラム/ライブラリがロードされる前にcrontabが実行されているのではないかと思います。
これらのVMを自動的に起動するにはどうすればよいですか?
これが私が使っているものです。起動時に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
そしてあなたは行ってもいいはずです。
VMを手動で起動したときにroot以外のアカウントでログインしていると思われますが、cron
はrootとして実行されているため、VMについて認識していません。コマンドを実行することで確認できます
Sudo /usr/bin/vboxheadless -startvm io
エラーが発生した場合
Invalid machine name or UUID!
VMはrootアカウントに登録されていません。その場合、アカウントでコマンドを実行するシェルスクリプトを作成し、そのスクリプトをcron
でスケジュールします。
#!/bin/sh
USERNAME=...
su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME
MB/CPUがハードウェアの視覚化をサポートしている場合の2番目のオプションもProxMoxです。 Linuxの自己完結型インストール、KVMおよびWebインターフェイス。カーネルレベルで実行され、virtualboxが使用できるような「仮想」ドライブのみではなく、virtualboxよりもはるかに優れたパフォーマンスを発揮します。実際には、KVMの下のゲストを、はるかに少ないディスクIoを使用する物理ドライブに接続します。
システムがハードウェアの視覚化をサポートしているかどうかをすばやく確認します。
egrep -c '(vmx|svm)' /proc/cpuinfo