孤立磁碟:刪除之前該先問的問題

虛擬機器刪除了,空間卻沒有回來。殘留的磁碟會因為三種不同的原因留下,而這三種並不相同。這份清單本身就是一份刪除清單,因此它的可靠性是另一個問題。

AtlasPVE ·

本條目涵蓋以下問題

  • proxmox 刪除 vm 後磁碟還在
  • proxmox 未使用的磁碟是什麼
  • proxmox 清理孤立磁碟
  • proxmox 刪除後磁碟空間沒有釋放
  • proxmox 殘留的磁碟映像檔

一台虛擬機器刪除了。打開儲存空間一看,空間並沒有回來。磁碟還留在原處,不屬於任何人。

這不是 Proxmox 的錯誤。但如果在不清楚原因的情況下就開始刪除,可能會刪掉真正還需要的東西。

殘留磁碟留下的原因有三種

它們在同一個畫面上並排出現,但來龍去脈各不相同,刪除的風險也不一樣。

完全沒有擁有者。磁碟名稱中的虛擬機器編號不屬於任何虛擬機器。虛擬機器確實已經刪除,磁碟留了下來。或者這個編號從未使用過,磁碟是刻意配置的空白磁碟。

虛擬機器存在,磁碟沒有連接。虛擬機器還在,但這顆磁碟沒有接在任何插槽上。通常是有人刻意分離的:正在搬移資料、正在做備份,之後還會再接回去。

Proxmox 自己已標為未使用。它出現在虛擬機器的設定中,但不在任何使用中的插槽上。這是系統本來就已經明示的狀態。

在同一份清單裡看到這三種,然後一起刪除,是最危險的做法。在後兩種情況中,留下這顆磁碟的人通常仍然需要它。

它們是怎麼出現的

最常見的情況是這樣:先把磁碟從虛擬機器分離,再刪除虛擬機器。分離的那一刻,虛擬機器的設定中就不再留有它的任何記錄。之後刪除虛擬機器時,系統並不知道這顆磁碟,因為它已經沒有寫在任何地方。虛擬機器刪掉了,磁碟留了下來。

中途沒有完成的磁碟搬移也會造成同樣的結果:新位置已經有複本,舊的卻沒能移除。

另外還有一種刻意的情況:配置一顆不屬於任何虛擬機器的空白磁碟。這顆磁碟生來就是孤立的,並不是等著被刪除的殘留物。

真正的問題:這份清單是一份刪除清單

大多數畫面提供的是資訊。這個畫面要求的是做出決定,而且是無法復原的決定。

因此,這份清單的正確性比一般畫面的正確性更關鍵。而這裡藏著一種不易察覺的失誤方式。

空的與未知的不是同一件事

找出孤立磁碟的方法是這樣:取得所有虛擬機器的清單,取得所有儲存區的內容,然後比對。儲存區中的磁碟如果沒有出現在任何虛擬機器的清單裡,就是孤立的。

接著考慮一種情況:如果取不到虛擬機器清單,會發生什麼事?

如果程式吞掉這個錯誤,把清單當成空的,結果就是:沒有任何磁碟能對應到擁有者,於是每一顆使用中的磁碟看起來都是孤立的。畫面會把執行中虛擬機器的磁碟列為可以刪除的項目。

同樣的錯誤也存在於另一個方向。如果取不到儲存區清單又把它當成空的,就沒有任何儲存區會被掃描,得到的答案是沒有孤立磁碟。這個方向不會有人誤刪東西,但告訴使用者一切乾淨也是一種斷言,而手上並沒有支撐這個斷言的資料。

共同的教訓一句話就能說完:空的答案與拿不到答案不是同一件事。前者表示沒有這種東西,後者表示無法回答。程式一旦把兩者混為一談,就會開始斷言自己並不知道的事。

刪除之前

檢查編號:虛擬機器真的不存在了嗎,還是它其實是範本?範本也有磁碟,而且範本在清單中出現的方式可能與虛擬機器不同。

查看磁碟是什麼時候分離的。今天才分離的磁碟,很可能是某人尚未完成的工作。

查看快照:磁碟可能已經沒有連接,卻仍有快照依賴它。

還有最簡單的一點:先不要刪除,先改名或移到別處。如果一週內沒有人來找,再刪除。如果空間吃緊到連一週都等不了,真正的問題就不在孤立磁碟。

Atlas 的做法

Atlas 列出孤立磁碟時,會把三種原因分開標示:完全沒有擁有者、虛擬機器存在但未連接、被系統標為未使用。把它們堆成一堆顯示,等於把不同的風險裝進同一個箱子。

真正值得一提的是:上面說的錯誤,確實曾經存在於這個產品中,而且出現在三個不同的地方。

取不到虛擬機器清單時,錯誤被轉成了空陣列,也就是說每一顆使用中的磁碟都會看起來像孤立的。取不到儲存區清單時,同樣被當成空的,也就是說使用者會得到一個毫無根據的乾淨答案。另外,在為空白磁碟挑選編號時,如果取不到已使用編號的清單,結果會變成沒有任何編號在使用中,於是選擇落在第一個保留編號上。在實際運作的主機上量測:那個編號早已被佔用,佔用者是一個範本。

三處都朝同一個方向修正:如果取不到清單,就完全不產生清單,並說明原因。寧可不給答案,也不給半個答案。

這與本 wiki 其他地方寫到的量測教訓有什麼不同:那裡的問題是這個數字描述的是哪一段期間。這裡的問題出現得更早:到底有沒有拿到答案?

資料來源

Proxmox 官方文件。內容為英文,且在此主題上以官方文件為準。

相關條目

這項工作在 Atlas 中是什麼樣子?

前往產品頁面