Cannot delete file [datastore] VMname/VMname.vmdk

偶爾透過 vCenter 做 datastore migration 後,在原本的 datastore 裡面會有殘存的 vmdk 檔案,vCenter 無法移除,且直接 browse datastore 去刪除那個殘存的目錄(Delete from Disk),會出現「Cannot delete file [datastore] VMname/VMname.vmdk」的錯誤訊息……

cannot_delete_file_error

這個問題通常是某台 ESXi 將檔案 Lock 住了,要解決這個問題,先確定那台 ESXi Host Lock 這個檔案,再進入該 ESXi 刪除該檔案。

先開啟任意一台 ESXi 的 SSH 連線,進入 ESXi,進入該目錄,輸入指令:
~ # cd /vmfs/volumes/STORE_NAME/FOLDER_NAME/
/vmfs/volumes/53e2d423-7f80371c-3e57-0017a4000000/FOLDER_NAME # rm -rf *
rm: can’t remove ‘VMNAME.vmdk’: Input/output error

刪除一段時間後,會出現上述的錯誤訊息,這時看 Log 檔該檔案被誰 Lock 住了:
~ # cat /var/log/vmkernel.log

找出這幾行 Log:
YYYY-MM-DDThh:mm:ss.464Z cpu14:10642954)DLX: 3732: vol ‘STORE_NAME’, lock at 46585856: [Req mode 1] Checking liveness:
YYYY-MM-DDThh:mm:ss.464Z cpu14:10642954)[type 10c00002 offset 46585856 v 4, hb offset 3411968
gen 9, mode 1, owner 53c771f9-cf4694e4-209c-0017a4770018 mtime 840912
num 0 gblnum 0 gblgen 0 gblbrk 0]

其中 YYYY-MM-DDThh:mm:ss.464Z 是日期和時間,找出紅色字體「0017a4770018」那一段,它代表了鎖住檔案的那台 ESXi Host 的 MAC Address,這時再到 vCenter 去找該 Host:

network_adapters_list

找到之後,開啟這台 ESXi Host 的 SSH 連線,連入之後即可將該檔案及目錄刪除:
~ # cd /vmfs/volumes/STORE_NAME/FOLDER_NAME/
/vmfs/volumes/53e2d4ad-893cffbb-8da8-0017a4000000/FOLDER_NAME # rm -rf *
/vmfs/volumes/53e2d4ad-893cffbb-8da8-0017a4000000/FOLDER_NAME # cd ..
/vmfs/volumes/53e2d4ad-893cffbb-8da8-0017a4000000 # rmdir FOLDER_NAME/