Виртуальная машина Hyper-V зависла (Stopping / Starting) - Hard Kill
Архитектура процессов Hyper-V и симптомы зависания
В диспетчере Hyper-V виртуальная машина (ВМ) переходит в состояние Остановка... (Stopping), Запуск... (Starting) или Резервное копирование (Backing up) и зависает намертво. Проценты выполнения останавливаются. Кнопки "Выключить", "Завершить работу" и "Сброс" неактивны (засерены). Подключиться к консоли ВМ невозможно.
Причины блокировки (Deadlock)
Архитектура Hyper-V выделяет под каждую ВМ отдельный рабочий процесс vmwp.exe (Virtual Machine Worker Process). Этот процесс может "застрять", ожидая ответа от железа:
- Сбой резервного копирования (VSS): Агент Veeam или WSB запросил снимок (Snapshot), процесс заморозил ВМ, но СХД не ответила вовремя.
- Потеря диска (CSV/iSCSI): Сетевое хранилище моргнуло, и процесс
vmwp.exeзавис в ожидании I/O операций на диске VHDX. - Конфликт антивируса: Антивирус на хосте заблокировал файл VHDX для проверки.
Пошаговое дерево решений (Принудительное убийство)
Внимание! Перезагружать весь физический сервер Hyper-V не нужно! Достаточно "жестко" завершить (Hard Kill) процесс конкретной зависшей виртуалки.
Шаг 1: Узнаем GUID зависшей ВМ
Убить процесс по имени vmwp.exe в диспетчере задач нельзя — их там десятки, вы убьете чужую рабочую ВМ. Нам нужен идентификатор.
- Откройте PowerShell от имени Администратора на хосте Hyper-V.
- Выполните команду для получения идентификатора (Id):
Get-VM -Name "ИМЯ_ВАШЕЙ_ВМ" | Select-Object Name, Id - Скопируйте полученный GUID (Например:
1a2b3c4d-5e6f-7g8h-9i0j...).
Шаг 2: Поиск PID (Идентификатора процесса) и его уничтожение
Теперь найдем PID конкретного vmwp.exe, который обслуживает этот GUID.
# Ищем процесс по GUID и получаем его PID
$VM_GUID = "ВАШ_GUID"
$VM_Process = Get-WmiObject Win32_Process -Filter "Name='vmwp.exe'" | Where-Object {$_.CommandLine -match $VM_GUID}
$VM_Process | Select-Object ProcessId, CommandLineУбиваем зависший процесс командой taskkill (подставьте найденный PID):
taskkill /PID ВАШ_PID_НОМЕР /FСтатус ВМ в диспетчере мгновенно изменится на Выключена (Off) или Сохранена (Saved). Теперь ее можно включить штатно.
Типовые ошибки администраторов
- Убийство vmms.exe: Никогда не убивайте службу управления (vmms.exe). Это прервет управление всеми ВМ на хосте и сломает кластерные роли (Cluster Shared Volumes).
Траблшутинг VSS-провайдеров и гипервизоров — сложная инженерная задача. Возьмем хосты Hyper-V на 2-ю линию поддержки: настроим стабильные Application-Aware бэкапы Veeam, оптимизируем MPIO хранилища и исключим зависания.
Частые вопросы (FAQ)
Потеряются ли данные внутри ВМ при убийстве процесса vmwp.exe?
Да. Это эквивалентно физическому выдергиванию кабеля питания сервера из розетки (Crash-consistent). Все несохраненные данные в оперативной памяти (RAM) этой ВМ будут утеряны.
Что делать, если taskkill выдает 'Отказано в доступе' (Access Denied)?
Даже SYSTEM не может убить процесс, если поток ядра заблокирован на аппаратном уровне (Deadlock I/O). Это значит, что драйвер СХД завис намертво. Придется жестко перезагружать весь физический сервер Hyper-V.
ВМ зависла в статусе 'Удаление моментального снимка'. Убивать?
Опасно! При слиянии (Merge) снапшотов vmwp.exe активно пишет данные в родительский VHDX. Если вы убьете процесс в этот момент, виртуальный диск будет разрушен. Ждите окончания I/O операций.
Почему ВМ перешла в статус 'Saved' после убийства?
Если бэкап 'заморозил' ВМ (Saved State) перед крашем, убийство процесса оставит ее в этом состоянии. Просто нажмите правой кнопкой -> 'Удалить сохраненное состояние' (Delete saved state) и запустите ВМ.
Как предотвратить зависания при бэкапах Veeam?
Убедитесь, что на хосте установлены последние драйверы дискового контроллера, а в настройках Veeam включена опция 'Failover to standard backup' (отказ от аппаратных VSS-провайдеров).