:::

修復Proxmox VE:用指令強制刪除虛擬機器 / Fix Proxmox VE: Remove OpenVZ Container by a Command

image

本篇是介紹如何處理在Proxmox VE中無法在網頁管理介面(web-based management)中刪除OpenVZ的問題。這個錯誤是因為OpenVZ虛擬機器的本體檔案在刪除、備份、還原的途中被強制中斷,導致OpenVZ檔案遺失、但是設定檔(*.conf)卻還在節點(node)之中,所以在網頁管理介面中仍然會出現那個虛擬機器,但是無法藉由網頁管理介面刪除。這時候只要用指令列中移除在 /etc/pve/openvz/ 的設定檔,刪不掉的虛擬機器就會消失了。


問題狀況 / Problem Description

image

一般來說,在Proxmox VE的網頁管理介面中,如果要刪除虛擬機器的話,正常做法是:

  1. 停止虛擬機器
  2. 按下右上角的「Remove」
  3. 在Confirm確認視窗中按下「Yes」

上圖的例子中,我要刪除的是VMID編號100的OpenVZ虛擬機器。按下「Yes」之後卻沒有任何反應,下面的Tasks出現了TASK ERROR。

image

雙擊Tasks訊息顯示詳細訊息,就出現了上圖的錯誤資訊:

stat(/var/lib/vz/root/100): No such file or directory

Container is currently mounted (umount first)

TASK ERROR: command 'vzctl destroy 100' failed: exit code 41

訊息裡面提到了一個路徑「/var/lib/vz/root/100」,看起來像是這個路徑尚未解除掛載(umount)。但是在伺服器上找看看這個路徑,雖然有「/var/lib/vz/root/」,但裡面已經沒有「100」這個資料夾了。

這是什麼問題呢?

問題原因 / Causes of Problem

造成這個問題的原因是因為虛擬機器資料刪除不完全。一個OpenVZ虛擬機器的組成有兩個部分:

  • 虛擬機器的實體檔案:擺放在/var/lib/vz/root/資料夾底下。刪除、備份或遷移(migrate)等各種動作會優先處理這裡的檔案。
  • 虛擬機器的設定檔:擺放在/etc/pve/openvz/底下,以副檔名.conf表示。網頁管理介面會優先讀取這個檔案的內容來顯示虛擬機器的狀態。之前我們在「OpenVZ掛載NFS的虛擬機器設定」中使用「vzctl set」指令來設定OpenVZ虛擬機器的做法,也是修改設定檔的內容。

實體檔案跟設定檔兩者為一體才是一個完整的OpenVZ虛擬機器,缺一不可。在正常的情況下,Proxmox VE會先處理實體檔案,然後再來修改設定檔的內容。然而很多時候我們在刪除、備份或遷移虛擬機器的實體檔案時,因為檔案本身太大,導致處理到一半就因為異常中斷、沒有順利處理完成。這時候實體檔案可能已經被刪除,但是後面卻沒有處理到設定檔。結果設定檔就存在Proxmox VE中,但是卻因為沒有實體檔案,而無法從網頁管理介面刪除的情況。

解決方法 / Solution

要解決這個問題,做法就是手動刪除Proxmox VE沒有刪除掉的虛擬機器設定檔。

image

首先,我們要確認刪不掉的虛擬機器是在哪一個節點(node,Proxmox VE實體伺服器)上。

image[2]

然後到該節點中,點選右上角的「Shell」,開啟該節點的主控臺。

image

確認你要刪除的OpenVZ虛擬機器的VMID。舉例來說是「100」,那麼就確認看看虛擬機器設定檔在不在「/etc/pve/openvz/100.conf」這個位置,然後用「rm」指令刪除它。指令如下:

rm /etc/pve/openvz/100.conf

image

在網頁管理介面上,VMID編號 100的OpenVZ虛擬機器就已經消失囉。


結語 / In closing

其實Proxmox VE這種刪不掉虛擬機器的情況還真的蠻常遇到的。刪除虛擬機器刪到一半中斷,以後就刪不掉;遷移遷到一半中斷,以後就刪不掉;還原(restore)還到一半中斷,以後就刪不掉(還原的時候會先建立虛擬機器的設定檔,然後再來慢慢解壓縮虛擬機器的實體檔案)。所以遇到這種虛擬機器刪不掉的情況,請不要驚慌,這很常見。

但問題是「/etc/pve/openvz/」這個存放虛擬機器設定檔的路徑很難找。這個路徑並非直接存放在Proxmox VE實體伺服器節點上,而是掛載在Proxmox VE叢集共享的檔案系統上。因此我們沒辦法直接使用locate指令找到虛擬機器設定檔。雖然我之前做過很多次手動刪除設定檔的操作,但每次都忘記到底上次是怎麼做的。這次終於能好好把它記錄下來,以後就供大家參考吧。