資料與儲存 2026 年 10 月 19 日

2026-10-19 — pgBackRest 2.60.0:還原遇壞頁即中止,並新增預取

primary=https://pgbackrest.org/release.html#2.60.0 primary=https://www.postgresql.org/about/news/pgbackrest-2600-released-3416/

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:排隊請求數,預設 3
  • repo-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 也包含在內。

原始來源:pgBackRest 2.60.0 Release Notes、postgresql.org 公告


End of article
0
Would love your thoughts, please comment.x
()
x