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

70

У меня 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
Бахтиер
источник

Ответы:

57

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

Эгиль
источник
16

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

vboxmanage controlvm Ubuntu poweroff soft
Мензер
источник
9
Можете ли вы предоставить свой источник? Кажется, я не могу найти что-либо об этой «мягкой» опции в главе 8 документации VBox.
rbaleksandar
5
Убийство ничего не подозревающих vms с 2013 года. Может быть, удалить этот ответ? Кто угодно?
выкорчеван
11

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

(В этом шеллскрипте «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
}
...
Хорхе Санчес
источник
9

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

VBoxManage controlvm Ubuntu poweroff

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

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

htorque
источник
1
Должен, вероятно, поставить не делай этого! часть перед командой. Я прочитал первые две строки и выполнил команду!
nsane
1
@ nisargshah95 Могу я отослать вас к примеру, приведенному в этой теме . Всегда сначала читайте все инструкции и всегда старайтесь понять любую команду перед ее выполнением. Особенно актуально в Linux.
Самуэль Хармер
2
Я понимаю, но в наиболее распространенном случае после прочтения команды человек может сделать вывод, что это решение (без дальнейшего чтения)
nsane
Я согласен @nsane - я предложил изменить, чтобы этого не произошло с другими.
Адам К Дин
6

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

sudo poweroff

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

Takkat
источник
-4

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

Вугон Чунг
источник
1
Вопрос касается выключения гостевой ОС с хоста. Это не будет иметь ... э ... предполагаемого эффекта, если вы запустите его с хост-машины.
Дэйв