Дуже часто при видаленні снапшотов або консолідації дисків віртуальних машин на хостах 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. 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) 2020-01-13T05: 07: 11.432Z | vmx | I125: DISK: Can not open disk "/vmfs/volumes/5121c3ff-230b21a-41aa-21d92b219221/msk-web01/msk-web01_1-000002.vmdk": Failed to lock the file (16392). 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). 2020-01-13T05: 07: 11.432Z | Worker # 1 | I125: DISK: Can not open disk "/vmfs/volumes/5121c3ff-230b21a-41aa-21d92b219221/msk-web01/msk-web01-000002.vmdk": Failed to lock the file (16392). 2020-01-13T05: 07: 11.432Z | vmx | I125: [msg.fileio.lock] Failed to lock the file
- У цьому прикладі видно, що заблокований файл
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 gen 3, mode 1, owner 5cbac61a-4b6e32b7-0480-d06726ae7900 mtime 5199410 num 0 gblnum 0 gblgen 0 gblbrk 0] RO Owner [0] HB Offset 3153920 5cbac61a-4b6e32b7-0480-d06726ae7900 Addr, 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
Після цього спробуйте виконати консолідацію або видалити снашот ВМ.
Помилка "Unable to access file since it is locked"Досить часто виникає в Veeam Backup & Replication при використанні проксі-сервера Veeam. Через помилки при резервному копіюванні Veeam може не відключити коректно диск віртуальної машини.Щоб виправити проблему, відкрийте параметри ВМ, на якій встановлений проксі Veeam. Видаліть з обладнання ВМ диск ВМ, файли якої заблоковані.
Переконайтеся, що ви вибрали опцію "Remove from virtual machine", а не "Remove from virtual machine and delete files from disk". Інакше ви можете випадково видалити ваш vmdk диск.