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

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

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

VBoxHeadless -startvm Ubuntu --vrdp on

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

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

VBoxManage controlvm Ubuntu acpipowerbutton

или

VBoxManage controlvm Ubuntu poweroff

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

Для безопасного завершения работы виртуальной машины используйте эту команду:

vboxmanage controlvm Ubuntu poweroff soft

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

VBoxManage controlvm Ubuntu poweroff

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

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

Если вы завершаете работу виртуальной машины, когда это делает сервер, вам придется дождаться виртуальной машины (ов)

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

Я знаю, что виртуальные машины завершили работу, когда вывод команды 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.

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

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