Btrfs:改資料不覆蓋舊帳,快照與校驗和都從這裡長出來
摘要
資料改過之後還能不能拿回改動前的版本?Btrfs 用寫時複製回答了這個問題,順帶把校驗和、快照、壓縮與多裝置管理一起裝進來,日常操作交給 btrfs-progs。
推薦- 軟體名稱
- Btrfs
- 版本
- 7.1
- 收費
- 免費
- 開源
- 開源
- 作業系統
- Linux
- 更新時間
- 2026-10-11 20:33
檔案系統平常感覺不到存在,一旦出狀況,它就是決定一切的那一層。
寫時複製連帶出來的好處
Btrfs 是 Linux 上的現代寫時複製檔案系統。官方說明開頭一句就把定義講完,順便把設計目標寫在同一個句子裡:在做出先進特性的同時,也要顧到容錯、修復與好管理。這個順序值得注意,把出錯之後的復原能力提前列進目標,等於宣告它是照著長期運轉來設計的。
寫時複製是整套設計的支點。資料要改的時候不覆蓋原位,而是寫到新位置再搬動指標,因此改動前後的狀態都留得住。校驗和、快照、傳送接收之所以能用不大的開銷做出來,根源都在這裡。官方列出的特性清單很長:校驗和、壓縮、去重、重組、內嵌檔案、配額群組、reflink、線上調整容量、校驗修復、傳送接收、子卷、交換檔、TRIM 與卷管理。
寫時複製也不是白拿的。區塊不會永遠免費重複,改過的區塊要再寫一次,所以反覆改寫同一個檔案的負載會付兩次代價,一次在新的配置,一次在舊區塊的延後清理。這也是下面那些維護動作不能當裝飾、而是設計本身日常成本的原因。
實際會用到的幾項能力
校驗和負責發現壞資料。官方替它單開一章,內容涵蓋資料與中繼資料的驗證方式;另有一章叫讀取時自動修復,講的是手上有可用副本時,怎麼把讀出來的內容改正。兩章合起來,就是資料完整性的基本保證。
子卷與快照負責組織。說明裡子卷有獨立一章,快照則是子卷的一項例行操作,配上寫時複製,建立時的開銷與佔用都不大。傳送與接收負責搬運:把子卷或快照以串流送到另一個 Btrfs 檔案系統,適合做增量備份。卷管理則讓多顆裝置併進同一個檔案系統,另外還有平衡、裝置替換與種子裝置等條目配合。
項目 | 官方說明 |
|---|---|
定位 | Linux 上的現代寫時複製檔案系統 |
設計目標 | 先進特性之外,兼顧容錯、修復與好管理 |
資料完整性 | 資料與中繼資料校驗和,支援讀取時自動修復 |
組織方式 | 子卷與快照,另有配額群組與種子裝置 |
傳輸與擴容 | 傳送接收串流、卷管理、線上擴縮容 |
工具集與版本
日常操作靠 btrfs-progs 這套命令列工具,mkfs、check、scrub、balance 都在裡面。官方變更記錄把現行版本列為 7.1,日期是 2026 年 7 月 14 日,之後依次是 2026 年 5 月 9 日的 7.0 與 2025 年 2 月 13 日的 6.19。工具以 GPL-2.0 授權開源,儲存庫根目錄附有授權檔,函式庫部分另外有一份。
7.1 的改動集中在組建與檢查兩處的效率。官方記錄顯示,mkfs 在指定根目錄時可以透過 GET_CSUMS 介面沿用既有的校驗和,配合 reflink 能少讀一遍檔案資料;check 多了跳過配額群組校驗的選項,用來加快檢查。這類改動看起來不起眼,但面對大容量檔案系統時,省下的時間是真的。
還有一件事值得先想清楚,就是這套檔案系統到底該不該選。它並非各處的預設值,願意提供的發行版通常也會把它跟另一個更簡單的選項並列。把特性清單當菜單點是錯的直覺,該問的是一台機器真正會用到其中哪兩三項,因為每一項打開之後,都得有人維護、監看並且看得懂。
儲存方案的價值不在規格表有多長,而在把資料放進去之後,你還敢不敢一直不去碰它。
使用建議:新盤先做一次完整校驗,把壞軌摸清楚再往上放資料;要留回復點就建子卷快照,比整盤複製省得多;多裝置方案上線前先確認冗餘等級,避免一顆裝置壞掉拖垮整個檔案系統;跨機器搬遷用傳送與接收,增量傳輸會比整包拷貝省時間。