Как остановить зависшую виртуальную машину в 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_x000D_The operation cannot be performed while the object is in its current state_x000D_

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
    Ранее мы показывали, как использовать Process Explorer для поиска и разблокировки файлов, занятых другими процессами .

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

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

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

В этом случае встроенный командлет Stop-VM из модуля Hyper-V PowerShel l не позволит вам выключить ВМ. Если попробовать выполнить команду 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 остановить зависшую ВМ

Совет . У нас также описана аналогичная процедура по завершению процесса зависшей ВМ на хосте VMWare ESXi .

Виртуальная машина 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_x000D_Не удалось изменить состояние._x000D_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.

EnglishRussianUkrainian