2

У меня есть сервер Ubuntu, на котором виртуальная машина Virtualbox должна постоянно работать. Виртуальные машины управляются конкретным пользователем VMAdmin который не имеет прав администратора. Мне нужно создать сценарий init.d для работы с виртуальными машинами virtualbox.
Должно:

  • запускать ВМ всякий раз, когда загружается хост-система;
  • сохранять состояние гостевой системы при каждом отключении хоста;
  • предоставить команды для запуска, выключения, сброса и резервного копирования виртуальной машины.

1 ответ1

8

Следующий скрипт заботится обо всем вышеперечисленном:

#! /bin/sh
# /etc/init.d/vbox

#Edit these variables!
VMUSER=VMAdmin
VMNAME="cdb62186-7c30-4c25-a0b0-e4a32cfb0504"
BASEFOLDER=/home/VMAdmin/path/to/backups/

case "$1" in
    start)
        echo "Starting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    reset)
        echo "Resetting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    stop)
        echo "Saving state of Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
        ;;
    shutdown)
        echo "Shutting down Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
        ;;
    status)
        sudo -H -u $VMUSER VBoxManage list vms -l | grep -e ^"$VMNAME": -e ^State | sed s/\ \ //g | cut -d: -f2-
        ;;
    backup)
        echo ""
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton

        echo "Waiting for VM "$VMNAME" to poweroff..."
        until $(sudo -H -u $VMUSER VBoxManage showvminfo --machinereadable "$VMNAME" | grep -q ^VMState=.poweroff.)
        do
          sleep 1
        done

        FILENAME=$(date +"%Y_%m_%d-%T")
        echo "Backing up Virtualbox VM to '$BASEFOLDER$FILENAME'..."
        sudo -H -u $VMUSER VBoxManage clonevm "$VMNAME" --options keepallmacs --name $FILENAME --basefolder $BASEFOLDER

        echo "Restarting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        echo ""
        ;;
    *)
        echo "Usage: sudo service vbox {start|stop|status|shutdown|reset|backup}"
        exit 1
        ;;
esac

exit 0

Скажите, чтобы скрипт первым выключился, а последним запустился:

sudo update-rc.d vbox defaults 99 01

Чтобы добавить задачу резервного копирования в crontab, запустите:

sudo crontab -e

И добавьте строку вроде:

* 3 * * 5 service vbox backup

Который будет запускать еженедельное резервное копирование по пятницам в 3 часа ночи. Для получения дополнительной информации о создании задачи crontab см .:http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

Смежный вопрос: скрипт Bash для ожидания завершения работы Virtualbox VM?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .