Очень часто при удалении снапшотов или консолидации дисков виртуальных машин на хостах VMWare ESXi, я сталкиваюсь с ошибкой “ Unable to access a file since it is locked ”. Это довольна частая проблема связана с ошибками в системе резервного копирования ВМ (я встречал проблему в Veeam, HP Data Protector, Veritas). Блокировка виртуального диска снапшота виртуальной машины не позволит вам выполнить консолидацию (Virtual machine disks consolidation is needed), Storage vMotion на другой дисковый массив, выполнить резервное копирование или удалить текущий снапшот. Иногда виртуальную машины с блокировками нельзя даже элементарно включить.
Ошибка с доступом к заблокированному файлу виртуального диска или снапшот в VMWare может выглядеть так:
Unable to access file since it is locked._x000D_An error occurred while consolidating disks: One or more disks are busy.
Так же вы можете увидеть такую ошибку:
An error occurred while consolidating disks: msg.snapshot.error-DISKLOCKED.
Чаще всего ошибка “Unable to access file since it is locked” появляется:
- Когда некоторые файлы включенной виртуальной машины содержат метки блокировки другими хостаим ESXi;
- При добавлении виртуальных дисков в appliance резервного копирования во время неудачных сессий создания бэкапа;
Чтобы найти источник блокировки и снять ее, сначала нужно определить заблокированные файлы.
- С помощью SSH клиента подключитесь к хосту ESXi, на котором зарегистрирована проблемная ВМ;
- Перейдите в каталог с файлами виртуальной машины:
cd /vmfs/volumes/VMFS_DATASTORE_NAME/LOCKED_VM
- Найдите ошибки консолидации, блокировки файлов в журнале vmware.log:
cat vmware.log | grep lock
- В логе должны содержаться примерно такие ошибки:
VigorSnapshotManagerConsolidateCallback: snapshotErr = Failed to lock the file (5:4008)_x000D_2020-01-13T05:07:11.432Z| vmx| I125: DISK: Cannot open disk "/vmfs/volumes/5121c3ff-230b21a-41aa-21d92b219221/msk-web01/msk-web01_1-000002.vmdk": Failed to lock the file (16392)._x000D_2020-01-13T05:07:11.432Z| Worker#1| I125: DISKLIB-LIB : Failed to open '/vmfs/volumes/5121c3ff-230b21a-41aa-21d92b219221/msk-web01/msk-web01-000002.vmdk' with flags 0xa Failed to lock the file (16392)._x000D_2020-01-13T05:07:11.432Z| Worker#1| I125: DISK: Cannot open disk "/vmfs/volumes/5121c3ff-230b21a-41aa-21d92b219221/msk-web01/msk-web01-000002.vmdk": Failed to lock the file (16392)._x000D_2020-01-13T05:07:11.432Z| vmx| I125: [msg.fileio.lock] Failed to lock the file_x000D_
- В этом примере видно, что заблокирован файл
msk-web01_1-000002.vmdk
; - С помощью следующей команды можно вывести текущую цепочку снапшотов начиная с указанного, до flat диска:
vmkfstools -qv10 msk-web01_1-000002.vmdk
- Теперь выведем информацию о снапшоте, и его владельце (RO owner):
vmkfstools -D msk-web01-000001-delta.vmdk
Lock [type 10c000021 offset 242835456 v 856, hb offset 3153920_x000D_gen 3, mode 1, owner 5cbac61a-4b6e32b7-0480-d06726ae7900 mtime 5199410_x000D_num 0 gblnum 0 gblgen 0 gblbrk 0]_x000D_RO Owner[0] HB Offset 3153920 5cbac61a-4b6e32b7-0480-d06726ae7900_x000D_Addr <4, 532, 83>, gen 859, links 1, type reg, flags 0, uid 0, gid 0, mode 600
В строке RO Owner указан MAC адрес сетевой карты хоста ESXi, который заблокировал данный файл снапшота (MAC адрес выделен на скриншоте). Также обратите внимание на значение Mode:
- mode 1 – блокировка на чтение/запись (например, у включенной ВМ);
- mode 2 – обычно означает, что диск заблокирован приложением резервного копирования.
Чтобы по известному MAC адресу найти ESXi сервер, можно воспользоваться следующими командами в PowerCLI (преобразуйте полученный ранее MAC адрес в формат с двоеточиями):
Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue
connect-viserver vcenter1
Get-VMHost | Get-VMHostNetworkAdapter | Where-Object {$_.Mac -like "d0:67:26:ae:79:00"} | Format-List -Property *
Имя ESXi хоста будет указано в поле VMHost .
Также вы можете вывести ARP таблицу прямо с хоста ESXi и получить IP и MAC адреса всех соседних серверов ESXi в сети VMkernel:
esxcli network ip neighbor list
Чтобы снять блокировку с файла ВМ просто перезагрузите найденный ESXi хост (предварительно смигрируйте с него все ВМ с помощью VMotion ). Если вы не можете перезагрузить хост, перезапустите службу Management Agent (hostd) в Maintenance Mode из SSH консоли хоста:
services.sh restart
После этого попробуйте выполнить консолидацию или удалить снашот ВМ.
Чтобы исправить проблему, откройте параметры ВМ, на которой установлен прокси Veeam. Удалите из оборудования ВМ диск ВМ, файлы которой заблокированы.
Убедитесь, что вы выбрали опцию “Remove from virtual machine”, а не “Remove from virtual machine and delete files from disk”. Иначе вы можете случайно удалить ваш vmdk диск.