Администраторы виртуальной инфраструктуры VMware vSphere время от времени сталкиваются с проблемой завершения зависших виртуальных машин. Если в клиенте vSphere Client сделать этого не удаются, приходится заходить в сервисную консоль ESXi или в командную строку PowerCLI/PowerShell и проводить там операции по завершению процесса этой ВМ. Сегодня мы расскажем о 5 способах, которыми это можно сделать.
1. С использованием PowerCLI
Stop-VM - это командлет, используемый для завершения работы виртуальной машины. На самом деле он используется для выключения ВМ, но добавление параметра kill приведет к завершению соответствующих процессов ВМ на ESXi, фактически уничтожая ее. Делается это так:
Stop-VM -kill <отображаемое имя ВМ> -Confirm:$false
2. С использованием esxcli
Esxcli - это интерфейс командной строки (CLI), который предоставляет доступ к ряду пространств имен, таких как vm, vsan, network и software, позволяя выполнять задачи, изменять настройки и так далее. Таким образом, если вам нужно завершить работу неотвечающей виртуальной машины с использованием esxcli, можно действовать следующим образом:
Получить список виртуальных машин, размещенных на ESXi:
esxcli vm process list
Красным выделен идентификатор World ID виртуальной машины.
Скопируйте значение World ID и выполните команду:
esxcli vm process kill --type=soft -w=796791
Команда не выдает никакой обратной связи, кроме случаев, когда она не сможет найти виртуальную машину или вы укажете неверный параметр.
Параметр type принимает три значения:
Soft – позволяет процессу VMX завершиться корректно, аналогично команде kill -SIGTERM
Hard – немедленно завершает процесс VMX, аналогично команде kill -9 или kill -SIGKILL
Force – останавливает процесс VMX, когда не работают варианты Soft или Hard
3. С использованием утилиты vim-cmd
Vim-cmd - это еще одна утилита командной строки, очень похожая на esxcli, но с несколько иным синтаксисом. Также она может использоваться для управления ВМ и другими ресурсами. Соответственно, вот как используется vim-cmd для завершения работы ВМ:
1. Выведите все ВМ на текущем подключенном хосте ESXi и запишите vmid (первый столбец) неотвечающей ВМ:
vim-cmd vmsvc/getallvms
2. Получите состояние питания ВМ, используя ее vmid. Этот шаг необязателен, так как вы уже знаете, что с ВМ что-то не так:
vim-cmd vmsvc/power.getstate 36
3. Сначала попробуйте вариант power.shutdown:
vim-cmd vmsvc/power.shutdown 36
4. Если по какой-то причине ВМ не удается выключить, попробуйте использовать вместо этого power.off:
vim-cmd vmsvc/power.off 36
Следующий скриншот демонстрирует пример использования указанных выше команд для завершения работы ВМ.
4. С использованием esxtop
Esxtop - это отличная утилита, которая предоставляет информацию о том, как ESXi использует системные ресурсы. Она может использоваться для устранения неполадок, сбора статистики производительности и многого другого.
Вот как это делается:
Нажмите Shift+v, чтобы изменить представление на виртуальные машины:
Нажмите <f>, чтобы отобразить список полей, затем нажмите <c>. Это добавит столбец с идентификатором Leader World ID (LWID) в представление. Нажмите любую клавишу, чтобы вернуться в главное меню.
Найдите зависшую виртуальную машину в столбце Name и запишите ее LWID.
Нажмите k и введите значение LWID в строке запроса World to kill (WID). Нажмите Enter:
Чтобы быть полностью уверенным, подождите 30 секунд перед тем, как проверить, что виртуальная машина больше не отображается в списке. Если она все еще там, попробуйте снова. В случае неудачи, скорее всего, вам придется перезагрузить хост ESXi.
5. С помощью традиционной команды kill
Это самый грубый метод завершения работы виртуальной машины. Но он документирован на сайте VMware, хотя и немного по-другому. Виртуальная машина представляет собой серию процессов, выполняемых на ESXi. Используя команду ps ниже, можно вывести процессы, связанные, например, с виртуальной машиной под названием Web Server.
ps | grep "Web Server"
Если вы внимательно посмотрите, вы увидите, что значение во втором столбце одинаково для всех процессов. Это значение идентификатора VMX Cartel, которое, хотя и отличается от значения World ID, все же может быть использовано для завершения работы виртуальной машины следующим образом:
kill 797300
Если процессы продолжают работать, попробуйте kill -9 <идентификатор процесса>: