Остановить зависшую виртуальную машину в VMware ESXi

Иногда сталкиваюсь с тем, что виртуальная машина на хосте VMWare ESXi зависает и не отвечает на команды перезагрузки или выключения из веб-интерфейса клиента vSphere. В этой статье разберемся как принудительно остановить зависшей виртуальную машину VMWare.

Если процесс виртуальной машины на сервере ESXi завис, она перестает реагировать на команды Reset/Power Off, и на любое действие выдает ошибку вида:

  • The attempted operation cannot 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 хост заблокировал ее файлы на хранилище.
  1. Сначала определите на каком ESXi хосте запущена зависшая виртуальная машина; vsphere client найти хост, на котором запущена ВМ
  2. Откройте vSphere Client, найдите ВМ. Имя хоста, на котором запущена ВМ, указано на вкладке Summary в секции Related Object -> Host ;
  3. Включите SSH доступ на этом ESXi хосте ;
  4. Подключитесь к ESXi с помощью SSH клиента (можно использовать встроенный ssh клиент Windows );
  5. Выведите спиcок запущенных ВМ: esxcli узнать id процесса виртуальной машины на vmware
    $ esxcli vm process list
  6. Скопируйте идентификатор нужной виртуальной машины (World ID);
  7. Чтобы принудительно завершить процесс виртуальной машины в 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

esxcli завершить процесс ВМ через kill

ВМ должна выключиться.

Можно использовать следующий однострочник для завершения ВМ:

$ esxcli vm process kill -t=soft -w=`esxcli vm process list | grep -A2 "hq-rds01" | grep World | awk '{print $3}'`

Можно отключить зависшую виртуальную машину с помощью PowerShell (это удобно, т.к. при подключении к vCenter вам не нужно искать хост, на котором запушена ВМ и включать SSH доступ). Подключитесь к vCenter с помощью PowerCLI и проверьте, что ВМ запущена:

get-vm 'web2' | select name,PowerStates

PowerCLI get-vm

Принудительно остановите процесс ВМ:

stop-vm -kill "web2" -confirm:$false

powercli stop-vm kill перезапуск виртуальной машины

Также вы можете остановить зависшую виртуальную машину с помощью консольной утилиты ESXTOP .

В SSH сессии введите команду esxtop , затем нажмите c для отображения ресурсов CPU и shift + V , чтобы отображать только процессы вириальных машин

esxtop список процессов

Затем нажмите f (выбрать отображаемы поля), c (отобразить поле LWID- Leader World Id) и нажмите Enter .

esxtop список виртуальных машин

Найдите вашу ВМ в списке и запомните ее LWID. Чтобы остановить процесс ВМ, нажмите k (kill) и наберите LWID идентфикатор ВМ, которую нужно выключить.

Последний способ жёсткого выключения виртуальной машины – воспользоваться утилитой kill . Такой способ позволит остановить не только ВМ, но и все дочерние процессы.

Получите ID родительского процесса ВМ:

ps | grep "hq-rds01"

Завершите процесс ВМ:

kill -9 527888

Принудительно выключить ВМ путем завершения ее процесса

После такого “hard reset”, установленная ОС запустится в режиме восстановления (в случае гостевой Windows, запустится среда Windows Recovery Environment ).

Windows Error Recovery

Если и это не помогло, попробуйте перезапустить управляющие службы hostd и vpxa на хосте ESXi:

$ /etc/init.d/hostd restart
$ /etc/init.d/vpxa restart

EnglishRussianUkrainian