Если ваша виртуальная машина, запущенная на хосте Hyper-V зависла по каким-то причинам, перестала отвечать, и не реагирует на кнопки включения, выключения, перезагрузки в консоли Hyper-V, единственный быстрый способ принудительно остановить такую машину — завершить процесс этой ВМ в хостовой ОС. Покажем, как принудительно перезагрузить ВМ в Hyper-V на Windows Server 2016/2019 без перезагрузки всего сервера и запущенных ВМ (если у вас нет HA кластера Hyper-V и Live-Migration).
Виртуальная машина Hyper-V зависла в статусе Stopping, Starting
Итак, предположим, что одна из ВМ на Hyper-V зависла в состоянии Stopping (Stopping-Critical)/ Starting (Starting 10%).
Гостевая ОС перестала отвечать, а кнопки “Turn Off”,” Shut Down” и” Reset” в консоли Hyper-V Manager стали недоступны либо при нажатии возвращают ошибку:
Итак, предположим, что одна из ВМ на Hyper-V зависла, гостевая ОС перестала отвечать, а кнопки «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
Ошибка Hyper-V: Connecting to Virtual Machine Management service
Если ваш Hyper-V не отображает виртуальные машины в консоли Hyper-V Manager, возвращая ошибку «Connecting to Virtual Machine Management service«, вам нужно перезапустить процесс vmms.exe (Hyper-V Virtual Machine Management service). Это безопасная операция и не прервет работу запушенных виртуальных машин. Проще всего перезапустить процесс vmms.exe через службу vmms и через консоль
services.msc
или командой:
Get-Service vmms | Restart-Service
Завершение процесса зависшей ВМ с помощью Task Manager
Единственный способ принудительно выключить/ перезапустить такую зависшую виртуальную машину без перезагрузки всего хостового сервера Hyper-V – завершить ее рабочий процесс на гостевой ОС. Все ВМ на хосте Hyper-V запускаются с помощью процесса vmwp.exe (Virtual Machine Worker Process). Для поиска процесса нужно узнать GUID виртуальной машины.
Определить GUID ВМ можно через консоль управления Hyper—V Manager. Откройте настройки сервера (Hyper—V Settings). В разделе Server указано каталог, в котором хранятся конфигурационные файлов ВМ (в нашем примере D:\VMStore).
Откройте этот каталог в File Explorer и найдите каталог с именем зависшей виртуальной машины. Скопируйте GUID, который указан в имени конфигурационного файла ВМ с расширением *.vmcx.
Теперь нужно запустить диспетчер задач (Task Manager) и перейти на вкладку Details. Все виртуальные машины запускаются в рамках собственного экземпляра процесса vmwp.exe. Чтобы определить какой процесс за какую ВМ отвечает, нам нужен полученный ранее GUID зависшей ВМ. Найдите процесс vmwp.exe, у которого в столбце User name указан GUID вашей ВМ. Завершите данный процесс (End Task).
Виртуальная машина будет принудительно остановлена. Теперь вы сможете делать с ней все что угодно.
Сбросить зависшую ВМ на Hyper-V VM с помощью PowerShell
Гораздо проще найти и завершить процесс зависшей виртуальной машины с помощью PowerShell. Запустите консоль PowerShell с правами администратора (учетная запись должна состоять в локальной группе Hyper-V administrators).
Stop-VM –Force
, она также зависает. Очевидно ожидает ответа от ВМ.В этом случае также нужно завершить процесс ВМ по ее ID. Можно получить GUID ВМ с по ее имени. Например, для ВМ с именем SVM-GUARDEDHOST1, выполните команду:
$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID
Если вы не хотите набирать полное имя ВМ, можете вывести список всех ВМ, зарегистрированных на данном хосте Hyper-V:
Get-VM | Select Name, Id
Скопируйте GUID нужной ВМ из полученного списка.
Теперь нужно найди идентификатор процесса (PID) ‘vmwp.exe’ для вашего VMGUID:
$VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})
Затем с помощью команды Stop-Process нужно принудительно завершить этот процесс:
Stop-Process ($VMWMProc.ProcessId) –Force
Вот так несложно можно принудительно завершить рабочий процесс подвисшей виртуальной машины Hyper-V.
Hyper-V: Не удалось изменить состояние виртуальной машины
Иногда бывает, что даже после завершения зависшего процесса вы не можете включить ВМ и она зависает в статусе Starting с ошибкой:
Virtual Machine Connection Не удалось изменить состояние. Failed to Change State.
В этом случае проверьте следующие варианты:
- Проверьте что на диске, на котором хранятся файлы ВМ достаточно свободного места;
- Если в настройках ВМ подключен ISO образ, проверьте его доступность;
- Проверьте сетевые настройки ВМ. Виртуальные сетевые адаптеры должны быть подключены к существующему виртуальному коммутатору Hyper-V (не должно быть статуса Network Adapter – Configuration Error);
- Проверьте, что служба Hyper-V Virtual Management Service (VMMS) запушена, и не зависла в статусе Stopping;
- Убедитесь, что ваш антивирус не блокирует доступ к файлам ВМ. Добавьте пути к каталогу ВМ в исключения антивируса ( см. как добавить исключения во встроенный антивирус Windows Server 2016 – Windows Defender);
- Проверьте ошибки в журнале событий Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> Hyper-V-Worker.
зашибись советы. Теперь у меня служба в состоянии стопинг зависла. Через диспетчер задач служба wmvp не стопится, при повторной попытке стопнуть пишет доступ запрещен.
Называется как убить полностью и все таки перезагрузить сервер…
причем перезагрузить хардресетом….
Написано так что не поймешь что к чему! Запутал до не могу.