Назад | Перейти на главную страницу

Завершение работы виртуальной машины Windows Hyper-V вместо перезапуска по команде

Я использую хост Windows 2016 Hyper-V со следующими виртуальными машинами
2x Windows 2012 R2
2x Ubuntu 16.04

Всякий раз, когда я выполняю перезапуск виртуальных машин после обновления, они почти всегда выключаются и остаются в состоянии «ВЫКЛ» вместо перезапуска.

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

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

Есть два основных требования к гостю для перезапуска после выключения хоста.

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

Для большинства современных гостевых операционных систем, официально поддерживаемых Microsoft, работающих на Hyper-V 2016 или новее, службы интеграции поставляются предварительно упакованными в ОС. Вы можете включить службы интеграции в гостевых настройках. Вы можете получить доступ к этим параметрам, щелкнув правой кнопкой мыши гостя в диспетчере Hyper-V и выбрав «Параметры», а затем в разделе «Управление» выберите параметр «Службы интеграции». Здесь можно указать, какие службы интеграции должны быть доступны в гостевой системе.

Чтобы настроить реакцию гостевой операционной системы на выключение хоста, вы получите доступ к настройкам гостя таким же образом и выберите «Действие автоматического останова». Параметры здесь включают в себя «сохранение» состояния виртуальной машины (по сути, буферизацию рабочего состояния на диск и восстановление этого рабочего состояния при запуске гостя), выключение виртуальной машины (что эквивалентно мгновенному отключению питания, непроизвольное завершение работы) или для завершения работы гостевой операционной системы, которая пытается выполнить плавное завершение работы с помощью служб интеграции.

Чтобы настроить реакцию гостевой операционной системы на включение хоста, войдите в гостевые настройки таким же образом и выберите «Действие при автоматическом запуске». Параметры здесь включают «Ничего не делать», автоматически запускать виртуальную машину, если она работала при выключении хоста, или всегда автоматически запускать виртуальную машину. Вы также можете настроить задержку запуска, чтобы дать хосту или другим виртуальным машинам возможность завершить загрузку перед запуском конкретного гостя - это полезно, если вы хотите сначала загрузить свой DC, вы можете настроить рядовые серверы на 5-минутную задержку запуска. .

Есть несколько случаев, когда эти настройки не работают должным образом:

  • Службы интеграции не установлены, не работают или не включены в гостевых настройках.
  • У вас старый гипервизор, в котором обнаружена ошибка: https://support.microsoft.com/en-us/help/2896800/hyper-v-guest-os-does-not-shut-down-when-you-restart-the-host-computer
  • Гость не завершил работу должным образом из-за задержек в процедуре завершения работы, и ОС хоста достигла периода ожидания, принудительно остановив виртуальную машину.

Последний вариант интересен, так как период ожидания по умолчанию составляет 2 минуты (120 секунд), поэтому любой гость, который требует больше времени для завершения работы, будет полностью остановлен. Это может происходить часто, если у вас более медленное оборудование или обновления ОС в очереди на гостевой системе. На сегодняшний день (насколько мне известно), начиная с Server 2019, единственный способ изменить этот период ожидания - это отредактировать реестр. Ключ реестра (начиная с Server 2016) находится в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization и назван ShutdownTimeout.

Для нестандартных сценариев, таких как запуск гостевой ОС, в которой нет предварительно загруженных служб интеграции, например, старые или малоизвестные дистрибутивы Linux, вам необходимо найти загрузку соответствующих служб интеграции для этой ОС. Службы интеграции доступны НЕ для каждой гостевой ОС, и Microsoft не упрощает запуск гостевых операционных систем, которые официально не поддерживаются.

Приведенные выше инструкции могут незначительно отличаться в зависимости от версии Hyper-V или при использовании клиента Hyper-V на настольной ОС Windows 8+. Все это также можно настроить с помощью PowerShell, если вы используете Server 2016 / Windows 10 или новее.

Лучше поздно, чем никогда! Надеюсь, это поможет :)