:::

修復Proxmox VE:無法刪除虛擬機器 / Fix Proxmox VE: Destroy Virtual Machine Failed

2014-08-08_083402

本篇是修復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

2014-08-08_083402

有些虛擬機器呈現灰色未開機的狀態。這些機器無法啟動,也無法備份、遷移,甚至刪除。整臺機器彷彿被鎖定一樣無法操作。

以虛擬機器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

2014-08-08_083309

造成這個問題的原因在於虛擬機器未完成建立(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這個鷹架,整體來說非常複雜。這部分仍有待研究。