絕大多數的人使用虛擬機方案,就是為了方便的 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 正常使用時,設定檔中的快照標記與實際磁碟絕對是一致的。因此,上述這些操作建議僅在特殊情況發生時才使用,以免一時不慎,反而造成更多的損失。
參考資料
- Storage - Proxmox VE
https://pve.proxmox.com/wiki/Storage
- zfs(8): configures ZFS file systems - Linux man page
https://linux.die.net/man/8/zfs
- qemu-img(1): QEMU disk image utility - Linux man page
https://linux.die.net/man/1/qemu-img