Linux 寫時復制文件系統
前小節介紹了 Linux 日志文件系統,本小節介紹 Linux 寫時復制文件系統。
1. ZFS 文件系統介紹
ZFS
文件系統的英文名稱為 Zettabyte File System
,也叫動態文件系統(Dynamic File System
),是第一個 128
位文件系統。最初是由 Sun
公司為 Solaris 10
操作系統開發的文件系統。作為 OpenSolaris
開源計劃的一部分,ZFS
于 2005 年 11 月發布,被 Sun
稱為是終極文件系統,經歷了 10
年的活躍開發。而最新的開發將全面開放,并重新命名為 OpenZFS
。
ZFS
是一款 128bit
文件系統,總容量是現有 64bit
文件系統的 1.84x10^19
倍,其支持的單個存儲卷容量達到 16EiB
(2^64byte
,即 16x1024x1024TB
);一個 zpool
存儲池可以擁有 2^64
個卷,總容量最大 256ZiB
(2^78 byte
);整個系統又可以擁有 2^64
個存儲 池??梢哉f在相當長的未來時間內,ZFS
幾乎不太可能出現存儲空間不足的問題。另外,它還擁有自優化,自動校驗數據完整性,存儲池/卷系統易管理等諸多優點。較 ext3
系統有較大運行速率,提高大約 30%-40%
。
ZFS
文件系統是一個革命性的全新的文件系統,它從根本上改變了文件系統的管理方式,這個文件系統的特色和其帶來的好處至今沒有其他文件系統可以與之媲美,ZFS
被設計成強大的、可升級并易于管理的。ZFS
用 “存儲池” 的概念來管理物理存儲空間。過去,文件系統都是構建在物理設備之上的。為了管理這些物理設備,并為數據提供冗余,“卷管理” 的概念提供了一個單設備的映像。但是這種設計增加了復雜性,同時根本沒法使文件系統向更高層次發展,因為文件系統不能跨越數據的物理位置。
ZFS
完全拋棄了 “卷管理”,不再創建虛擬的卷,而是把所有設備集中到一個存儲池中來進行管理,“存儲池” 描述了存儲的物理特征(設備的布局,數據的冗余等等),并扮演一個能夠創建文件系統的專門存儲空間。從此,文件系統不再局限于單獨的物理設備,而且文件系統還允許物理設備把他們自帶的那些文件系統共享到這個 “池” 中。你也不再需要預先規劃好文件系統的大小,因為文件系統可以在 “池” 的空間內自動的增大。當增加新的存貯介質時,所有 “池” 中的所有文件系統能立即使用新增的空間,而不需要額外的操作。在很多情況下,存儲池扮演了一個虛擬內存。
ZFS
使用一種寫時拷貝事務模型技術。所有文件系統中的塊指針都包括 256 位的能在讀時被重新校驗的關于目標塊的校驗和。含有活動數據的塊從來不被覆蓋;而是分配一個新塊,并把修改過的數據寫在新塊上。所有與該塊相關的元數據塊都被重新讀、分配和重寫。為了減少該過程的開銷,多次讀寫更新被歸納為一個事件組,并且在必要的時候使用日志來同步寫操作。
利用寫時拷貝使 ZFS
的快照和事物功能的實現變得更簡單和自然,快照功能更靈活。缺點是,COW
使碎片化問題更加嚴重,對于順序寫生成的大文件,如果以后隨機的對其中的一部分進行了更改,那么這個文件在硬盤上的物理地址就變得不再連續,未來的順序讀會變得性能比較差。
2. BTRFS 文件系統介紹
BTRFS
(通常念成 Butter FS
),由 Oracle
于 2007 年宣布并進行中的 COW
(copy-on-write
式)文件系統。目標是取代 Linux ext3
文件系統,改善 ext3
的限制,特別是單一文件大小的限制,總文件系統大小限制以及加入文件校驗和特性。加入 ext3/4
未支持的一些功能,例如可寫的磁盤快照(snapshots
),以及支持遞歸的快照(snapshots of snapshots
),內建磁盤陣列(RAID
)支持,支持子卷(Subvolumes
)的概念,允許在線調整文件系統大小。
首先是擴展性 (scalability
) 相關的特性,btrfs
最重要的設計目標是應對大型機器對文件系統的擴展性要求。 Extent
、B-Tree
和動態 inode
創建等特性保證了 btrfs
在大型機器上仍有卓越的表現,其整體性能而不會隨著系統容量的增加而降低。其次是數據一致性 (data integrity
) 相關的特性。系統面臨不可預料的硬件故障,Btrfs
采用 COW
事務技術來保證文件系統的一致性。 btrfs
還支持 checksum
,避免了 silent corrupt
的出現。而傳統文件系統則無法做到這一點。第三是和多設備管理相關的特性。 Btrfs
支持創建快照 (snapshot
),和克隆 (clone
) 。 btrfs
還能夠方便的管理多個物理設備,使得傳統的卷管理軟件變得多余。最后是其他難以歸類的特性。這些特性都是比較先進的技術,能夠顯著提高文件系統的時間/空間性能,包括延遲分配,小文件的存儲優化,目錄索引等。
3. BTRFS 文件系統特性
-
可由底層多個物理卷進行支持。
-
數據存儲形式支持
RAID
,同時在聯機的情況下進行“添加硬盤”、“移除硬盤”、“修改文件系統的大小”。 -
支持寫時復制更新機制,即當我們修改文件時,btrfs先復制一份原文件,對新文件進行修改,結束時,原文件名指向新文件。
-
支持卷的快照和快照的快照。
-
透明壓縮,即當文件系統存儲文件時,文件系統會自動將文件進行壓縮再存儲,當提取時,文件系統自動進行解壓縮,但是用戶看不到此過程。
-
擴展性 (
scalability
),btrfs
最重要的設計目標是應對大型機器對文件系統的擴展性要求。Extent
、B-Tree
、inode
創建等特性保證了btrfs
在大型機器上仍有卓越的表現,其整體性能而不會隨著系統容量的增加而降低。 -
數據一致性 (
data integrity
)。系統面臨不可預料的硬件故障,Btrfs
采用COW
事務技術來保證文件系統的一致性。btrfs
還支持checksum
,避免了silent corrupt
的出現。而傳統文件系統則無法做到這一點。 -
多設備管理相關的特性。
Btrfs
支持創建快照 (snapshot
)、克隆 (clone
) 。btrfs
還能夠方便的管理多個物理設備,使得傳統的卷管理軟件變得多余。
4. 小結
本小節介紹了 ZFS
、BTRFS
兩種寫時復制文件系統,寫時復制文件系統采用了日志式技術,你就必須在安全性和性能之間選擇,盡管數據模式日志提供了最高的安全性,但是會對性能帶來影響,因為索引節點和數據都需要被日志化,就文件系統而言,日志式的另一種選擇是一種叫 寫時復制
的技術。