Перейти к основному содержанию

VMware — unable to access file since it is locked

VMware

Иногда какой-нибудь хост ESXi может заблокировать виртуальную машину и "забыть" разблокировать. Причины бывают разные, но исправлять всё равно нам.

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

vmware

Virtual machine disks consolidation is needed

Запускаю консолидацию.

vmware

Подтверждаю. YES.

vmware

И получаю ошибку.

Unable to access file since it is locked

Не работает примус. Нужно попасть в консоль гипервизора. Для удобства запускаю SSH.

vmware

Авторизируюсь по SSH на гипервизоре с "больной" виртуалкой.

vmware

По опыту уже знаю что могло послужить причиной запроса консолидации, блокировки виртуальной машины и описываемой ошибки. Банальная нехватка места в директории /tmp. Уже были статьи про такую проблему, но в каждом конкретном случае результат переполнения /tmp вызывал разные ошибки. Примеры устранения проблемы есть здесь:

ESXi — 503 Service Unavailable

Ошибка "The ramdisk 'tmp' is full" на серверах HPE ProLiant с кастомным образом ESXi

Проверяем:

vdf

Действительно, диск переполнен.

vmware

Прежде чем разбираться с заблокированной виртуалкой следует почистить /tmp.

cd /tmp
ls -FlS

Всё место занял файл ams-bbUsg.txt. Это известная проблема. Ошибка в пакете HPE Agentless Management (AMS) версии 11.4.0:

Advisory: VMware - VMware AMS Data File Filling Up Tmp May Cause VUM Updates to Fail On HPE Servers Running VMware ESXi 6.0/6.5/6.7 with AMS Version 11.4.0

Сначала освободим место.

cd /tmp
rm ams-bbUsg.txt

Место появилось. Но причина не устранена. Пробую обновить пакет AMS.

esxcli software vib install -v "http://vibsdepot.hpe.com/hpe/may2019/esxi-600-vibs/ams/amsd-600.11.4.2-4.2494585.vib"

vmware

Причину проблемы устранили, правда, нужно будет запланировать перезагрузку гипервизора.

Теперь разберёмся с заблокированной виртуалкой. Нам нужно определить, который гипервизор эту виртуальную машину заблокировал и перезапустить на нём службы. Если виртуальная машина находится на локальном диске и доступ к ней имеет только один хост, то просто выполняем:

services.sh restart

Если же хостов может быть несколько, то переходим в каталог с файлами виртуальной машины и смотрим vmware.log:

cd /vmfs/volumes/имя_DATASTORE/виртуалка
cat vmware.log | grep lock

vmware

Нам нужно найти название заблокированного файла.

2021-02-25T07:48:06.947Z| vcpu-0| I125: ConsolidateItemCombine: Failed to open disk '/vmfs/volumes/5964b01b-b59d4f02-3fe6-1402ec8e9224/fs-office/fs-office-000001.vmdk' for consolidate: Failed to lock the file (5)
2021-02-25T07:48:06.983Z| vcpu-0| I125: ConsolidateItemComplete: Online consolidation failed for disk node 'scsi0:0': Failed to lock the file (5).

Заблокирован файл fs-office-000001.vmdk. Определим flat или delta файл.

vmkfstools -qv10 fs-office-000001.vmdk

vmfs

Получили путь к файлу delta.

/vmfs/volumes/5964b01b-b59d4f02-3fe6-1402ec8e9224/fs-office/fs-office-000001-delta.vmdk

Утилита vmfsfilelockinfo поможет определить хост. Утилиту можно запускать, зная файл VMDK flat, delta, esparse для VMFS или .UUID. lck для vSAN.

vmfsfilelockinfo -p /vmfs/volumes/5964b01b-b59d4f02-3fe6-1402ec8e9224/fs-office/fs-office-000001-delta.vmdk

vmware

Получаем MAC адрес хоста, который заблокировал виртуальную машину. По MAC адресу определяем хост. Можно вывести ARP таблицу и получить IP и MAC адреса всех соседних серверов ESXi:

esxcli network ip neighbor list

Я же просто пробегаюсь глазами по всем хостам в vCenter:

vmware

На найденном хосте выполняем:

services.sh restart

Блокировка с виртуальной машины снимается, теперь консолидация выполнится успешно.

 

Похожие материалы