
Если ваша виртуальная машина, работающая под управлением Hyper-V, по какой-то причине застряла, перестала отвечать на запросы и не запускается/останавливается/перезапускается после нажатия соответствующих кнопок в консоли Hyper-V Manager, вы можете принудительно остановить (убить) рабочий процесс этой ВМ на хосте Hyper-V. Мы покажем, как принудительно перезапустить зависшую ВМ Hyper-V, работающую на Windows Server 2022/2019/2016, Windows 10/11 или Free Hyper-V Server, без перезагрузки всего хоста гипервизора и всех работающих ВМ (полезно, если у вас нет кластера Hyper-V HA и Live-Migration).
- Hyper-V VM застряла в состоянии остановки/запуска/восстановления
- Как остановить/убить зависшую виртуальную машину в Hyper-V?
- Принудительная остановка виртуальной машины Hyper-V с помощью PowerShell
- Hyper-V VM застряла в состоянии резервного копирования
- Hyper-V Manager не удалось изменить состояние ВМ
Hyper-V VM застряла в состоянии остановки/запуска/восстановления
Предположим, что одна из ваших виртуальных машин на хосте 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 Manager и возвращает сообщение «Подключение к службе управления виртуальными машинами«, вам необходимо перезапустить 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 Менеджер консоль. Откройте настройки сервера Hyper-V. На странице Сервер раздел содержит каталог, в котором хранятся файлы конфигурации ВМ (в нашем случае это D:\VMStore).
Откройте этот каталог в File Explorer и найдите папку с именем вашей застрявшей виртуальной машины. Скопируйте GUID, указанный в имени файла конфигурации виртуальной машины, с помощью команды *.vmcx
расширением.
Запустите программу Задание Менеджер и перейдите в раздел Подробности вкладка. Все виртуальные машины работают под управлением собственного экземпляра vmwp.exe процесс. Чтобы определить, какой процесс отвечает за вашу ВМ, вам понадобится GUID зависшей ВМ, который вы получили ранее. Найдите процесс vmwp.exe, имеющий GUID вашей ВМ в папке Пользователь имя столбец. Убейте этот процесс VM (Завершить задачу).
Аналогичным образом можно найти и остановить зависший процесс виртуальной машины на хосте Hyper-V, используя Process Explorer инструмент.
- Запустите Process Explorer от имени администратора и нажмите Найти дескриптор или DLL (или нажмите Ctrl-F);
- Укажите путь к виртуальному диску (*.vhdx) виртуальной машины Hyper-V, которая застряла в состоянии запуска/остановки;
- Process Explorer выведет список всех процессов, использующих VHDX-файл виртуальной машины;
- Найдите vmwp.exe процесс виртуальной машины и убейте его (Правая кнопка мыши -> Kill Process).Ранее мы показали вам, как использовать Process Explorer для поиска и разблокировки файлов, заблокированных другими процессами.
Виртуальная машина будет принудительно остановлена. Теперь вы можете делать с VM все, что захотите.
Принудительная остановка виртуальной машины Hyper-V с помощью PowerShell
Гораздо проще найти и убить не отвечающий процесс виртуальной машины с помощью PowerShell. Запустите консоль PowerShell от имени администратора (ваша учетная запись должна входить в группу Hyper-V «Администраторы Hyper-V»).
Stop-VM -Force
, она также зависает. Очевидно, ожидая ответа от виртуальной машины.Вам нужно убить процесс VM по его GUID. Вы можете получить GUID ВМ по ее имени. Например, чтобы получить GUID ВМ с именем SVM-GUARDEDHOST1, выполните команду:
$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID
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
Hyper-V VM застряла в состоянии резервного копирования
При резервном копировании ВМ на хосте Hyper-V может возникнуть ситуация, когда ВМ Hyper-V застревает в состоянии Запуск состояние с Резервное копирование состояние. Однако остановить или запустить ВМ через Hyper-V Manager нельзя.
Если вы не хотите перезагружать хост Hyper-V, сначала проверьте состояние службы «Microsoft Hyper-V VSS Writer»:
vssadmin list writers
Убедитесь, что команда не возвращает ошибку. Затем необходимо перезапустить службу «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
Перезапуск службы управления виртуальными машинами должен сбросить статус VSS Writer на хосте Hyper-V.
Hyper-V Manager не удалось изменить состояние виртуальной машины
Иногда случается так, что даже после уничтожения зависшего процесса ВМ не удается включить ВМ. Более того, она замирает в состоянии Starting с ошибкой:
Virtual Machine Connection Failed to Change State.
В этом случае проверьте следующие параметры:
- Убедитесь, что на диске, на котором хранятся файлы Hyper-V VM, достаточно свободного места;
- Если в настройках ВМ подключен образ ISO, проверьте, доступен ли этот файл образа по указанному пути;
- Проверьте настройки сетевого адаптера ВМ. Виртуальные сетевые адаптеры должны быть подключены к существующему виртуальному коммутатору Hyper-V (не должно быть статуса Сетевой адаптер — Ошибка конфигурации для любой сетевой карты);
- Убедитесь, что служба виртуального управления Hyper-V (VMMS) работает и не застряла в состоянии «Остановка»;
- Убедитесь, что антивирусное программное обеспечение не блокирует доступ к файлам ВМ. Добавьте пути к каталогу VM в исключения антивируса (см. раздел «Горячее добавление исключений во встроенный антивирус Windows Defender на 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.