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