Запуск виртуальной машины VirtualBox Headless при загрузке

Запуск виртуальной машины VirtualBox Headless при загрузке

Я запускаю две виртуальные машины VirtualBox headless на хосте Ubuntu 12.04. Я хотел бы, чтобы эти виртуальные машины запускались автоматически при загрузке системы.

У меня есть две записи crontab, настроенные следующим образом (под пользователем, которому принадлежат виртуальные машины):

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

Но, похоже, это не помогает. Если я запускаю команду прямо из терминала, машины запускаются без сучка и задоринки, но я не могу заставить их запуститься после запуска системы. Я думаю, что, возможно, crontab запускается до загрузки программы/библиотеки VirtualBox.

Как запустить эти виртуальные машины автоматически?

решение1

Это то, что я использую. Он запускает виртуальные машины при загрузке и сохраняет их состояние при выключении/перезагрузке.

#!/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

Я подозреваю, что вы вошли в систему с учетной записью, отличной от root, когда вы запускаете виртуальные машины вручную, в то время как cronработает как root и, таким образом, не знает о ваших виртуальных машинах. Вы можете проверить это, выполнив команду

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

решение3

Второстепенный вариант, если ваша материнская плата/процессор поддерживают аппаратную визуализацию, — это ProxMox. Это автономная установка Linux, KVM и веб-интерфейса. Она имеет гораздо лучшую производительность по сравнению с VirtualBox, поскольку работает на уровне ядра, и вместо «виртуальных» дисков, которые использует VirtualBox, вы можете фактически подключить гостя под KVM к физическому диску, который использует НАМНОГО меньше дискового ввода-вывода.

Быстрая проверка того, поддерживает ли ваша система аппаратную визуализацию:

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

Связанный контент