Как убедиться, что виртуальная машина корректно завершает работу?

Как убедиться, что виртуальная машина корректно завершает работу?

На моем домашнем сервере через VirtualBox в виртуальных машинах запущено несколько других серверов.

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

Как я могу убедиться, что моя виртуальная машина корректно завершает работу при отключении сервера?

Дополнительная информация: «Сервер» на самом деле является старым ноутбуком, на нем установлена ​​ОС Ubuntu Desktop 11.04, и он не является «безголовым» (также на нем работает медиацентр).

решение1

Вы можете использовать VBoxManageкоманду для управления вашими виртуальными машинами из командной строки. Это позволяет вам создать скрипт, который может завершить работу вашей виртуальной машины перед выключением питания.

Вы можете запустить очень простой скрипт для выключения виртуальной машины и хоста...

#!/bin/bash
# poff.sh - poweroff the vm, then the host...

VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1

Или вы можете использовать те же команды в качестве псевдонима, добавленного в ваш файл .bashrc...

alias poff='VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1' # poweroff the vm, then the host...

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

решение2

Я сделал это с помощью qemu, запущенного на Debian, на котором размещена виртуальная машина Windows Server 2003. Я включил «Службы аварийного управления» на виртуальной машине Win2k3. Это дает вам «Специальную консоль администрирования» на последовательном порту. qemu позволяет вам подключать виртуальный последовательный порт к порту «telnet», поэтому я дал ему адрес localhost. SAC позволяет вам аккуратно завершить работу системы, выполнив команду через последовательный порт, и поскольку это что-то вроде «аварийного черного хода», он, как правило, очень надежен независимо от того, что еще может происходить в виртуальной машине.

Затем я создал короткий expectскрипт для «входа» в последовательный SAC и выдачи команды выключения. Это было обернуто в другой скрипт, который вызывал этот expectскрипт и ждал 2 минуты, пока процесс qemu не умрет. Если процесс не умирал, он принудительно убивал его. Настройка Linux на вызов этого скрипта при выключении гарантировала, что виртуальная машина всегда будет завершаться чисто, если это возможно.

Поэтому вы можете адаптировать этот метод к своей ситуации.

Если у вас есть виртуальная машина Linux, то вы действительно можете просто создать небольшой скрипт в вашей системе Ubuntu, который входит в виртуальную машину через ssh и вызывает скрипт, который корректно завершает работу системы.

Связанный контент