VMWare ESXi Перезапуск зависла віртуальної машини

Іноді стикаюся з тим, що певна віртуальна машина на хості 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 - найжорсткіший режим завершення процесу, повинен використовуватися в останню чергу, якщо нічого іншого не допомагає.
Переконайтеся, що для ВМ немає активних завдань зі створення снапшотов, бекапов, і подібних операцій, а у ВМ немає статусу Virtual Machine disks consolidation is needed. Інакше ви можете зламати свою ВМ і її доведеться восставлівать з резервної копії.

Спробуємо м'яко зупинити ВМ із зазначеним 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, скрін буде виглядати так.