Виртуальная машина Hyper-V застряла в состоянии остановки/запуска

Если ваша виртуальная машина, работающая под управлением 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 застряла в состоянии Остановка (Остановка критическая), Начало (Начало 10 %), или Резервное копирование государство.

hyper-v vm застрял в состоянии остановкиhyper-v vm застрял в состоянии остановки

В этом случае гостевая ОС перестает отвечать на запросы, а кнопки «Выключить», «Завершить работу» и «Сбросить» в диспетчере 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

posh: restart-service vmmsposh: restart-service vmms

Как остановить/убить зависшую виртуальную машину на Hyper-V?

Единственный способ принудительно выключить/перезапустить такую застрявшую ВМ без перезагрузки всего хоста Hyper-V — это убить ее рабочий процесс в ОС хоста. Все виртуальные машины на хосте Hyper-V запускаются с помощью команды vmwp.exe экземпляры процессов (Рабочий процесс виртуальной машины). Чтобы найти PID конкретного процесса, необходимо узнать GUID виртуальной машины.

Получить GUID виртуальной машины можно с помощью функции Hyper-V Менеджер консоль. Откройте настройки сервера Hyper-V. На странице Сервер раздел содержит каталог, в котором хранятся файлы конфигурации ВМ (в нашем случае это D:\VMStore).

Настройки Hyper-VПараметры Hyper-V

Откройте этот каталог в File Explorer и найдите папку с именем вашей застрявшей виртуальной машины. Скопируйте GUID, указанный в имени файла конфигурации виртуальной машины, с помощью команды *.vmcx расширением.

vm guid в имени файлаvm guid в имени файла

Запустите программу Задание Менеджер и перейдите в раздел Подробности вкладка. Все виртуальные машины работают под управлением собственного экземпляра vmwp.exe процесс. Чтобы определить, какой процесс отвечает за вашу ВМ, вам понадобится GUID зависшей ВМ, который вы получили ранее. Найдите процесс vmwp.exe, имеющий GUID вашей ВМ в папке Пользователь имя столбец. Убейте этот процесс VM (Завершить задачу).

убить зависший vm на hyper-v с помощью диспетчера задачубить зависший vm на hyper-v с помощью диспетчера задач

Аналогичным образом можно найти и остановить зависший процесс виртуальной машины на хосте Hyper-V, используя Process Explorer инструмент.

  1. Запустите Process Explorer от имени администратора и нажмите Найти дескриптор или DLL (или нажмите Ctrl-F);
  2. Укажите путь к виртуальному диску (*.vhdx) виртуальной машины Hyper-V, которая застряла в состоянии запуска/остановки;
  3. Process Explorer выведет список всех процессов, использующих VHDX-файл виртуальной машины;
  4. Найдите vmwp.exe процесс виртуальной машины и убейте его (Правая кнопка мыши -> Kill Process).убить рабочий процесс vmwp.exe hyper-v vm с помощью proc explorerkill vmwp.exe hyper-v vm worker process with proc explorer
    Ранее мы показали вам, как использовать Process Explorer для поиска и разблокировки файлов, заблокированных другими процессами.

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

Принудительная остановка виртуальной машины Hyper-V с помощью PowerShell

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

В этом случае можно воспользоваться встроенным Stop-VM Команда из модуля Hyper-V PowerShell не позволит вам выключить ВМ. Если вы попытаетесь выполнить команду Stop-VM -Force, она также зависает. Очевидно, ожидая ответа от виртуальной машины.

Вам нужно убить процесс VM по его GUID. Вы можете получить GUID ВМ по ее имени. Например, чтобы получить GUID ВМ с именем SVM-GUARDEDHOST1, выполните команду:

$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID

Если вы не хотите вводить полное имя ВМ, вы можете перечислить все ВМ, зарегистрированные на этом хосте Hyper-V, и их идентификатор:

Get-VM | Select VMName, VMId, path

получить vmid с помощью powershellполучить vmid с помощью powershell

Скопируйте свой 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 с помощью PowershellУбийство зависающей виртуальной машины в Hyper-V с помощью Powershell

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

Hyper-V VM застряла в состоянии резервного копирования

При резервном копировании ВМ на хосте Hyper-V может возникнуть ситуация, когда ВМ Hyper-V застревает в состоянии Запуск состояние с Резервное копирование состояние. Однако остановить или запустить ВМ через Hyper-V Manager нельзя.

hyper-v vm замерзает при резервном копировании запущенного состоянияhyper-v vm freez in backing up running state

Если вы не хотите перезагружать хост 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ошибка конфигурации сетевого адаптера 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *