Как безопасно завершить работу гостевой ОС в 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
Я полагаю, что это самый изящный способ завершить работу виртуальной машины, потому что она выключается (не выключается) и предоставляет льготное время и (возможно) сообщение для пользователей входа в систему.