Несколько раз на хостах VMware ESXi сталкивался с непонятными виртуальными машинами со статусом Invalid (Unknown). В статье рассмотрим, как выполнить диагностику и исправить invalid статус у виртуальных машин из командной строки VMware ESXi.
При попытке запустить ВМ со статусом Invalid появляется ошибка:
Could not power VM, no swap file, failed to power on VM.
VMControl error -11: No such virtual machine.
Также могут быть и другие ошибки:
Could not power VM, no swap file, failed to power on VM. A general system error occurred. The system returned on error. Communication with the virtual machine may have been interrupted.
В некоторых случаях ВМ может быть запущена, но отображать статус Invalid в консоли vSphere. При этом все опции управления в меню Actions виртуальной машины недоступны. Вы не можете удалить (Delete) такую, отменить регистрацию (Unregister) такой ВМ из веб-интерфейса vSphere Client, перезагружить ESXi хост или отмонтировать VMFS/NFS хранилище.
Чаще всего ВМ на хосте ESXi могут оказаться в invalid статусе после:
- Некорректного удаления ВМ (не через vCenter)
- После ошибок служб HA и DRS
- Аварийного отключения питания в серверной
- vCenter был перезагружен при миграции ВМ с помощью vMotion/DRS
- Недоступно VMFS хранилище с VMX файлом ВМ
- Ошибки в конфигурационном vmx файле ВМ
- Закончилось место в базе vCenter или VMFS хранилище
Перерегистрируйте или удалите Invalid ВМ в VMware ESXi
Вы можете исправить invalid статус у виртуальных машин из командной строки VMware ESXi.
- Найдите ESXi хост, на котором находится ваша ВМ и включить на нем SSH доступ (Configure -> Services -> SSH -Start);
- Подключитесь к ESXi хосту по SSH;
- Чтобы вывести все ВМ со статусом Invalid, выполните команду:
# vim-cmd vmsvc/getallvms | grep invalid
Эта команда вернет список зарегистрированных ВМ, если конфигурационный файл ВМ не доступен или содержит ошибки, команда вернет строки:Skipping invalid VM '14' Skipping invalid VM '24' Skipping invalid VM '53'
В данном случае есть проблемы с ВМ с VMID 14, 24, и 53.
- Выведите информацию о пути к VMX файлу любой из ВМ (например, для VMID 024) с помощью команды:
# grep 024 -A 2 /etc/vmware/hostd/vmInventory.xml
Путь к VMX файлу указан в секции vmxCfgPath, например<vmxCfgPath>/vmfs/volumes/4de28f5c-be54-11ed-afa1-0242ac120002/TESTVM1/TESTVM1.vmx</vmxCfgPath>В данном примере 4de28f5c-be54-11ed-afa1-0242ac120002 – UUID вашего хранилища, где находятся файлы ВМ. Проверьте, что этот путь (датастора) доступен с вашего хоста и размер VMX файла на диске не равен 0:# ls –lh /vmfs/volumes/4de28f5c-be54-11ed-afa1-0242ac120002/TESTVM1/
- Если VMX файл ВМ доступен попробуйте перезагрузить ее конфигурационный файл по VMID с помощью команды:
# vim-cmd vmsvc/reload 24
- Если это не помогло, перезапустите сервисы ESXi:
# /etc/init.d/hostd restart
# /etc/init.d/vpxa restartОбновите веб интерфейс vCenter. На несколько секунд у всех ВМ на хосте появится статус Disconnected, и после этого они вернутся в нормальное состояние.
В некоторых случаях помогает только перерегистрация ВМ на хосте ESXi. Для этого выполните команду:
# vim-cmd vmsvc/unregister 24
Теперь вы можете удалить файлы недействительной виртуальной машины с вашего датастора, если она вам не нужна. Или вы можете заново зарегистрировать ее VMX файл на хосте ESXi с помощью команды:
# vim-cmd solo/registervm "/vmfs/volumes/4de28f5c-be54-11ed-afa1-0242ac120002/TESTVM1/TESTVM1.vmx"
Отменить регистрацию ВМ на ESXi через vmInventory.xml
Если вы не смогли отменить регистрацию ВМ с помощью команды /vmsvc/unregister
, попробуйте открыть файл /etc/vmware/hostd/vmInventory.xml и удалить секцию с конфигурацией проблемной виртуальной машины вручную.
# cd /etc/vmware/hostd
# cp -p vmInventory.xml vmInventory.xml_bak
# vi /etc/vmware/hostd/vmInventory.xml
Удалите из XML файла секцию <ConfigEntry id=’00xx’> <objID>24</objID> … </ConfigEntry>.
Перезапустите агенты управления с помощью команды:
# service mgmt-vmware restart
или
# services.sh restart
После этого вы можете перерегистрировать ВМ с помощью команды:
vim-cmd solo/registervm your_vm_path.vmx
Если исходный VMX файл ВМ поврежден, создайте новую ВМ и подключите VMDK файлы с дисками от старой ВМ вручную.
1 comment
Спасибо, помог. В нашем случае отвалился NFS-сторадж (место кончилось в ноль).
После подключения его-же, UID стораджа получился уже другим (еще и подключаться не хотел — писал, что есть такой уже — удалил через ssh).
Подправил файл vmInventory.xml (заменил что-то типа c5b52f29-a4c26bff на что-то типа a4c26bff-c5b52f29) и перезапустил services.sh restart. Все получилось!