VMware ESXi होस्ट पर चल रही वर्चुअल मशीनों के स्नैपशॉट हटाते या डिस्क कंसोलिडेट करते समय, मुझे अक्सर "Unable to access a file since it is locked" त्रुटि दिखाई देती है। यह लगातार समस्या VM बैकअप सॉफ्टवेयर में त्रुटियों से संबंधित है (मैंने Veeam, HPE/Micro Focus Data Protector, Veritas में इस समस्या का सामना किया है)। यदि वर्चुअल डिस्क का स्नैपशॉट लॉक है, तो आप डिस्क को कंसोलिडेट नहीं कर पाएंगे (जब आप त्रुटि 'Virtual machine disks consolidation is needed' देखते हैं), स्टोरेज vMotion का उपयोग करके डिस्क को दूसरे डेटास्टोर पर ले जाएं, VM का बैकअप लें या वर्तमान स्नैपशॉट हटाएं। कभी-कभी आप लॉक्ड वर्चुअल मशीन को चालू भी नहीं कर सकते।
लॉक्ड वर्चुअल डिस्क फाइल या 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 होस्ट द्वारा लॉक हैं;
- जब वर्चुअल डिस्क बैकअप एप्लायंस में जोड़े जाते हैं और बैकअप सत्र विफल हो जाता है।
लॉक का स्रोत ढूंढने और उसे रिलीज करने के लिए, आपको पहले लॉक्ड फाइलों की पहचान करनी होगी।
- SSH क्लाइंट का उपयोग करके, उस ESXi होस्ट से कनेक्ट करें जिस पर समस्या वाली VM रजिस्टर्ड है;
- वर्चुअल मशीन फाइलों वाली डायरेक्टरी में जाएं:
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-09-09T05:07:11.432Z| vmx| I125: DISK: Cannot open disk "/vmfs/volumes/5121c3ff-2303a3a-33bb-12345678221/mun-web01/mun-web01_1-000002.vmdk": Failed to lock the file (16392). 2020-09-09T05:07:11.432Z| Worker#1| I125: DISKLIB-LIB : Failed to open '/vmfs/volumes/5121c3ff-2303a3a-33bb-12345678221/mun-web01/mun-web01-000002.vmdk' with flags 0xa Failed to lock the file (16392). 2020-09-09T05:07:11.432Z| Worker#1| I125: DISK: Cannot open disk "/vmfs/volumes/5121c3ff-2303a3a-33bb-12345678221/mun-web01/mun-web01-000002.vmdk": Failed to lock the file (16392). 2020-09-09T05:07:11.432Z| vmx| I125: [msg.fileio.lock] Failed to lock the file

- इस उदाहरण में, आप देख सकते हैं कि फाइल mun-web01_1-000002.vmdk लॉक है;
- निम्न कमांड का उपयोग करके, आप निर्दिष्ट स्नैपशॉट से शुरू होने वाली वर्तमान स्नैपशॉट चेन को फ्लैट डिस्क तक प्रदर्शित कर सकते हैं:
vmkfstools -qv10 mun-web01_1-000002.vmdk - फिर स्नैपशॉट और उसके मालिक (RO मालिक) के बारे में जानकारी प्राप्त करें:
vmkfstools -D mun-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

RO Owner लाइन उस ESXi होस्ट नेटवर्क एडाप्टर का MAC पता दिखाती है जिसने स्नैपशॉट फाइल को लॉक किया है (स्क्रीनशॉट पर MAC पता हाइलाइट किया गया है)। साथ ही Mode मान पर ध्यान दें:
- mode 1 – रीड/राइट लॉक (उदाहरण के लिए, चालू VM का);
- mode 2 – आमतौर पर इसका मतलब है कि वर्चुअल डिस्क बैकअप एप्लिकेशन द्वारा लॉक है।
यदि MAC पता ज्ञात है तो ESXi सर्वर ढूंढने के लिए, आप निम्न PowerCLI कमांड्स का उपयोग कर सकते हैं (पहले प्राप्त MAC पते को कोलन वाले फॉर्मेट में बदलें):
Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue
connect-viserver mun-vcenter
Get-VMHost | Get-VMHostNetworkAdapter | Where-Object {$_.Mac -like "d0:67:26:ae:79:00"} | Format-List -Property *

IP या MAC पते द्वारा VMware vCenter में VM खोजने के लिए समान समाधान जब आपको आवश्यकता हो।
ESXi होस्टनाम VMHost फ़ील्ड में दिखाया जाएगा।
आप ESXi होस्ट से सीधे ARP टेबल भी प्रदर्शित कर सकते हैं और VMkernel नेटवर्क में अन्य सभी ESXi सर्वरों के IP और MAC पते प्राप्त कर सकते हैं:
esxcli network ip neighbor list

VM फाइल को अनलॉक करने के लिए, बस आपके द्वारा पाए गए ESXi होस्ट को रीस्टार्ट करें (VMotion का उपयोग करके पहले इससे सभी VMs माइग्रेट करें)। यदि आप होस्ट को रीस्टार्ट नहीं कर सकते, तो मेंटेनेंस मोड में होस्ट के SSH कंसोल से मैनेजमेंट एजेंट (hostd) रीस्टार्ट करें:
services.sh restart
फिर डिस्क को फिर से कंसोलिडेट करने या VM स्नैपशॉट हटाने का प्रयास करें।
"Unable to access file since it is locked" त्रुटि अक्सर Veeam Backup & Replication में होती है जब Veeam प्रॉक्सी सर्वर का उपयोग किया जाता है। बैकअप त्रुटियों के कारण, Veeam वर्चुअल मशीन डिस्क को सही ढंग से अनमाउंट नहीं कर पाता।
समस्या ठीक करने के लिए, उस VM की सेटिंग्स खोलें जिस पर Veeam प्रॉक्सी इंस्टॉल है। उस VM के डिस्क को हटा दें जिसमें लॉक्ड फाइलें हैं।
सुनिश्चित करें कि आपने "Remove from virtual machine" चेक किया है न कि "Remove from virtual machine and delete files from disk" अन्यथा आप गलती से अपना vmdk डिस्क हटा सकते हैं।