解決方法:
1、首先將cluster中的HA功能關閉。如果該功能不關閉,容易造成死鎖,,VM不斷跳動,,不斷的在不同的ESXI內迴圈被鎖,徒勞而無功。
2、虛機磁碟檔案被鎖,必須要知道到底是哪臺ESXI把他給鎖住了,這是關鍵。
3、在VCenter中,把被鎖的VM從Inventory中remove掉。原因很簡單,這是一個 unregister的過程。找到目標主機後,當然是殺死他鎖住VM的程序。之所以會被鎖,原因就是HA 把VM從別的HOST遷移過來,但是又沒有unregister和register的過程,所以在你檢視VM的Summary的時候,host ip還是屬於出問題的 host。 但是VM又被新的host強行power on,這樣自然不能啟動。
操作步驟:
1、SHELL命令列登陸虛機所在的物理主機ESXI(或登陸叢集內的所有物理主機,以確定在哪個主機上)
使用如下命令檢視虛機檔案是否被鎖定。
# vmkfstools -D /vmfs/volumes/UUID/VMDIR/LOCKEDFILE.xxx(虛機名稱)
2、使用如下命令查詢虛機程序
#ps | grep ruixin (KILL終止)
# esxcli vm process list
(# esxcli vm process kill --type=hard --world-id=xxxxx 終止)
如果上述命令可以找到虛機被鎖的程序ID,則終止該虛機程序,釋放鎖。
3、如上述命令沒找到,還可以使用如下命令來找
# vmkvsitools lsof | grep Virtual_Machine_Name
使用kill -9 PID結束程序。至此檔案鎖定被解除。
補充:
在虛擬機器所在主機用touch命令,也可鎖定解除
解除檔案鎖定後,登入vcenter,從清單移除原虛機名稱(備註:虛機關機了,這時還可能看到虛機在叢集中不同主機上跳躍註冊,需要從清單中移除可能多次,名稱為UNKNOWN的樣子,中間新增清單會出現“使用相同名稱的虛擬機器或模板已被註冊”,繼續移除UNKNOWN樣子的名稱,直至最後不出現錯誤提示,再最後從儲存中成功新增虛機的VMX,啟動時注意選擇“移動至”不要使用“複製至”)。在儲存器裡用vmx新增虛機到清單後開機成功。
備註補充:
檔案鎖定的目的
為了防止並行更改關鍵虛擬機器檔案和檔案系統,ESXi/ESX 主機對這些檔案建立了鎖定。在某些情況下,即使關閉虛擬機器的電源,這些鎖定也不會解除。檔案鎖定後,伺服器將無法訪問這些檔案,並且將無法開啟虛擬機器的電源。
這些虛擬機器檔案通常在執行時期間鎖定:
VMNAME.vswp
DISKNAME-flat.vmdk
DISKNAME-ITERATION-delta.vmdk
VMNAME.vmx
VMNAME.vmxf
vmware.log
確定檔案是否正在由正在執行的虛擬機器使用
如果檔案正在由正在執行的虛擬機器訪問,則無法強奪或移除該鎖定。可能持有該鎖定的主機正在執行虛擬機器且變得無響應,或者另一臺正在執行的虛擬機器在嘗試開啟電源前錯誤地將磁碟新增到了其配置中。
要確定虛擬機器程序是否正在執行,請執行以下操作:
確定是否已在主機上註冊虛擬機器,為此請以 root 使用者身份執行以下命令:
# vim-cmd vmsvc/getallvms
注意:輸出內容會列出每個已註冊虛擬機器的 vmid。請記錄此資訊,因為在 ESXi 伺服器上此過程的其餘部分將需要此資訊。
在主機上訪問虛擬機器的當前狀態,執行以下命令:
# vim-cmd vmsvc/power.getstate vmid
另外還要注意SWAP檔案
在 VM 啟動時會自動生成SWAP,沒有SWAP檔案,其實就是因為 SWAP 存在了, 因為重名而導致無法正常生成。
進入到/vmfs/volumes/lunid/vm_path/下,vmkfs -d virtual_machine.vswp 或者進入Datastore Browser,在裡面把SWAP檔案刪除也可。重新註冊VM。進入Datastore Browser,找到VM.vmx,add to inventory。啟動VM正常。
解決方法:
1、首先將cluster中的HA功能關閉。如果該功能不關閉,容易造成死鎖,,VM不斷跳動,,不斷的在不同的ESXI內迴圈被鎖,徒勞而無功。
2、虛機磁碟檔案被鎖,必須要知道到底是哪臺ESXI把他給鎖住了,這是關鍵。
3、在VCenter中,把被鎖的VM從Inventory中remove掉。原因很簡單,這是一個 unregister的過程。找到目標主機後,當然是殺死他鎖住VM的程序。之所以會被鎖,原因就是HA 把VM從別的HOST遷移過來,但是又沒有unregister和register的過程,所以在你檢視VM的Summary的時候,host ip還是屬於出問題的 host。 但是VM又被新的host強行power on,這樣自然不能啟動。
操作步驟:
1、SHELL命令列登陸虛機所在的物理主機ESXI(或登陸叢集內的所有物理主機,以確定在哪個主機上)
使用如下命令檢視虛機檔案是否被鎖定。
# vmkfstools -D /vmfs/volumes/UUID/VMDIR/LOCKEDFILE.xxx(虛機名稱)
2、使用如下命令查詢虛機程序
#ps | grep ruixin (KILL終止)
# esxcli vm process list
(# esxcli vm process kill --type=hard --world-id=xxxxx 終止)
如果上述命令可以找到虛機被鎖的程序ID,則終止該虛機程序,釋放鎖。
3、如上述命令沒找到,還可以使用如下命令來找
# vmkvsitools lsof | grep Virtual_Machine_Name
使用kill -9 PID結束程序。至此檔案鎖定被解除。
補充:
在虛擬機器所在主機用touch命令,也可鎖定解除
解除檔案鎖定後,登入vcenter,從清單移除原虛機名稱(備註:虛機關機了,這時還可能看到虛機在叢集中不同主機上跳躍註冊,需要從清單中移除可能多次,名稱為UNKNOWN的樣子,中間新增清單會出現“使用相同名稱的虛擬機器或模板已被註冊”,繼續移除UNKNOWN樣子的名稱,直至最後不出現錯誤提示,再最後從儲存中成功新增虛機的VMX,啟動時注意選擇“移動至”不要使用“複製至”)。在儲存器裡用vmx新增虛機到清單後開機成功。
備註補充:
檔案鎖定的目的
為了防止並行更改關鍵虛擬機器檔案和檔案系統,ESXi/ESX 主機對這些檔案建立了鎖定。在某些情況下,即使關閉虛擬機器的電源,這些鎖定也不會解除。檔案鎖定後,伺服器將無法訪問這些檔案,並且將無法開啟虛擬機器的電源。
這些虛擬機器檔案通常在執行時期間鎖定:
VMNAME.vswp
DISKNAME-flat.vmdk
DISKNAME-ITERATION-delta.vmdk
VMNAME.vmx
VMNAME.vmxf
vmware.log
確定檔案是否正在由正在執行的虛擬機器使用
如果檔案正在由正在執行的虛擬機器訪問,則無法強奪或移除該鎖定。可能持有該鎖定的主機正在執行虛擬機器且變得無響應,或者另一臺正在執行的虛擬機器在嘗試開啟電源前錯誤地將磁碟新增到了其配置中。
要確定虛擬機器程序是否正在執行,請執行以下操作:
確定是否已在主機上註冊虛擬機器,為此請以 root 使用者身份執行以下命令:
# vim-cmd vmsvc/getallvms
注意:輸出內容會列出每個已註冊虛擬機器的 vmid。請記錄此資訊,因為在 ESXi 伺服器上此過程的其餘部分將需要此資訊。
在主機上訪問虛擬機器的當前狀態,執行以下命令:
# vim-cmd vmsvc/power.getstate vmid
另外還要注意SWAP檔案
在 VM 啟動時會自動生成SWAP,沒有SWAP檔案,其實就是因為 SWAP 存在了, 因為重名而導致無法正常生成。
進入到/vmfs/volumes/lunid/vm_path/下,vmkfs -d virtual_machine.vswp 或者進入Datastore Browser,在裡面把SWAP檔案刪除也可。重新註冊VM。進入Datastore Browser,找到VM.vmx,add to inventory。啟動VM正常。