Якщо ваша віртуальна машина, запущена на хості Hyper-V зависла з якихось причин, перестала відповідати, і не реагує на кнопки включення, виключення, перезавантаження в консолі Hyper-V, єдиний швидкий спосіб примусово зупинити таку машину - завершити процес цієї ВМ в хостовой ОС. Покажемо, як примусово перезавантажити ВМ в Hyper-V на Windows Server 2016/2019 без перезавантаження всього сервера і запущених ВМ (якщо у вас немає HA кластера Hyper-V і Live-Migration).
зміст:
- Віртуальна машина Hyper-V зависла в статусі Stopping, Starting
- Помилка Hyper-V: Connecting to Virtual Machine Management service
- Завершення процесу зависла ВМ за допомогою Task Manager
- Скинути зависла ВМ на Hyper-V VM за допомогою PowerShell
- Hyper-V: Чи не вдалося змінити стан віртуальної машини
Віртуальна машина Hyper-V зависла в статусі Stopping, Starting
Отже, припустимо, що одна з ВМ на Hyper-V зависла в стані Stopping (Stopping-Critical) / Starting (Starting 10%).
Гостьова ОС перестала відповідати, а кнопки "Turn Off", "Shut Down" і "Reset" в консолі Hyper-V Manager стали недоступні або при натисканні повертають помилку:
Отже, припустимо, що одна з ВМ на Hyper-V зависла, гостьова ОС перестала відповідати, а кнопки «Turn Off», «Shut Down» і «Reset» в консолі Hyper-V Manager стали недоступні або при натисканні повертають помилку:
Failed to change state The operation can not be performed while the object is in its current state
Помилка Hyper-V: Connecting to Virtual Machine Management service
Якщо ваш Hyper-V не відображує віртуальні машини в консолі Hyper-V Manager, повертаючи помилку «Connecting to Virtual Machine Management service«, Вам потрібно перезапустити процес vmms.exe (Hyper-V Virtual Machine Management service). Це безпечна операція і не перерве роботу запушених віртуальних машин. Найпростіше перезапустити процес vmms.exe через службу vmms і через консоль services.msc
або командою:
Get-Service vmms | Restart-Service
Завершення процесу зависла ВМ за допомогою Task Manager
Єдиний спосіб примусово вимкнути / перезапустити таку зависла віртуальну машину без перезавантаження всього хостового сервера Hyper-V - завершити її робочий процес на гостьовий ОС. Все ВМ на хості Hyper-V запускаються за допомогою процесу vmwp.exe (Virtual Machine Worker Process). Для пошуку процесу потрібно дізнатися GUID віртуальної машини.
Визначити GUID ВМ можна через консоль управління Hyper-V Manager. Відкрийте настройки сервера (Hyper-V Settings). У розділі Server зазначено каталог, в якому зберігаються конфігураційні файлів ВМ (в нашому прикладі D: \ VMStore).
Відкрийте цей каталог в File Explorer і знайдіть каталог з ім'ям зависла віртуальної машини. Скопіюйте GUID, який вказаний в імені конфігураційного файлу ВМ з розширенням * .vmcx.
Тепер потрібно запустити диспетчер задач (Task Manager) І перейти на вкладку Details. Всі віртуальні машини запускаються в рамках власного примірника процесу vmwp.exe. Щоб визначити який процес за яку ВМ відповідає, нам потрібен отриманий раніше GUID зависла ВМ. Знайдіть процес vmwp.exe, у якого в стовпці User name вказано GUID вашої ВМ. Завершіть цей процес (End Task).
Віртуальна машина буде примусово зупинено. Тепер ви зможете робити з нею все що завгодно.
Скинути зависла ВМ на Hyper-V VM за допомогою PowerShell
Набагато простіше знайти і завершити процес зависла віртуальної машини за допомогою PowerShell. Запустіть консоль PowerShell з правами адміністратора (обліковий запис повинен складатися в локальній групі Hyper-V administrators).
В цьому випадку вбудований командлет Stop-VM не дозволить вам вимкнути ВМ. Якщо спробувати виконати командуStop-VM -Force
, вона також зависає. Очевидно очікує відповіді від ВМ.У цьому випадку також потрібно завершити процес ВМ по її ID. Можна отримати GUID ВМ з по її імені. Наприклад, для ВМ з ім'ям SVM-GUARDEDHOST1, виконайте команду:
$ VMGUID = (Get-VM "SVM-GUARDEDHOST1"). ID
Якщо ви не хочете набирати повне ім'я ВМ, можете вивести список всіх ВМ, зареєстрованих на даному хості Hyper-V:
Get-VM | Select Name, Id
Скопіюйте GUID потрібної ВМ з отриманого списку.
Тепер потрібно знайди ідентифікатор процесу (PID) 'vmwp.exe' для вашого VMGUID:
$ VMWMProc = (Get-WmiObject Win32_Process |? $ _. Name -match 'VMWP' -and $ _. CommandLine -match $ VMGUID)
Потім за допомогою команди Stop-Process потрібно примусово завершити цей процес:
Stop-Process ($ VMWMProc.ProcessId) -Force
Ось так нескладно можна примусово завершити робочий процес підвішеному віртуальної машини Hyper-V.
Порада. У нас також описана аналогічна процедура по завершенню процесу зависла ВМ на хості VMWare ESXi.Hyper-V: Чи не вдалося змінити стан віртуальної машини
Іноді буває, що навіть після завершення завислого процесу ви не можете включити ВМ і вона зависає в статусі Starting з помилкою:
Virtual Machine Connection Неможливо змінити стан. Failed to Change State.
В цьому випадку перевірте наступні варіанти:
- Перевірте що на диску, на якому зберігаються файли ВМ досить вільного місця;
- Якщо в налаштуваннях ВМ підключений ISO образ, перевірте його доступність;
- Перевірте мережеві настройки ВМ. Віртуальні мережеві адаптери повинні бути підключені до існуючого віртуального комутатора Hyper-V (не повинно бути статусу Network Adapter - Configuration Error);
- Перевірте, що служба Hyper-V Virtual Management Service (VMMS) запущено, і не зависла в статусі Stopping;
- Переконайтеся, що ваш антивірус не блокує доступ до файлів ВМ. Додайте шляху до каталогу ВМ в виключення антивіруса (див. Як додати виключення у вбудований антивірус Windows Server 2016 - Windows Defender);
- Перевірте помилки в журналі подій Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> Hyper-V-Worker.