Виртуальная машина (ВМ) в Hyper-V может зависнуть в состояниях Stopping, Starting или Backing up, переставая отвечать на команды в консоли Hyper-V Manager. Это может быть вызвано сбоями в службе Диспетчер виртуальных машин (vmms.exe), проблемами с драйверами, нехваткой ресурсов или конфликтами программного обеспечения. В этой статье мы подробно разберем, как принудительно завершить процесс зависшей ВМ на хосте Hyper-V (Windows Server 2022/2019/2016 или бесплатный Hyper-V Server) без перезагрузки сервера, используя Диспетчер задач, Process Explorer или PowerShell.
Причины зависания виртуальной машины в Hyper-V
Зависание ВМ в Hyper-V может проявляться в следующих состояниях:
— Статус Stopping или Stopping-Critical, когда машина не завершает процесс остановки.
— Статус Starting (например, Starting 10%), когда ВМ не запускается.
— Статус Backing up, связанный с проблемами резервного копирования.
— Ошибка в Hyper-V Manager: «Failed to change state» или «The operation cannot be performed while the object is in its current state».
Такие проблемы могут возникать из-за:
— Сбоя службы Диспетчер виртуальных машин (vmms.exe).
— Повреждения конфигурационных файлов ВМ.
— Недостатка свободного места на диске, где хранятся файлы ВМ.
— Конфликта сетевых настроек или виртуального коммутатора.
— Блокировки файлов ВМ антивирусом.
Решение проблемы: пошаговые инструкции
Если ВМ не реагирует на команды в Hyper-V Manager, вы можете принудительно завершить ее процесс. Рассмотрим несколько методов.
Метод 1. Перезапуск службы Hyper-V Virtual Machine Management
Если Hyper-V Manager не отображает список ВМ и выдает ошибку «Connecting to Virtual Machine Management service», перезапустите службу vmms.exe. Это безопасная операция, которая не влияет на работающие ВМ.
1. Нажмите Win + R, введите
services.msc
и нажмите Enter.
2. Найдите службу Служба управления виртуальными машинами Hyper-V (Hyper-V Virtual Machine Management).
3. Щелкните правой кнопкой мыши и выберите Перезапустить.
Альтернативно, используйте PowerShell:
Get-Service vmms | Restart-Service
Метод 2. Завершение процесса ВМ через Диспетчер задач
Каждая ВМ в Hyper-V работает как отдельный процесс vmwp.exe (Virtual Machine Worker Process). Для завершения зависшей ВМ нужно найти ее процесс по уникальному идентификатору (GUID).
1. Откройте Hyper-V Manager, выберите хост и перейдите в Настройки Hyper-V.
2. В разделе Сервер найдите путь к каталогу хранения конфигураций ВМ (например, D:\VMStore).
3. В Проводнике откройте указанный каталог, найдите папку с именем зависшей ВМ и скопируйте GUID из имени файла с расширением .vmcx.
4. Запустите Диспетчер задач (Ctrl + Shift + Esc) и перейдите на вкладку Подробности.
5. Найдите процесс vmwp.exe, в столбце Имя пользователя которого указан GUID вашей ВМ.
6. Щелкните правой кнопкой мыши по процессу и выберите Завершить задачу.
Метод 3. Завершение процесса ВМ через Process Explorer
Process Explorer — утилита от Microsoft Sysinternals, упрощающая поиск процессов, связанных с ВМ.
1. Запустите Process Explorer с правами администратора.
2. Нажмите Ctrl + F или выберите Find Handle or DLL.
3. Введите путь к файлу виртуального диска ВМ (например, C:\VMs\VMName.vhdx).
4. Найдите процесс vmwp.exe, связанный с этим файлом, и завершите его, щелкнув правой кнопкой мыши и выбрав Kill Process.
Метод 4. Завершение процесса ВМ через PowerShell
Использование PowerShell — наиболее быстрый и автоматизированный способ завершения зависшей ВМ.
1. Запустите PowerShell с правами администратора (учетная запись должна быть в группе Hyper-V Administrators).
2. Получите GUID зависшей ВМ по ее имени, например:
$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID
3. Или выведите список всех ВМ на хосте с их VMID:
Get-VM | Select VMName, VMId, Path
4. Найдите процесс vmwp.exe, связанный с GUID:
$VMWMProc = (Get-WmiObject Win32_Process | Where-Object {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})
5. Завершите процесс:
Stop-Process ($VMWMProc.ProcessId) -Force
После выполнения этих шагов ВМ будет принудительно остановлена.
Зависание ВМ при резервном копировании
Если ВМ зависла в статусе Backing up, это связано с проблемами в службе Microsoft Hyper-V VSS Writer.
1. Проверьте состояние VSS Writer, убедитесь что команда не вернула ошибку:
vssadmin list writers
2. Если служба работает некорректно, перезапустите Службу управления виртуальными машинами Hyper-V:
Get-Service vmms | Stop-Service
3. Убедитесь, что процесс vmms.exe завершен:
Get-Process | Where-Object { $_.ProcessName -eq 'vmms' } | Stop-Process
4. Запустите службу заново:
Start-Service vmms
Это сбросит состояние VSS Writer и восстановит нормальную работу ВМ.
Дополнительные проверки при ошибке «Failed to Change State»
Если после завершения процесса ВМ не запускается и выдает ошибку «Failed to Change State», выполните следующие действия:
1. Убедитесь, что на диске, где хранятся файлы ВМ, достаточно свободного места.
— Следующая команда выведет всю информацию о логических дисках компьютера:
Get-WmiObject -Class Win32_LogicalDisk
2. Проверьте доступность ISO-образа, если он подключен к ВМ.
3. Убедитесь, что виртуальный сетевой адаптер подключен к существующему виртуальному коммутатору. Ошибка «Network Adapter – Configuration Error» указывает на проблему с настройками сети.
4. Проверьте, что служба Диспетчер виртуальных машин (vmms) запущена и не находится в состоянии Stopping.
5. Добавьте каталог с файлами ВМ в исключения антивируса.
6. Просмотрите ошибки в Просмотре событий:
— Откройте Просмотр событий.
— Перейдите в Журналы приложений и служб -> Microsoft -> Windows -> Hyper-V-Worker.
7. Отключите спящий режим в гостевой ОС:
— Для Windows: Панель управления -> Электропитание -> Настройка схемы питания -> Перевести компьютер в спящий режим -> Никогда.
— Для Ubuntu Linux:
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Рекомендации по предотвращению зависаний ВМ
— Регулярно обновляйте Hyper-V и драйверы оборудования.
— Настройте мониторинг свободного места на дисках, где хранятся файлы ВМ.
— Используйте High Availability (HA) кластеры и Live Migration для минимизации простоев.
— Настройте исключения в антивирусе для каталогов ВМ.
— Проверяйте целостность конфигурационных файлов ВМ и VHDX.
Если ни один из методов не помог, перезагрузите хост Hyper-V, но это крайняя мера, так как она прервет работу всех ВМ.