複製鏈接
請複製以下鏈接發送給好友

BTRFS

鎖定
BTRFS(通常念成Butter FS),由Oracle於2007年宣佈並進行中的COW(copy-on-write式)文件系統。目標是取代Linuxext3文件系統,改善ext3的限制,特別是單一文件大小的限制,總文件系統大小限制以及加入文件校驗和特性。加入ext3/4未支持的一些功能,例如可寫的磁盤快照(snapshots),以及支持遞歸的快照(snapshots of snapshots),內建磁盤陣列(RAID)支持,支持子卷(Subvolumes)的概念,允許在線調整文件系統大小。
中文名
BTRFS
別    名
Butter FS
宣佈時間
2007年
類    別
COW(copy-on-write式)文件系統
目    標
取代Linux的ext3文件系統
宣稱內容
容錯、修復與易於管理

BTRFS系統介紹

Btrfs宣稱專注在“容錯、修復與易於管理”。
Btrfs已在2010年7月推出的openSUSE11.3中得到了應用.
Btrfs也已在2010年10月推出的ubuntu10.10中得到了應用.
2011年6月8日,在Fedora工程指導委員會會議上,委員會決定Fedora 16將以Btrfs作為默認文件系統.
2011年8月9日, Fedora撤回了決定,Btrfs不再作為Fedora 16默認文件系統,原因是時間不充足,無法達到改變默認文件系統所要滿足的基本要求。
2011年10月5日,Fedora 16測試版發佈,BTRFS 將做為其默認文件系統。
2011年11月8日,Fedora 16正式版發佈,默認文件系統依然採用ext4,並未採用預計的Btrfs文件系統。
2020年8月24日,Btrfs將取代ext4作為Fedora 33中的默認文件系統。
(概述內容來源: [1] 

BTRFS特性

首先是擴展性 (scalability) 相關的特性,btrfs 最重要的設計目標是應對大型機器對文件系統的擴展性要求。 Extent,B-Tree 和動態 inode 創建等特性保證了 btrfs 在大型機器上仍有表現,其整體性能而不會隨着系統容量的增加而降低。
其次是數據一致性 (data integrity) 相關的特性。系統面臨不可預料的硬件故障,Btrfs 採用 COW 事務技術來保證文件系統的一致性。 btrfs 還支持 checksum,避免了 silent corrupt 的出現。而傳統文件系統則無法做到這一點。
第三是和多設備管理相關的特性。 Btrfs 支持創建快照 (snapshot),和克隆 (clone) 。 btrfs 還能夠方便的管理多個物理設備,使得傳統的卷管理軟件變得多餘。
最後是其他難以歸類的特性。這些特性都是比較先進的技術,能夠顯著提高文件系統的時間 / 空間性能,包括延遲分配,小文件的存儲優化,目錄索引等。

BTRFS相關特性

B-Tree
btrfs 文件系統中所有的 metadata 都由 B-Tree 管理。使用 B-Tree 的主要好處在於查找,插入和刪除操作都很高效。可以説 B-Tree 是 btrfs 的核心。
一味地誇耀 B-Tree 很好很高效也許並不能讓人信服,但假如稍微花費一點兒時間看看 ext2/3 中元數據管理的實現方式,便可以反襯出 B-Tree 的優點。
妨礙 ext2/3 擴展性的一個問題來自其目錄的組織方式。目錄是一種特殊的文件,在 ext2/3 中其內容是一張線性表格。
這種結構在文件個數有限的情況下是比較直觀的設計,但隨着目錄下文件數的增加,查找文件的時間將線性增長。 2003 年,ext3 設計者開發了目錄索引技術,解決了這個問題。目錄索引使用的數據結構就是 B-Tree 。如果同一目錄下的文件數超過 2K,inode 中的 i_data 域指向一個特殊的 block 。在該 block 中存儲着目錄索引 B-Tree 。 B-Tree 的查找效率高於線性表
但為同一個元數據設計兩種數據結構總是不太優雅。在文件系統中還有很多其他的元數據,用統一的 BTree 管理是非常簡單而優美的設計。
Btrfs 內部所有的元數據都採用 BTree 管理,擁有良好的可擴展性。 btrfs 內部不同的元數據由不同的 Tree 管理。在 superblock 中,有指針指向這些 BTree 的根。
FS Tree 管理文件相關的元數據,如 inode,dir 等; Chunk tree 管理設備,每一個磁盤設備都在 Chunk Tree 中有一個 item ; Extent Tree 管理磁盤空間分配,btrfs 每分配一段磁盤空間,便將該磁盤空間的信息插入到 Extent tree 。查詢 Extent Tree 將得到空閒的磁盤空間信息; Tree of tree root 保存很多 BTree 的根節點。比如用户每建立一個快照,btrfs 便會創建一個 FS Tree 。為了管理所有的樹,btrfs 採用 Tree of tree root 來保存所有樹的根節點; checksum Tree 保存數據塊的校驗和。
基於 Extent 的文件存儲
現代很多文件系統都採用了 extent 替代 block 來管理磁盤。 Extent 就是一些連續的 block,一個 extent 由起始的 block 加上長度進行定義。
Extent 能有效地減少元數據開銷。為了進一步理解這個問題,我們還是看看 ext2 中的反面例子。
ext2/3 以 block 為基本單位,將磁盤劃分為多個 block 。為了管理磁盤空間,文件系統需要知道哪些 block 是空閒的。 Ext 使用 bitmap 來達到這個目的。 Bitmap 中的每一個 bit 對應磁盤上的一個 block,當相應 block 被分配後,bitmap 中的相應 bit 被設置為 1 。這是很經典也很清晰的一個設計,但不幸的是當磁盤容量變大時,bitmap 自身所佔用的空間也將變大。這就導致了擴展性問題,隨着存儲設備容量的增加,bitmap 這個元數據所佔用的空間也隨之增加。而人們希望無論磁盤容量如何增加,元數據不應該隨之線形增加,這樣的設計才具有可擴展性

BTRFS優化支持

SSD 是固態存儲 Solid State Disk 的簡稱。在過去的幾十年中,CPU/RAM 等器件的發展始終遵循着摩爾定律,但硬盤 HDD 的讀寫速率卻始終沒有飛躍式的發展。磁盤 IO 始終是系統性能的瓶頸。
SSD 採用 flash memory 技術,內部沒有磁盤磁頭等機械裝置,讀寫速率大幅度提升。 flash memory 有一些不同於 HDD 的特性。 flash 在寫數據之前必須先執行擦除操作;其次,flash 對擦除操作的次數有一定的限制,在技術水平下,對同一個數據單元最多能進行約 10 萬次擦除操作,因此,為了延長 flash 的壽命,應該將寫操作平均到整個 flash 上。
SSD 在硬件內部的微代碼中實現了 wear leveling 等分佈寫操作的技術,因此係統無須再使用特殊的 MTD 驅動和 FTL 層。雖然 SSD 在硬件層面做了很多努力,但畢竟還是有限。文件系統針對 SSD 的特性做優化不僅能提高 SSD 的使用壽命,而且能提高讀寫性能。 Btrfs 是少數專門對 SSD 進行優化的文件系統。 btrfs 用户可以使用 mount 參數打開對 SSD 的特殊優化處理。
Btrfs 的 COW 技術從根本上避免了對同一個物理單元的反覆寫操作。如果用户打開了 SSD 優化選項,btrfs 將在底層的塊空間分配策略上進行優化:將多次磁盤空間分配請求聚合成一個大小為 2M 的連續的塊。大塊連續地址的 IO 能夠讓固化在 SSD 內部的微代碼更好的進行讀寫優化,從而提高 IO 性能 [2] 

BTRFS平台支持

Arch Linux
SLES 11 SP1
Ubuntu 10.10
Sabayon Linux
MeeGo
Slackware 13.37
SLES 11 SP2
Oracle Linux 5 和 6
NETGEAR ReadyNAS OS 6.0 [3] 

BTRFS商業應用

NETGEAR的ReadyNAS OS 6.0成為第一個將btrfs應用於商業環境的操作系統。NETGEAR聲稱經過其工程師的調試,btrfs已經可以應用於商業環境。ReadyNAS OS 6.0實現了無限制快照,防病毒,即時卷擴展和即時卷保護。已經發布的產品包括:RN102,RN104,RN312,RN314,RN316,RN516. [4] 
參考資料