Дуже часто при видаленні снапшотов або консолідації дисків віртуальних машин на хостах VMWare ESXi, я стикаюся з помилкою “Не вдається отримати доступ до файлу, оскільки він заблокований“. Це задоволена часта проблема пов’язана з помилками в системі резервного копіювання ВМ (я зустрічав проблему в 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.

Не вдається отримати доступ до файлу, оскільки він заблокований - блокування vmdk або снапшота у vmware

Так само ви можете побачити таку помилку:

An error occurred while consolidating disks: msg.snapshot.error-DISKLOCKED.

Найчастіше помилка “Unable to access file since it is locked” з’являється:

  • Коли деякі файли включеної віртуальної машини містять мітки блокування іншими Хостал ESXi;
  • При додаванні віртуальних дисків в appliance резервного копіювання під час невдалих сесій створення бекапа;

Щоб знайти джерело блокування і зняти її, спочатку потрібно визначити заблоковані файли.

  1. За допомогою SSH клієнта підключіться до хосту ESXi, на якому зареєстрована проблемна ВМ;
  2. Перейдіть в каталог з файлами віртуальної машини: cd /vmfs/volumes/VMFS_DATASTORE_NAME/LOCKED_VM
  3. Знайдіть помилки консолідації, блокування файлів в журналі vmware.log: cat vmware.log | grep lock
  4. У балці повинні міститися приблизно такі помилки:
    VigorSnapshotManagerConsolidateCallback: snapshotErr = Failed to lock the file (5:4008)
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).
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: Cannot 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

    Не вдалося заблокувати файл у vmware.log

  5. У цьому прикладі видно, що заблокований файл msk-web01_1-000002.vmdk;
  6. За допомогою наступної команди можна вивести поточну ланцюжок снапшотов починаючи з зазначеного, до flat диска: vmkfstools -qv10 msk-web01_1-000002.vmdk
  7. Тепер виведемо інформацію про снапшотов, і його власника (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 <4, 532, 83>, gen 859, links 1, type reg, flags 0, uid 0, gid 0, mode 600

    vmkfstools -d vmdk - визначити сервер, який заблокував vmdk або delta файл

У рядку Власник RO вказано 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 хост по MAc адресою за допомогою powercli

Ім’я ESXi хоста буде вказано в полі VMHost.

Також ви можете вивести ARP таблицю прямо з хоста ESXi і отримати IP і MAC адреси всіх сусідніх серверів ESXi в мережі VMkernel:

esxcli network ip neighbor list

esxcli network ip neighbor - список сусідніх хостів vmware ip і mac адреси

Щоб зняти блокування з файлу ВМ просто перезавантажте знайдений ESXi хост (попередньо смігріруйте з нього все ВМ за допомогою VMotion). Якщо ви не можете перезавантажити хост, перезапустіть службу Management Agent (hostd) в Maintenance Mode з SSH консолі хоста:

services.sh restart

Після цього спробуйте виконати консолідацію або видалити снашот ВМ.

Помилка “Не вдається отримати доступ до файлу, оскільки він заблокований“Досить часто виникає в Резервне копіювання та тиражування Veeam при використанні проксі-сервера Veeam. Через помилки при резервному копіюванні Veeam може не відключити коректно диск віртуальної машини.

Щоб виправити проблему, відкрийте параметри ВМ, на якій встановлений проксі Veeam. Видаліть з обладнання ВМ диск ВМ, файли якої заблоковані.

Переконайтеся, що ви вибрали опцію “Remove from virtual machine”, а не “Remove from virtual machine and delete files from disk”. Інакше ви можете випадково видалити ваш vmdk диск.

Leave a Reply

Your email address will not be published. Required fields are marked *