修復Proxmox VE:無法刪除虛擬機器 / Fix Proxmox VE: Destroy Virtual Machine Failed
本篇是修復Proxmox VE的集叢(Cluster)中遇到「'vzctl destroy [VMID]’ failed: exit code 41」的錯誤。這個錯誤是因為虛擬機器未成功建立,刪除設定檔之後可以解決。以下說明造成錯誤的原因以及解決方法。
This article describes the problem of Proxmox VE Cluster: “'vzctl destroy [VMID]’ failed: exit code 41”. A proposed solution to the problem is deleting the configuration file of the VMID. Following are the problem description and solutions.
問題狀況 / Problem Description
有些虛擬機器呈現灰色未開機的狀態。這些機器無法啟動,也無法備份、遷移,甚至刪除。整臺機器彷彿被鎖定一樣無法操作。
以虛擬機器ID (VMID) 100為例,刪除動作會失敗,而且出現以下錯誤訊息:
stat(/var/lib/vz/root/100): No such file or directory
Container is currently mounted (umount first)
TASK ERROR: command ‘vzctl destory 100’ failed: exit code 41
問題原因 / Causes of Problem
造成這個問題的原因在於虛擬機器未完成建立(create)或從備份檔案重建(restore),虛擬機器應該要有的檔案位置尚未建立好相對應的檔案,導致刪除等任何動作的失敗。
通常遇到的情況是:
- 由於虛擬應用範本或是備份檔案過大,導致建置虛擬時間過長。
- 建置過程途中被使用者按下「Stop」停止建置命令,或是因為斷電、斷網等任何異常,讓虛擬機器尚未建立完成。
- 因此該虛擬機器就不能運作了。
手動解決方法 / Manual Solution
要移除無法運作的虛擬機器,做法是刪除該虛擬機器的設定檔案。以VMID為100的虛擬機器為例,刪除指令為:
rm -f /etc/pve/nodes/*/*/100.conf
我做成腳本pve-destroy_vm.sh,請下載、加入執行權限,然後可以這樣做:
./pve-destroy_vm.sh 100
這樣就能夠強制刪除虛擬機器了。
有待找尋自動解決方法 / Need for Automatic Solution
上述的手動解決方案必須每次都要登入伺服器操作,不能同一在網頁操作上進行,比較不方便。
因此自動解決方法應該是去修改網頁端刪除的指令。如果取得了exit code 41,那就用上述的方法強制刪除。
只是Proxmox VE的網頁比較麻煩,他是用Perl寫成,而且前端使用了ext js這個鷹架,整體來說非常複雜。這部分仍有待研究。