
NAS 有 RAID 都可能靜靜壞檔:ZFS scrub 點解要定期跑、結果點樣睇
由 checksum 到備份,拆清楚四層資料保護各自做咩
XDA 作者 Korbin Brown 分享咗一次幾有警惕性嘅事故:佢個 RAIDZ2 pool 因為 non-ECC RAM 故障,多個檔案寫入咗錯誤資料。因為 scrub 冇按預期定期跑,問題隔咗幾個月先浮面;其後 ZFS 靠 parity 重建損壞資料,佢亦換走咗出事嘅 RAM。呢類 silent data corruption 最麻煩係硬碟未必會直接報錯,檔名同容量睇落正常,開檔嗰刻先知內容已經壞咗。
Checksum 係 ZFS 認錯嘅依據
ZFS 寫入每個資料 block 時會一併保存 checksum,可以理解成內容指紋。之後讀取同一個 block,系統會重新計算再比較;兩邊對唔上,就知道讀返嚟嘅資料有問題。呢點重要,因為傳統 RAID 只知道某隻碟有冇回應,未必分得出幾份表面完整嘅資料邊份先啱。Checksum 亦唔只保護相片同文件內容,ZFS 會為檔案系統 metadata 做相同檢查。
平時成日開嘅檔案,每次讀取已經會驗 checksum;幾年冇郁過嘅相片庫、舊 project 同封存備份就未必有呢個機會。Scrub 會主動讀遍 pool 入面已配置嘅 blocks,再逐一核對 checksum,將潛伏咗一段時間嘅錯誤搵出嚟。OpenZFS 官方文件亦指出,scrub 同換碟時跑嘅 resilver 有分別:resilver 集中處理系統已知過時或缺失嘅資料,scrub 就會全面翻查。
Scrub 搵到錯,仲要有健康副本先救得返
有 mirror、RAIDZ 或 dRAID 等冗餘時,ZFS 發現 checksum 錯誤,可以讀另一份正確副本或者用 parity 重建,再改寫損壞 block。單碟 ZFS pool 仍然認得資料出錯,卻冇第二份內容可供修復;copies=1 嘅一般設定亦一樣。換句話講,checksum 負責辨認,scrub 負責巡查,冗餘就提供修復材料,三樣功能各有位置。
呢度仲有一個容易忽略嘅風險:第一個錯誤靜靜留喺碟上愈耐,期間再壞多一份副本或者另一隻碟出事,原本夠用嘅冗餘就可能唔再夠救。定期 scrub 嘅價值正正係縮短呢段潛伏期,趁 mirror 或 parity 仍然齊全時處理問題。若果每次 scrub 都持續新增 CKSUM 錯誤或修復量,就要查硬碟、線材、controller 同 RAM,唔好當自動修好就算。
TrueNAS 個排程仲有 Threshold Days
XDA 作者提到,佢所用 TrueNAS 介面雖然揀咗 weekly,Threshold Days 預設 35 日會阻止 scrub 喺上次完成後 35 日內再跑,實際間距因而變成約五星期。TrueNAS 現行文件同樣解釋,日曆排程只係嘗試啟動時間,Threshold Days 先決定上次成功 scrub 後要隔幾耐。介面同預設值會跟版本改,升級或新建 pool 後最好重新核對,唔好單靠「Enabled」就當任務真係有跑。
OpenZFS 文件以每月作消費級硬碟常見起點,但呢個只係 baseline。Pool 容量、硬碟速度、工作負載、每次 scrub 所需時間同裝置健康都會影響安排;scrub 本身亦會佔用 I/O,最好放喺低負載時段。如果 NAS 有好多相片庫同冷資料,平時又好少讀取,可以睇每次 scrub 要跑幾耐,再考慮跑密啲。若果一次未跑完下一次又到,應先處理效能或硬件問題,唔好只顧縮短間距。
排好之後,要睇佢有冇成功完成
TrueNAS 用家可以喺 Storage Health 或 Data Protection 入面檢查 Scheduled Scrub,實際位置視乎版本。用 shell 跑 zpool status -v pool名稱,就可以睇最近一次 scrub 嘅日期、狀態、修復量同永久錯誤;要即時開始則用 zpool scrub pool名稱。正常情況通常會見到完成、零永久錯誤同零修復,若果任務長期冇紀錄、停咗、報錯,或者修復數字次次增加,就要即刻跟進同確認備份可用。
RAID、scrub 同 snapshot 都頂唔住所有事故
Scrub 處理資料完整性,救唔到誤刪、勒索軟件、火災、失竊、電源事故拖垮整部 NAS,亦救唔到冗餘已經耗盡嘅永久損壞。Snapshot 可以保留同一個 pool 較早時間點,遇上整個 pool 消失仍然會一齊冇埋。重要相片同工作檔案要另外複製去第二部機、外置碟或雲端,最好有一份離線或異地;TrueNAS 官方亦明確提醒 RAID 同磁碟冗餘取代唔到可靠備份。今晚打開 NAS 管理頁,先確認最近一次 scrub 幾時完成同結果有冇錯,再核對下一次排程,幾分鐘已經做到。
參考來源
- XDA Developers — I found silent data corruption on my NAS months later because I ignored one scrub setting — original report
- OpenZFS:Scrub and Resilver — 核對 block checksum、scrub 範圍、自動修復條件、常見頻率同 zpool 指令。
- TrueNAS 26 Documentation:Storage/Scheduled Scrub — 核對現行 TrueNAS 排程介面、Threshold Days 行為、預設排程同結果提示。
- TrueNAS ZFS Primer — 官方說明 RAID/磁碟冗餘取代唔到可靠備份,並建議 snapshot 配合 replication。
- TrueNAS:Backing Up TrueNAS — 補充異地 replication、雲端同步同儲存資料備份做法。
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







