Виртуальная машина Hyper-V зависла в состоянии остановки/запуска
Если ваша виртуальная машина, работающая на Hyper-V, по какой-то причине зависла, перестала отвечать на запросы и не запускается/останавливается/сбрасывается после нажатия соответствующих кнопок в консоли диспетчера Hyper-V, вы можете принудительно остановить (уничтожить) работника. процесс для этой виртуальной машины на хосте Hyper-V. Мы покажем вам, как принудительно перезапустить зависшие виртуальные машины Hyper-V, работающие на Windows Server 2022/2019/2016, Windows 10/11 или Free Hyper-V Server, без перезагрузки всего хоста гипервизора и всех работающих виртуальных машин (полезно, если вы у вас нет кластера высокой доступности Hyper-V и функции Live-Migration).
Виртуальная машина Hyper-V зависла в состоянии остановки/запуска/резервного копирования
Предположим, что одна из ваших виртуальных машин на хосте Hyper-V зависла в состоянии Остановка (Остановка-критическая), Запуск (Начало 10%) или . Резервное копирование состояния.
В этом случае гостевая ОС перестает отвечать, а кнопки «Выключить», «Завершение работы» и «Сброс» в диспетчере Hyper-V становятся недоступными (неактивными) или при нажатии выдают следующую ошибку:
The application encountered an error while attempting to change the state of VM.
Failed to change state.
The operation cannot be performed while the object is in its current state.
Если ваш Hyper-V не отображает список зарегистрированных виртуальных машин в консоли диспетчера Hyper-V и возвращает ошибку «Подключение к службе управления виртуальными машинами», вам необходимо перезапустить vmms. .exe (Служба управления виртуальными машинами Hyper-V). Это безопасная операция, которая не прерывает работу виртуальных машин. Самый простой способ перезапустить процесс vmms.exe службы vmms — через команду
services.mscконсоли или с помощью командлетов управления службами PowerShell:
Get-Service vmms | Restart-ServiceКак остановить/уничтожить зависшую виртуальную машину на Hyper-V?
Единственный способ принудительно завершить работу или перезапустить такую зависшую виртуальную машину без перезагрузки всего хоста Hyper-V — это завершить рабочий процесс в операционной системе хоста. Все виртуальные машины на узле Hyper-V запускаются с использованием экземпляров процесса vmwp.exe (Рабочий процесс виртуальной машины). Чтобы найти конкретный PID процесса, вам необходимо узнать GUID виртуальной машины.
Получить GUID виртуальной машины можно с помощью консоли Hyper-V Manager. Откройте настройки сервера Hyper-V. Раздел Server содержит каталог, в котором хранятся файлы конфигурации виртуальной машины (в нашем случае это D:\VMStore).
Откройте этот каталог в проводнике и найдите папку с именем вашей зависшей виртуальной машины. Скопируйте GUID, указанный в имени файла конфигурации виртуальной машины, с помощью
*.vmcxрасширение.
Запустите Задачи Диспетчер и перейдите на вкладку Сведения. Все виртуальные машины работают под управлением собственного экземпляра процесса vmwp.exe. Чтобы определить, какой процесс отвечает за вашу ВМ, вам понадобится полученный ранее GUID зависшей ВМ. Найдите процесс vmwp.exe, имеющий GUID вашей виртуальной машины, в столбце Пользователь имя. Завершите этот процесс виртуальной машины (Завершить задачу).
Аналогичным образом вы можете найти и остановить зависший процесс виртуальной машины на хосте Hyper-V с помощью инструмента Process Explorer.
Запустите Process Explorer от имени администратора и нажмите Найти дескриптор или DLL (или нажмите Ctrl-F);
Укажите путь к виртуальному диску (*.vhdx) виртуальной машины Hyper-V, которая зависла в состоянии запуска/остановки;
Process Explorer выведет список всех процессов, использующих файл VHDX виртуальной машины;
Найдите процесс виртуальной машины vmwp.exe и завершите его (щелкните правой кнопкой мыши -> Убить процесс).
Ранее мы показали вам, как использовать Process Explorer для поиска и разблокировки файлов, заблокированных другими процессами.
Виртуальная машина будет принудительно остановлена. Теперь вы можете делать с виртуальной машиной все, что захотите.
Принудительно остановить виртуальную машину Hyper-V с помощью PowerShell
Гораздо проще найти и завершить не отвечающий процесс виртуальной машины с помощью PowerShell. Запустите консоль PowerShell от имени администратора (ваша учетная запись должна быть членом группы Hyper-V «Администраторы Hyper-V»).
В этом случае встроенный командлет Stop-VM из модуля Hyper-V PowerShell не позволит завершить работу виртуальной машины. Если вы попытаетесь запустить
Stop-VM -Forceкоманду, она тоже зависает. Очевидно, ждем ответа от ВМ.
Вам нужно завершить процесс виртуальной машины по ее GUID. Вы можете получить GUID виртуальной машины по ее имени. Например, чтобы получить GUID виртуальной машины с именем SVM-GUARDEDHOST1, выполните команду:
$VMGUID = (Get-VM "SVM-GUARDEDHOST1").IDЕсли вы не хотите вводить полное имя виртуальной машины, вы можете перечислить все виртуальные машины, зарегистрированные на этом хосте Hyper-V, и их идентификаторы:
Get-VM | Select VMName, VMId, pathСкопируйте свой VMID из полученного списка.
Найдите идентификатор процесса vmwp.exe (PID) для этого VMGUID:
$VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})Затем необходимо принудительно завершить процесс зависшей виртуальной машины Hyper-V с помощью команды Stop-Process:
Stop-Process ($VMWMProc.ProcessId) -ForceСовет. У нас также есть простое руководство о том, как отключить зависшую виртуальную машину на VMWare ESXi.
Виртуальная машина Hyper-V зависла в состоянии резервного копирования
При резервном копировании виртуальной машины на хосте Hyper-V виртуальная машина Hyper-V может зависнуть в состоянии Работает со статусом Резервное копирование. Однако вы не можете остановить или запустить виртуальную машину через диспетчер Hyper-V.
Если вы не хотите перезагружать хост Hyper-V, сначала проверьте состояние службы «Microsoft Hyper-V VSS Writer»:
vssadmin list writersУбедитесь, что команда не возвращает ошибку. Затем необходимо перезапустить службу «Управление виртуальными машинами Hyper-V» с помощью команды PowerShell:
Get-service vmms | stop-processУбедитесь, что процесс vmms.exe завершился. Если нет, принудительно завершите его:
Get-Process | Where-Object { $_.ProcessName -eq 'vmms' } | Stop-ProcessТеперь вы можете запустить службу управления Hyper-V:
Start-Service vmmsПерезапуск службы управления виртуальными машинами должен сбросить состояние модуля записи VSS на узле Hyper-V.
Диспетчеру Hyper-V не удалось изменить состояние виртуальной машины
Иногда бывает, что даже после убийства зависшего процесса ВМ включить ВМ не получается. Более того, он зависает в состоянии Starting с ошибкой:
Virtual Machine Connection
Failed to Change State.В этом случае проверьте следующие параметры:
Убедитесь, что на диске, на котором хранятся файлы виртуальной машины Hyper-V, достаточно свободного места;
Если в настройках ВМ подключен ISO-образ, проверьте, доступен ли этот файл образа по указанному пути;
Проверьте настройки сетевого адаптера виртуальной машины. Виртуальные сетевые адаптеры должны быть подключены к существующему виртуальному коммутатору Hyper-V (для любого сетевого адаптера не должно быть статуса «Сетевой адаптер — Ошибка конфигурации»).
Убедитесь, что служба виртуального управления Hyper-V (VMMS) запущена и не зависла в состоянии остановки;
Убедитесь, что ваше антивирусное программное обеспечение не блокирует доступ к файлам виртуальной машины. Добавьте пути к каталогу ВМ в исключения антивируса (см. горячее добавление исключений во встроенный антивирус «Защитник Windows» на Windows Server);
Проверьте наличие ошибок, связанных с Hyper-V, в средстве просмотра событий -> Журналы приложений и служб -> Microsoft -> Windows -> Hyper-V-Worker;
Отключите режим сна и гибернации в гостевых операционных системах виртуальных машин. Вы можете отключить спящий режим в Windows через Панель управления -> Электропитание -> Изменить настройки плана -> Переводить компьютер в спящий режим -> Никогда. Чтобы отключить спящий режим и спящий режим в гостевой ОС Ubuntu Linux, выполните команду:
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Если описанные выше методы не помогли, похоже, вам придется перезагрузить весь хост Hyper-V.











