Как остановить зависшую виртуальную машину в Hyper-V?

Как остановить зависшую виртуальную машину в Hyper-V?

Если ваша виртуальная машина, запущенная на хосте Hyper-V зависла по каким-то причинам, перестала отвечать, и не реагирует на кнопки включения, выключения, перезагрузки в консоли Hyper-V Manager, единственный быстрый способ принудительно остановить такую машину — завершить процесс этой ВМ в хостовой ОС. Вы можете принудительно перезапустить конкретную ВМ в Hyper-V на Windows Server 2022/2019/2016 (или бесплатного Hyper-V Server) без перезагрузки всего сервера и запущенных на нем виртуальных машин (полезно, если у вас нет HA кластера Hyper-V и Live-Migration).

Виртуальная машина Hyper-V зависла в статусе Stopping или Starting

Администраторы Hyper-V периодически сталкиваются с ситуациями, когда что одна из ВМ на хосте Hyper-V зависает в состоянии Stopping (Stopping-Critical), Starting (Starting 10%) или Backing up.

Виртуальная машина hyper зависла в статусе stopping

При этом гостевая ОС перестаёт отвечать, и кнопки “Turn Off”,” Shut Down” и” Reset” вв консоли Hyper-V Manager становиться недоступны или при нажатии возвращают ошибку:

Failed to change state
The operation cannot be performed while the object is in its current state

The operation cannot be performed while the object is in its current state

Если ваш хост Hyper-V не показывает список зарегистрированных виртуальных машин в консоли Hyper-V Manager и возвращает ошибку “Connecting to Virtual Machine Management service”, вам нужно перезапустить процесс vmms.exe (служба Hyper-V Virtual Machine Management). Это безопасная операция, которая не прервет работу запушенных виртуальных машин. Проще всего перезапустить процесс службы vmms через консоль
services.msc
или PowerShell командой:

Get-Service vmms | Restart-Service

перезапустить службу vm management service hyper v

Как завершите процесс зависшей виртуальной машины Hyper-V?

Чтобы принудительно выключить/ перезапустить зависшую виртуальную машину без перезагрузки всего хостового сервера Hyper-V, нужно завершить ее рабочий процесс на гостевой ОС. Все ВМ на хосте Hyper-V запускаются с помощью процесса vmwp.exe (Virtual Machine Worker Process). Для поиска конкретного PID процесса нужно узнать GUID виртуальной машины.

Вы можете найти GUID ВМ в консоли управления Hyper-V Manager. Откройте настройки сервера (Hyper-V Settings). В разделе Server указан каталог, в котором хранятся конфигурационные файлов ВМ (в нашем примере D:VMStore).Настройки hyper v manager

Откройте этот каталог в File Explorer и найдите каталог с именем зависшей виртуальной машины. Скопируйте GUID, который указан в имени конфигурационного файла ВМ с расширением *.vmcx.

hyper-v guid виртуальной машиныТеперь нужно запустить диспетчер задач (Task Manager) и перейти на вкладку Details. Все виртуальные машины запускаются в рамках собственного экземпляра процесса vmwp.exe. Чтобы определить какой процесс за какую ВМ отвечает, нам нужен полученный ранее GUID зависшей ВМ. Найдите процесс vmwp.exe, у которого в столбце User name содржится GUID вашей ВМ. Завершите данный процесс (End Task).

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

По аналогии вы можете найти и завершить процесс подвисшей виртуальной машины на хосте Hyper-V с помощью утилиты Process Explorer.

  1. Запустите Process Explorer с правами администратора и нажмите Find Handle or DLL (или нажмите Ctrl-F );
  2. В строке поиска укажите путь к виртуальному диску зависшей виртуальной машину (*.vhdx);
  3. Process Explorer выведет все процессы, которые используются VHDX файл виртуальной машины;
  4. Найдите процесс виртуальной машину vmwp.exe и завершите его. process explorer завершить процесс vmwp зависшей виртуальонй машины hyper-v

Виртуальная машина будет принудительно остановлена. Теперь вы сможете делать с ней все что угодно.

Выключить зависшую ВМ на Hyper-V с помощью PowerShell

Гораздо проще найти и завершить процесс зависшей виртуальной машины с помощью PowerShell. Запустите консоль PowerShell с правами администратора (учетная запись должна состоять в локальной группе Hyper-V administrators).

В этом случае встроенный командлет Stop-VM из модуля Hyper-V PowerShell не позволит вам выключить ВМ. Если попробовать выполнить команду
Stop-VM –Force
, она также зависает. Очевидно ожидает ответа от ВМ.

Вы также можете завершить процесс ВМ по ее VM ID. Можно получить GUID ВМ по ее имени. Например, для ВМ с именем SVM-GUARDEDHOST1, выполните команду:

$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID

Если вы не хотите набирать полное имя ВМ, можете вывести список всех ВМ, зарегистрированных на данном хосте Hyper-V и их ID:

Get-VM | Select VMName, VMId, Parh

получить id виртуальной машины hyper v из powershell

Скопируйте VMID нужной вам ВМ из полученного списка.

Теперь нужно найти идентификатор процесса (PID) ‘vmwp.exe’ для вашего VMGUID:

$VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})

Затем нужно принудительно завершить рабочий процесс подвисшей виртуальной машины Hyper-V с помощью команды Stop-Process:

Stop-Process ($VMWMProc.ProcessId) –Force

powershell остановить зависшую ВМ

Виртуальная машина Hyper-V зависает при резервном копировании

При выполнении резервного копирования ВМ на хосте Hyper-V вы можете столкнуться с зависанием виртуальной машины Hyper-V в состоянии Running и статусом Backing up. При этом вы не можете остановить или запустить ВМ через Hyper-V Manager.

hyper-v: виртуальня машина зависла в статусе backing up

Если вы не хотите перезагружать хост Hyper-V, проверьте сначала состояние службу «Microsoft Hyper-V VSS Writer»:

vssadmin list writers

проверить состояние vss writer

Убедитесь, что команда не вернула ошибку. Значит нужно перезапустить службу «Hyper-V Virtual Machine Management» с помощью команды PowerShell:

Get-service vmms | stop-process 

Убедитесь, что процесс vmms.exe завершен. Если нет, завершите его принудительно:

Get-Process | Where-Object { $_.ProcessName -eq 'vmms' } | Stop-Process

Теперь можно запустить службу Hyper-V:

Start-Service vmms 

Перезапуск службы Virtual Machine Management должно сбросить состояние VSS Writer для Hyper-V.

Hyper-V: Не удалось изменить состояние виртуальной машины

Иногда бывает, что даже после завершения зависшего процесса вы не можете включить ВМ и она зависает в статусе Starting с ошибкой:

Virtual Machine Connection
Не удалось изменить состояние.
Failed to Change State.

hyper v ошибка запуска ВМ failed to change state

В этом случае проверьте следующие варианты:

  • Проверьте что на диске, на котором хранятся файлы ВМ достаточно свободного места;
  • Если в настройках ВМ подключен ISO образ, проверьте этот файл доступен;
  • Проверьте сетевые настройки ВМ. Виртуальные сетевые адаптеры должны быть подключены к существующему виртуальному коммутатору Hyper-V (не должно быть статуса Network Adapter – Configuration Error);hyper v сетевая карта с configuration error
  • Проверьте, что служба Hyper-V Virtual Management Service (VMMS) запушена, и не зависла в статусе Stopping;
  • Убедитесь, что ваш антивирус не блокирует доступ к файлам ВМ. Добавьте пути к каталогу с виртуальными машинами в исключения антивируса ( см. как добавить исключения во встроенный антивирус Windows Defender в Windows Server);
  • Проверьте ошибки в журнале событий Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> Hyper-V-Worker;
  • Отключите режим сна и гибернации в гостевых операционных системах виртуальных машин. В Windows спящий режим отключается через Control Panel –>Power Options -> Change plan settings -> Put the computer to sleep -> Never. Чтобы отключить спящий режим в гостевой ОС с Ubuntu Linux, выполните команду:
    systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

Если методы, описанные выше, не помогли, похоже, что вам придется перезагрузить весь хост Hyper-V.

PowerShell
Как остановить зависшую виртуальную машину в Hyper-V?