2019年2月16日 星期六

[經驗分享]Proxmox VE 快照機制與遺失快照處理



絕大多數的人使用虛擬機方案,就是為了方便的 Snapshot 快照機制,萬一機器操作損毀,一次按鈕回到正常的時間點。

在 Proxmox VE 裡,同樣也完整支援快照機制,而且應對不同的 Storage 儲存還有不同的特性。








快照功能

在 PVE 的 WebUI 上使用快照,簡直是易如反掌,絕對比你吃一頓晚餐還容易。


PVE 製作快照功能


只要你會用手點滑鼠左鍵,你就會用 PVE 的快照功能,完全沒有任何難度。

不過,若虛擬機器與容器用的多後,會發現在某些情況下無法製作快照,這是為什麼呢?







快照支援

本文一開始提到 PVE 應對不同 Storage 儲存有不同的快照特性,那麼有那些儲存支援快照,那些不行?



儲存種類與對應功能表


在官方文件上有整理一張非常詳細的對照表,明確列出有那些 Stroage 可以使用快照功能,請參閱表中的 Snapshots 欄位。

依據表中的結果,我們可以先簡化成以下結論:
  • 支援快照
    ZFS、LVM-Thin、Ceph/RBD、Ceph/CephFS、Sheepog、ZFS over iSCSI


表面上看起來能做快照的種類不多,但表格上同時也寫了但書:在 Flie Level 的儲存區 + 使用 qcow2 格式,則仍然可以使用快照功能。

注意是僅限 qcow2,PVE 所另外支援的兩種 File Level 檔案 vmdk 與 raw 是不支援快照能力的。

qcow2 能提供快照是 KVM/QEMU 虛擬機器本身所支援的功能,但既然是 File Level 格式,效能自然會比 Block Level 的檔案系統 (如 ZFS) 效能較為落後,若對於效能有較高要求的使用者,請留意。

所以我們應該修正結論為:
  • 支援 Block Level 快照
    ZFS、LVM-Thin、Ceph/RBD、Ceph/CephFS、Sheepdog、ZFS over iSCSI
     
  • 支援 File Level 快照
    Directory、NFS、CIFS、GlusterFS






快照標記

當我們使用快照功能以後,除了儲存會製作快照內容,客體機的設定檔也會有相對應的內容存寫入。

WebUI 製作快照完成


客體機設定檔內容


除了在儲存上產生快照內容,設定檔本身也會長出相對應的區塊,如上圖會記下快照標記名稱、當時的主機設定等等。

但是在某些情況下,例如 xxx.conf 設定檔損毀重建、遺失等等,客體機的設定檔會與當時有做過快照的資訊不太相符,儘管可以正常使用,但總覺得怪怪的。






處理問題

如果是虛擬磁碟沒有快照點,但虛擬機器的 xxx.conf 裡面有,請直接手動刪除該標記的區塊即可。

但最常見的,是實際上有做過快照且存在磁碟,而設定檔裡沒有。

我們可以用指令針對指定的虛擬磁碟儲存顯示快照點,以 vmid 為 108 這台機器,它配有一個虛擬磁碟做為展示:
查看指定虛擬磁碟快照點 (qcow2)
qemu-img snapshot -l vm-108-disk-0.qcow2
查看指定虛擬磁碟快照點 (zfs)
zfs list -t snapshot | grep vm-108-disk-0

執行以後,分別可以查看到快照點的結果:

查看 qcow2 快照點


查看 zfs 快照點



如果在虛擬機器的設定檔 108.conf 裡,已經沒有 test1 與 test2 這兩個快照點的設定區塊存在,我們可以自行針對虛擬磁碟操作,以讓佔去的空間釋放。


刪除指定虛擬磁碟快照點 (qcow2)
qemu-img snapshot -d test2 vm-108-disk-0.qcow2
qemu-img snapshot -d test1 vm-108-disk-0.qcow2
刪除指定虛擬磁碟快照點 (zfs)
zfs destroy /zfspool/vm-108-disk-0@test2
zfs destroy /zfspool/vm-108-disk-0@test1


不管是 qcow2 還是 zfs,刪除快照的指令都是成功執行沒訊息,失敗才會出錯誤,若想確認是否成功,可以依據前面的查看快照點指令再做一次。






結論

在 PVE WebUI 或 CLI 正常使用時,設定檔中的快照標記與實際磁碟絕對是一致的。因此,上述這些操作建議僅在特殊情況發生時才使用,以免一時不慎,反而造成更多的損失。

同時切記,即便有了強大的快照功能,仍然要做好備份。









參考資料