locate
108
06.07.2021

ESXI ошибка: The virtual machine inventory file is damaged or unreadeble. Как исправить.

Исправляем ошибку: The virtual machine inventory file is damaged or unreadeble

В один прекрасный день я открыл vSphere и к моему удивлению в инвентаре не было ни одной виртуальной машины, хотя они были доступны и к ним без проблем подключались пользователи. А в vSphere нет ни одной виртуальной машины:

vSphere - Configuration Issues: The virtual machine inventory file is damaged or unreadable

The virtual machine inventory file is damaged or unreadeble

Следуя пути эникея - я первым делом перезапустил ESXi, но это ни к чему не привело. Тут я уже начал волноваться. Волноваться и гуглить проблему. Выяснилось вот что:

Эта ошибка возникает в результате того, что файл vmInventory.xml перемещен или повреждён. Сам файл расположен по адресу /etc/vmware/hostd. Для решения проблемы нам нужно подключиться к ESXi через SSH. После подключения переходим в соответствующую директорию на сервере:

cd /etc/vmware/hostd
Находим файл vmInventory.xml через SSH

И перед всеми манипуляциями делаем резервную копию файла vmInventory.xml. Так, на всякий случай.

mv vmInventory.xml vmInventory.xml.old

Теперь, для того чтобы сервер сформировал новый файл нам нужно перезапустить агентов следующей командой:

/sbin/services.sh restart

Заходим в vSphere и видим список всех виртуальных машин. Готово.

Если способ выше не помог

Если магии не случилось, то открываем резервную копию файла и видим там примерно такое содержимое:

<ConfigRoot>
  <ConfigEntry id="0000">
    <objID>2</objID>
    <vmxCfgPath>/vmfs/volumes/608a0cf3-0ecf2d53-3a20-222590f9c76c/SQL/SQL.vmx</vmxCfgPath>
  </ConfigEntry>
  <ConfigEntry id="0001">
    <objID>3</objID>
    <vmxCfgPath>/vmfs/volumes/608a0cf3-0ecf2d53-3a20-222590f9c76c/SC/SC.vmx</vmxCfgPath>
  </ConfigEntry>
  <ConfigEntry id="0003">
    <objID>5</objID>
    <vmxCfgPath>/vmfs/volumes/608a0cf3-0ecf2d53-3a20-222590f9c76c/1C/1C.vmx</vmxCfgPath>
  </ConfigEntry>
</ConfigRoot>

В файле указан путь до файла виртуалке с расширением .VMX. В одном из случаев пути были прописаны некорректно. Просто укажите корректный путь до файла VMX и сохраните файл под именем vmInventory.xml. Теперь можете запустить vSphere. Готово!

Потерялся закрывающий тег </ConfigEntry>

...

  <ConfigEntry id="0013">
    <objID>39</objID>
    <vmxCfgPath>/vmfs/volumes/56b6ac48-411cb153-cfd8-002590f30fc6/WindowsServer2016/WindowsServer2016.vmx</vmxCfgPath>
</ConfigRoot>

В файле не было закрывающего тега </ConfigEntry>. Уж не знаю как он в файле потерялся, но из-за его отсутствия инвентарь упорно не хотел отображаться в vSphere.

...

  <ConfigEntry id="0013">
    <objID>39</objID>
    <vmxCfgPath>/vmfs/volumes/56b6ac48-411cb153-cfd8-002590f30fc6/WindowsServer2016/WindowsServer2016.vmx</vmxCfgPath>
  </ConfigEntry>
</ConfigRoot>

Добавление через GUI vSphere

Ещё как альтернативный способ - добавить всё вручную через GUI vSphere. Открываем Configuration потом заходим в Storage, далее правой кнопкой по диску, на котором лежит нужная нам виртуалка Browse Datastore.... Ищем файл виртуалки с расширением .VMX и добавляем его вручную через правую кнопку мыши и Add to inventory. Всё, готово! :)