Как безопасно завершить работу гостевой ОС в VirtualBox с помощью командной строки

У меня Ubuntu 10.10 и я использую VirtualBox 3.2. В качестве гостевой ОС у меня есть другая Ubuntu в VirtualBox.

Я запускаю Guest Ubuntu автоматически, используя следующую команду после загрузки Host Ubuntu:

VBoxHeadless -startvm Ubuntu --vrdp on

Тогда я могу получить к нему доступ с помощью ssh или tsclient.

Теперь мне нужно автоматически отключить гостевую Ubuntu, как только я выключу свою Host Ubuntu. Кто-нибудь знает какой-либо безопасный способ автоматического отключения гостевой Ubuntu с помощью командной строки? Я обнаружил два способа выключения гостевой ОС, но я не уверен, что они безопасны или нет. Вот они:

VBoxManage controlvm Ubuntu acpipowerbutton

или же

VBoxManage controlvm Ubuntu poweroff

7 ответов

Решение

Если вы откроете настройки управления питанием Gnome, вы можете указать, какие действия следует выполнять при нажатии кнопки питания. Если вы установите его для выключения, он будет корректно выключен, когда вы нажимаете виртуальную кнопку питания с VBoxManage controlvm Ubuntu acpipowerbutton команда.

Для безопасного отключения vm используйте эту команду:

vboxmanage controlvm Ubuntu poweroff soft

Не делай этого:

VBoxManage controlvm Ubuntu poweroff

Это равносильно вытягиванию вилки из розетки на реальном компьютере. Вы не хотите делать это!

Используйте метод отключения ACPI (проверьте настройку управления питанием, как предлагает Egil) или, возможно, укажите метод сохранения состояния (savestate) попробовать.

Если вы выключаете виртуальную машину, когда сервер делает это, вам придется ждать виртуальную машину

(В этом шеллскрипте "root" является инициатором, а "theuser" является владельцем "thevm")

Я знаю, что VMS закончил, когда вывод команды VBoxManage list runningvms возвращает пустую строку.

Я использую это в моем сценарии оболочки

...
stop(){
    su -c "VBoxManage controlvm thevm acpipowerbutton" -s /bin/bash theuser
    while [ "`su -c 'VBoxManage list runningvms' -s /bin/bash theuser`" != "" ]
    do
        echo waiting for VMs to shutdown
        sleep 3
    done
}
...

Вы должны выключить свою виртуальную Ubuntu точно так же, как выключите свое реальное оборудование. Из командной строки на ssh-сессии удаленно выдайте:

sudo poweroff

Если вы хотите сохранить состояние машины (аналогично режиму приостановки / гибернации), используйте вторую точку в ответе @htorque.

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

Я обычно выключаю виртуальную машину (Linux) $ sudo shutdown -h now Я полагаю, что это самый изящный способ завершить работу виртуальной машины, потому что она выключается (не выключается) и предоставляет льготное время и (возможно) сообщение для пользователей входа в систему.

Другие вопросы по тегам