💾 Proxmox VE 備份與還原全攻略:PBS + ZFS Snapshot + 異地容災(可驗證 SOP)
Proxmox VE 要做到「可用、好用、可維運」,關鍵往往不是叢集,而是備份、還原、容災是否真的能落地、可演練、可驗證。 本文把 PBS(Proxmox Backup Server)與 ZFS Snapshot 串成一條可執行 SOP:從策略、排程、保留、驗證,到故障時的還原演練與異地容災。
📑 目錄
- 一、備份策略怎麼選:RPO / RTO / 可驗證
- 二、PBS 架構建議(最少踩雷版)
- 三、PVE → PBS:建立備份 Job(含保留策略)
- 四、ZFS Snapshot:把「VM 備份」與「資料盤快照」拆開管
- 五、備份驗證:每週至少一次還原演練
- 六、還原路徑:整機 / 單檔 / 磁碟層級
- 七、異地容災:PBS Datastore 複寫 + 演練切換
- 八、上線前自檢清單(可直接照抄)
- 延伸閱讀
一、備份策略怎麼選:你要的是 RPO 還是省空間?
先把目標定清楚,後面所有排程與保留才不會「做很多但救不了」。
| 名詞 | 定義 | 常見目標 | 策略影響 |
|---|---|---|---|
| RPO | 最多能容忍丟失多久的資料 | 15 分鐘 / 1 小時 / 1 天 | 決定備份頻率(PBS)與快照頻率(ZFS) |
| RTO | 多久內要恢復服務 | 30 分鐘 / 4 小時 / 1 天 | 決定還原路徑(整機、磁碟、單檔)與演練方式 |
| 可驗證 | 備份要能成功還原並通過檢查 | 每週 1 次演練 | 需要隔離測試環境 + 健康檢查腳本/流程 |
建議落地作法:
- VM(系統盤/整機):用 PBS 做一致性備份(dedup + incremental)。
- 資料盤(SMB/NFS/DB data):用 ZFS Snapshot 做高頻保護,再搭配複寫/異地。
- 每週固定演練:還原一台 VM 到隔離網段,跑健康檢查。
二、PBS 架構建議(最少踩雷版)
- PVE 與 PBS 分離主機(或至少分離儲存):避免同故障域一起掛。
- PBS Datastore 建議用 ZFS:壓縮、校驗、易於複寫(send/receive)。
- 備份流量建議獨立網段或至少做 QoS/限速:避免影響 VM 生產流量。
- 啟用加密(建議):備份是高價值資料,傳輸與儲存都要顧。
三、PVE → PBS:建立備份 Job(含保留策略)
以下用「每日 + 每週 + 每月」保留策略示範。實務上通常會依 VM 重要性拆成多個 Job。
# 1) 先確認 PBS Datastore 已建立(PBS Web UI → Datastore)
# 2) PVE Web UI:Datacenter → Backup → Add
# Storage: pbs
# Mode: snapshot
# Schedule: daily 02:30
# Compression: zstd(常見)
# Retention: keep-daily=14, keep-weekly=8, keep-monthly=12
#
# 建議:關鍵 VM 再加一個「更密」的 Job(例如 daily 6:00 / 12:00 / 18:00)
保留策略的直覺版本:
- daily 14:保留近兩週,最常用來救「昨天/前天」的事故。
- weekly 8:保留近兩個月,常用來回溯「某次更新前」。
- monthly 12:保留一年,符合多數稽核與長期回朔需求。
四、ZFS Snapshot:把「VM 備份」與「資料盤快照」拆開管
VM 系統盤用 PBS;資料盤(例如 SMB/NFS/DB data)用 ZFS Snapshot 做更高頻率保護。 這樣你可以把 RPO 壓到 15~60 分鐘,而不需要讓整機備份也跟著同頻率暴增。
# 例:手動建立遞迴快照(示意)
# zfs snapshot -r tank/data@`date +%Y%m%d-%H%M`
# 列出快照
# zfs list -t snapshot -o name,creation,used -s creation
快照保留(建議搭配自動清理):例如每 30 分鐘留 48 份(1 天)、每日留 14 份、每週留 8 份。
五、備份驗證:每週至少做一次「還原演練」
最務實的做法:建立一台隔離測試 VM/網段,定期從 PBS 還原一台 VM,並跑健康檢查(服務能起、資料完整)。 備份不是「有做」,而是「救得回來」。
# 還原後檢查清單(示意)
# - VM 是否能開機
# - 網卡/驅動是否正常
# - 服務是否可 listen(systemd / docker / k8s 等)
# - DB 是否能啟動、是否能查到關鍵資料
# - 應用程式健康檢查(HTTP 200 / 特定 API 回應)
#
# 建議:把檢查做成腳本 + 產出一份「演練紀錄」
六、還原路徑:整機 / 單檔 / 磁碟層級
- 整機還原(VM Restore):事故最大宗;最快讓服務回來(對 RTO 最友善)。
- 單檔還原:誤刪檔案/勒索前後比對;通常由 PBS 或掛載備份內容來取回。
- 磁碟層級還原:只回復某顆資料盤或某個版本點,適合 DB/檔案服務。
原則:先把服務救回來(RTO),再把資料補齊(RPO)。不要一開始就追求「完美還原」拖垮復原時間。
七、異地容災:PBS Datastore 複寫 + 演練切換
異地容災的核心是:第二份備份必須在不同故障域(不同主機、不同機櫃、不同站點)。 若你的 PBS Datastore 建在 ZFS 上,通常會用 ZFS replication(send/receive)做複寫。
7.1 典型架構
- Site A:PVE(生產) + PBS(主備份)
- Site B:PBS(異地備份)或 ZFS 儲存節點
- 複寫頻率:依 RPO 決定(常見 1 小時 / 4 小時 / 每日)
7.2 ZFS 複寫(示意)
# A → B:第一次全量
# zfs snapshot -r pbs/pool/datastore@init
# zfs send -R pbs/pool/datastore@init | ssh root@site-b "zfs receive -F backup/pbs/datastore"
# 後續增量(示意)
# zfs snapshot -r pbs/pool/datastore@20260213-0230
# zfs send -R -i pbs/pool/datastore@init pbs/pool/datastore@20260213-0230 | ssh root@site-b "zfs receive -F backup/pbs/datastore"
容災演練重點:
- 每季至少一次:假設 Site A 全毀,從 Site B 把關鍵 VM 還原到 DR PVE。
- 切換演練要有「DNS/入口位址」調整方案(例如反向代理、VIP、或臨時入口)。
- 演練要產出紀錄:耗時、失敗點、改善項目。
八、上線前自檢清單(可直接照抄)
# ✅ 策略
- [ ] 每台關鍵 VM 定義 RPO / RTO
- [ ] VM 用 PBS;資料盤用 ZFS Snapshot(高頻)
- [ ] 至少每週一次還原演練(隔離網段)
# ✅ PBS
- [ ] PBS 與 PVE 分離故障域(主機或儲存至少分離)
- [ ] Datastore 使用 ZFS(建議)
- [ ] Job 排程與 Retention 設定完成(daily/weekly/monthly)
- [ ] 備份流量不影響生產(獨立網段或 QoS/限速)
# ✅ ZFS Snapshot
- [ ] 快照頻率符合 RPO
- [ ] 有快照保留與清理策略(避免爆容量)
- [ ] 可列出快照並能回復到指定時間點
# ✅ DR(異地)
- [ ] 第二份備份在不同站點/不同故障域
- [ ] 複寫頻率符合 RPO
- [ ] 每季至少一次 DR 還原演練
💬 互動留言引導
💬 留言交流
如果你在實作過程遇到卡點(版本、環境、錯誤訊息、拓樸),歡迎把細節貼在留言區:
- 你的環境版本(PVE / PBS / Kernel / ZFS)
- 你做了哪些步驟(含排程、保留、快照策略)
- 錯誤訊息或現象(最好附上關鍵 log)