Іноді стикаюся з тим, що певна віртуальна машина на хості VMWare ESXi зависає і її не можна жодним засобами вимкнути або перезавантажити з веб-інтерфейсу клієнта vSphere. Перезавантажувати цілком ESXi сервер через однієї віртуальної машини - не зовсім доцільно (особливо, якщо у вас всього один ESXi хост, або залишилися сервера в DRS кластері не потягнуть додаткового навантаження у вигляді віртуальних машин з перезавантажувати сервера). Розглянемо основні способи примусової зупинки зависла віртуальної машини в VMWare ESXi.
Якщо процес віртуальної машини на сервері ESXi завис, вона перестає реагувати на команди Reset / Power Off, і на будь-яку дію видає одну з помилок:
The attempted operation can not be performed in the current state
;Another task is already in progress
;The virtual machine might be performing concurrent operations. Actions: Complete the concurrent operation and retry the power-off operation. The virtual machine is in an invalid state
.
У таких випадках ви можете вручну зупинити процес віртуальної машини на хості ESXi з командного рядка ESXi Shell або PowerCLI.
Спочатку визначте на якому ESXi хості запушена зависла віртуальна машина. Для цього в інтерфейсі vSphere Client знайдіть ВМ. Ім'я хоста, на якому вона запущена, зазначено на вкладці Summary в секції Related Object -> Host.
Клацніть на ім'я хоста ESXi. Вам потрібно дозволити доступ до нього по протоколу SSH. перейдіть в Configure -> Services -> SSH -> Start.
Тепер ви можете підключитися до цього ESXi хосту через SSH за допомогою клієнта putty.
Виведемо список ВМ, запушених на хості ESXi:
esxcli vm process list
Скопіюйте ідентифікатор потрібної віртуальної машини (World ID).
Щоб завершити процес зависла віртуальної машінина хості ESXi використовується наступна команда:
esxcli vm process kill --type = [soft, hard, force] --world-id = WorldNumber
Як ви бачите, є три типи завершення процесу ВМ:
- Soft - найбезпечніший спосіб завершити VMX процес (схожий на kill -SIGTERM);
- Hard - негайне завершення процесу ВМ (kill -9);
- Force - найжорсткіший режим завершення процесу, повинен використовуватися в останню чергу, якщо нічого іншого не допомагає.
Спробуємо м'яко зупинити ВМ із зазначеним ID:
esxcli vm process kill --type = soft -w = 25089429
ВМ повинна вимкнутися.
Ви можете зупинити зависла віртуальну машину за допомогою PowerCLI (це зручно, тому що при підключенні до vCenter вам не потрібно шукати хост, на якому запущено ВМ і включати SSH доступ). Перевіримо, що ВМ запущено:
get-vm "web2" | select name, PowerStates
Примусово зупиніть процес ВМ командою:
stop-vm -kill "web2" -confirm: $ false
Також ви можете зупинити зависла віртуальну машину за допомогою утиліти ESXTOP.
У SSH сесіїї введіть команду esxtop, потім натисніть "c"Для відображення ресурсів CPU і shift + V, щоб відображати тільки процеси віриалів машин
Потім натисніть "f"(Вибрати отображаемость поля),"c"(Відобразити поле LWID- Leader World Id) і натисніть Enter.
У стовпці Name знайдіть віртуальну машину, яку потрібно зупинити, і визначте номер її LWID за відповідним стовпцем.
Потім залишилося натиснути кнопку "k"(Kill) і набрати LWID ідентфікатор тієї віртуальної машини, яку потрібно примусово вимкнути.
Останній спосіб жорсткого виключення віртуальної машини - скористатися утилітою kill. Такий спосіб дозволить зупинити не тільки ВМ, а й всі дочірні процеси.
Отримаємо ID батьківського процесу ВМ:
ps | grep "web2"
Завершіть процес:
kill -9 24288474
Після такого "hard reset", встановлена ОС запуститься в режимі відновлення. У разі гостьовий Windows, скрін буде виглядати так.