pgBackRest 2.60.0:還原遇壞頁即中止,並新增預取
pgBackRest 官方 release notes · 2026-10-18
pgBackRest 2.60.0 讓 restore 在遇到壞頁校驗和時直接報錯停止,而不是像過去那樣靜默還原;expire 也會拒絕清理。這是新選項 checksum-page-error 的預設行為,對既有的備份與還原排程是行為變更。
pgBackRest 社群於 2026-10-18 發布此版本(公告、release notes),同時帶來物件儲存預取與 GCS Workload Identity Federation。
原本的問題
PostgreSQL 開啟頁校驗和(page checksums)時,pgBackRest 在備份階段會驗證每一頁,發現錯誤只對該檔案發出警告。還原階段則完全不回報無效校驗和,release notes 明確寫「Restore previously did not report invalid checksums at all」。
結果是備份裡若已含壞頁,還原出來的叢集看起來正常,直到查詢踩到那一頁才出事。expire 也不會把這種備份當成問題,可能把仍然健康的舊備份清掉,只剩帶壞頁的那一份。
核心改動
新選項 checksum-page-error(PR #2833,commit d7f54b2)統一控制 backup、restore、expire 三個命令對壞頁的處理:
| 命令 | 舊行為 | 2.60.0 預設 |
|---|---|---|
backup | 逐檔警告 | 逐檔警告,結尾另報警告總數 |
restore | 不回報 | 報錯並停止,叢集不完整、無法啟動,需重跑還原 |
expire | 不檢查 | 最舊的保留備份含校驗和錯誤時拒絕執行,連帶封鎖該 repository 的 archive 清理 |
想維持舊行為,設定 checksum-page-error=n,三個命令都改為警告。
[global]
# 維持 2.59 以前的寬鬆行為
checksum-page-error=n物件儲存預取
還原與備份讀取物件儲存時,多檔與範圍讀取現在會提前排隊,請求在資料讀取的同時進行;檔案間的小縫隙直接讀過去,不另開請求(PR #2783、#2816)。
repo-storage-prefetch:排隊請求數,預設 3repo-storage-read-over:可讀過去的最大縫隙,預設 64KiB- 還原用於 bundled 檔案與 block incremental map;備份用於前一次備份的 block incremental map
release notes 未公布具體加速倍數,實際效益需自行在 S3、Azure、GCS 的還原演練中量測。
其他值得注意的改動
- GCS Workload Identity Federation:設定
repo-gcs-key-type=web-id,repo-gcs-key指向gcloud iam workload-identity-pools create-cred-config產生的外部帳號憑證檔,不再需要 service account key。token 檔每次交換都會重新讀取,Kubernetes projected token 輪替可直接生效;不支援 service account impersonation(PR #2839)。 - Azure 批次刪除:回應缺少部分子請求時,過去被當成已完成,每批只刪掉一個檔案卻回報成功;現在會重試(PR #2849)。
- Bundling:判斷是否打包時改用目前檔案大小,不再用前次備份的大小,長大超過
repo-bundle-limit的檔案不會再被誤打包(PR #2843)。 - 建置:程式碼產生改用 Python,從 git checkout 建置需 PyYAML 而非 libyaml;release tarball 已含產生的程式碼,兩者都不需要。另支援 OpenSSL 4 與 illumos。
影響範圍
最直接受影響的是有開頁校驗和、且排程自動還原或定期 expire 的環境:例如每日把備份還原到驗證叢集的 CI、依賴 pgbackrest expire cron 的維運腳本。升級後這些流程若遇到歷史壞頁,會從「成功」變成「失敗」,並可能讓 archive 空間不再回收。
升級前建議先對現有 repository 跑一次 restore 演練,確認沒有壞頁;若暫時無法處理,先在設定檔加上 checksum-page-error=n。在 GKE 上用 service account key 存取 GCS 的使用者,則可評估改用 web-id 以移除長期金鑰。
公告另註明 PostgreSQL 19rc1 由 v2.59.2 起即受支援,2.60.0 也包含在內。