目錄
一、ext4文件系統
二、XFS文件系統
三、其他文件系統
一、ext4文件系統
ext4是第四代擴展文件系統是linux系統下的日志文件系統。
ext4文件系統的特點:
1、更大的文件系統和更大的文件
ext4的文件系統容量達到1EB,而文件容量則達到16TB,這是一個非常大的數字了。對於一般的台式機和服務器而言,這可能並不重要,但對於大型的磁盤陣列的用戶而言,這就非常重要了。
2、更多的子目錄數量
ext4在理論上支持無限制數量的子目錄。
3、更多的塊和i-節點數量
ext4文件系統使用64位空間記錄塊數量和i-節點數量。
4、多塊分配
ext4的多塊分配器“支持一次調用分配多個數據塊”。
5、持久性預分配
ext4在文件系統層面實現了持久預分配並提供相應的API,比應用軟件自己實現更有效率。
6、延遲分配
ext4的策略是盡可能地延遲分配,直到文件在緩沖中寫完才開始分配數據塊並寫入磁盤,這樣就能優化整個文件的數據塊分配,顯著提升性能。
7、盤區結構
ext4引入了盤區概念,每個盤區為一組連續的數據塊,提高訪問效率。
8、新的i-節點結構
ext4支持更大的i-節點,在i-節點中容納更多的擴展屬性,默認i-節點大小為256字節。另外,ext4還支持快速擴展屬性和i-節點保留。
9、日志校驗功能
日志是文件系統最常用的結構,日志也很容易損壞,而從損壞的日志中恢復數據會導致更多的數據損壞。ext4給日志數據添加了校驗功能,日志校驗功能可以很方便地判斷日志數據是否損壞。而且ext4將ext3的兩階段日志機制合並成一個階段,在增加安全性的同時提高了性能。
10、支持“無日志”模式
日志總歸會占用一些開銷。ext4允許關閉日志,以便某些有特殊需求的用戶可以借此提升性能。
11、默認啟用Barrier
磁盤上配有內部緩存,以便重新調整批量數據的寫操作順序,優化寫入性能,因此文件系統必須在日志數據寫入磁盤之後才能寫Commit記錄。若Commit記錄寫入在先,而日志有可能損壞,那麼就會影響數據完整性。ext4文件系統默認啟用Barrier,只有當Barrier之前的數據全部寫入磁盤,才能寫Barrier之後的數據。
12、在線碎片整理 盡管延遲分配、多塊分配和盤區功能可以有效減少文件的碎片,但碎片還是不可避免會產生。ext4支持在線碎片整理,並將提供e4defrag工具進行個別文件或整個文件系統的碎片整理。
13、支持快速fsck ext4給每個塊組的i-節點表中都添加了一份未使用i-節點的列表,所以ext4文件系統做一致性檢查時就可以跳過它們而只去檢查哪些在使用的i-節點,從而提高了速度。
14、支持納秒級時間戳 ext4之前的擴展文件系統的時間戳都是以秒為單位的,這已經能夠應付大多數設置,但隨著處理器的速度和集成程度(多核處理器)不斷提升,以及Linux開始向其他應用領域發展,它將時間戳的單位提升到納秒。 ext4給時間范圍增加了兩個位,從而讓時間壽命在延長500年,ext4的時間戳支持的日期到2514年4月25日。
Ext4文件系統的向前和向後兼容
Ext4文件系統在Ext3的基礎之上做了很多改進,引入了大量新功能,這些改進主要是為了提高未來的Linux系統的性能。 雖然Ext4做了很多改進,但依然能夠與Ext3實現向後和向前的兼容性,這一點的確很難得。 因為Ext3文件系統是Linux操作系統上最受歡迎的文件系統之一,所以Ext4的研發人員考慮到應該讓Ext3用戶能夠輕松遷移到Ext4,為此,Ext4被設計為在盤區結構方面具有向後和向前的兼容性。 首先Ext4是可以向前兼容的,也就是說Ext3文件系統可以掛載為Ext4文件系統使用,不過為了充分利用Ext4的優勢,必須實現文件系統的遷移,以轉換和利用新的Ext4格式。 Ext3文件系統可以在線轉換為Ext4,但這樣並不能用到Ext4的全部新特性,只有將文件系統重新創建為Ext4才比較徹底。 Ext4的向後兼容,向後兼容就是指可以將Ext4文件系統掛載為Ext3文件系統使用,但是前提是Ext4文件系統不能使用盤區功能。
二、XFS文件系統
XFS一種高性能的日志文件系統,極具伸縮性,非常健壯。,特別擅長處理大文件,同時提供平滑的數據傳輸。
主要特性包括以下幾點: 數據完全性 采用XFS文件系統,當意想不到的宕機發生後,首先,由於文件系統開啟了日志功能,所以你磁盤上的文件不再會意外宕機而遭到破壞了。不論目前文件系統上存儲的文件與數據有多少,文件系統都可以根據所記錄的日志在很短的時間內迅速恢復磁盤文件內容。 傳輸特性 XFS文件系統采用優化算法,日志記錄對整體文件操作影響非常小。XFS查詢與分配存儲空間非常快。xfs文件系統能連續提供快速的反應時間。筆者曾經對XFS、JFS、Ext3、ReiserFS文件系統進行過測試,XFS文件文件系統的性能表現相當出眾。 可擴展性 XFS 是一個全64-bit的文件系統,它可以支持上百萬T字節的存儲空間。對特大文件及小尺寸文件的支持都表現出眾,支持特大數量的目錄。最大可支持的文件大 小為263 = 9 x 1018 = 9 exabytes,最大文件系統尺寸為18 exabytes。 XFS使用高的表結構(B+樹),保證了文件系統可以快速搜索與快速空間分配。XFS能夠持續提供高速操作,文件系統的性能不受目錄中目錄及文件數量的限制。 傳輸帶寬 XFS 能以接近裸設備I/O的性能存儲數據。在單個文件系統的測試中,其吞吐量最高可達7GB每秒,對單個文件的讀寫操作,其吞吐量可達4GB每秒。
容量
XFS是一個64位文件系統,最大支持 8exbibytes 減1字節的單個文件系統,實際部署時取決於宿主操作系統的最大塊限制。對於一個32位Linux系統,文件和文件系統的大小會被限制在 16tebibytes。
文件系統日志
日志文件系統是一種即使在斷電或者是操作系統崩潰的情況下保證文件系統一致性的途徑。XFS對文件系統元數據提供了日志支持。當文件系統更新時,元數據會在實際的磁盤塊被更新之前順序寫入日志。XFS的日志被保存在磁盤塊的循環緩沖區上,不會被正常的文件系統操作影響。XFS日志大小的上限是64k個塊和128MB中的較大值,下限取決於已存在的文件系統和目錄的塊的大小。在外置設備上部署日志會浪費超過最大日志大小的空間。XFS日志也可以被存在文件系統的數據區(稱為內置日志),或者一個額外的設備上(以減少磁盤操作)。
XFS的日志保存的是在更高層次上描述已進行的操作的“邏輯”實體。相比之下,“物理”日志存儲每次事務中被修改的塊。為了保證性能,日志的更新是異步進行的。當系統崩潰時,崩潰的一瞬間之前所進行的所有操作可以利用日志中的數據重做,這使得XFS能保持文件系統的一致性。XFS在掛載文件系統的同時進行恢復,恢復速度與文件系統的大小無關。對於最近被修改但未完全寫入磁盤的數據,XFS保證在重啟時清零所有未被寫入的數據塊,以防止任何有可能的、由剩余數據導致的安全隱患(因為雖然從文件系統接口無法訪問這些數據,但不排除裸設備或裸硬件被直接讀取的可能性)。
分配組
XFS文件系統內部被分為多個“分配組”,它們是文件系統中的等長線性存儲區。每個分配組各自管理自己的inode和剩余空間。文件和文件夾可以跨越分配組。這一機制為XFS提供了可伸縮性和並行特性——多個線程和進程可以同時在同一個文件系統上執行I/O操作。這種由分配組帶來的內部分區機制在一個文件系統跨越多個物理設備時特別有用,使得優化對下級存儲部件的吞吐量利用率成為可能。
條帶化分配
在條帶化RAID陣列上創建XFS文件系統時,可以指定一個“條帶化數據單元”。這可以保證數據分配、inode分配、以及內部日志被對齊到該條帶單元上,以此最大化吞吐量。
基於Extent的分配方式
XFS文件系統中的文件用到的塊由變長Extent管理,每一個Extent描述了一個或多個連續的塊。相比將每個文件用到的所有的塊存儲為列表的文件系統,這種策略大幅縮短了列表的長度。有些文件系統用一個或多個面向塊的柵格管理空間分配——在XFS中這種結構被由一對B+樹組成的、面向Extent的結構替代了;每個文件系統分配組(AG)包含這樣的一個結構。其中,一個B+樹用於索引未被使用的Extent的長度,另一個索引這些Extent的起始塊。這種雙索引策略使得文件系統在定位剩余空間中的Extent時十分高效。
可變塊尺寸
塊是文件系統中的最小可分配單元。XFS允許在創建文件系統時指定塊的大小,從 512 字節到 64KB,以適應專門的用途。比如,對於有很多小文件的應用,較小的塊尺寸可以最大化磁盤利用率;但對於一個主要處理大文件的系統,較大的塊尺寸能提供更好的性能。
延遲分配
主條目:延遲分配
XFS在文件分配上使用了惰性計算技術。當一個文件被寫入緩存時,XFS簡單地在內存中對該文件保留合適數量的塊,而不是立即對數據分配Extent。實際的塊分配僅在這段數據被沖刷到磁盤時才發生。這一機制提高了將這一文件寫入一組連續的塊中的機會,減少碎片的同時提升了性能。
稀疏文件
XFS對每個文件提供了一個64位的稀疏地址空間,使得大文件中的“洞”(空白數據區)不被實際分配到磁盤上。因為文件系統對每個文件使用一個Extent表,文件分配表就可以保持一個較小的體積。對於太大以至於無法存儲在inode中的分配表,這張表會被移動到B+樹中,繼續保持對該目標文件在64位地址空間中任意位置的數據的高效訪問。
擴展屬性
XFS通過實現擴展文件屬性給文件提供了多個數據流,使文件可以被附加多個名/值對。文件名是一個最大長度為256字節的、以NULL字符結尾的可打印字符串,其它的關聯值則可包含多達 64KB 的二進制數據。這些數據被進一步分入兩個名字空間中,root和user。保存在root名字空間中的擴展屬性只能被超級用戶修改,user名字空間中的可以被任何對該文件擁有寫權限的用戶修改。擴展屬性可以被添加到任意一種XFS inode上,包括符號鏈接、設備節點、目錄,等等。可以使用 attr 這個命令行程序操作這些擴展屬性。xfsdump 和 xfsrestore 工具在進行備份和恢復時會一同操作擴展屬性,而其它的大多數備份系統則會忽略擴展屬性。
Direct I/O
對於要求高吞吐量的應用,XFS給用戶空間提供了直接的、非緩存I/O的實現。數據在應用程序的緩沖區和磁盤間利用DMA進行傳輸,以此提供下級磁盤設備全部的I/O帶寬。
確定速率 I/O
XFS確定速率I/O系統給應用程序提供了預留文件系統帶寬的API。XFS會動態計算下級存儲設備能提供的性能,並在給定的時間內預留足夠的帶寬以滿足所要求的性能。此項特性是XFS所獨有的。確定方式可以是硬性的或軟性的,前者提供了更高性能,而後者相對更加可靠。不過只要下級存儲設備支持硬性速率確定,XFS就只允許硬性模式。這一機制最常被用在實時應用中,比如視頻流。
DMAPI
XFS實現了數據管理應用程序接口(DMAPI)以支持高階存儲管理(HSM)。到2010年10月為止,Linux上的XFS實現已經支持DMAPI所要求的的磁盤元數據規范,但有報告稱內核支持仍處於不穩定狀態。此前SGI曾提供了一個包含DMAPI鉤子的內核源碼樹,但這個支持未被合並進主代碼樹。不過現在內核開發者們已經注意到了它並對其做了更新。
快照
XFS並不直接提供對文件系統快照的支持,因為XFS認為快照可在卷管理器中實現。對一個XFS文件系統做快照需要調用 xfs_freeze 工具凍結文件系統的I/O,然後等待卷管理器完成實際的快照創建,再解凍I/O,繼續正常的操作。之後這個快照可以被當作備份,以只讀方式掛載。在IRIX上發布的XFS包含了一個整合的卷管理器,叫XLV。這個卷管理器無法被移植到Linux上,不過XFS可以和Linux上標准的LVM正常工作。在最近發布的Linux內核中,xfs_freeze 的功能被實現在了VFS層,當卷管理器的快照功能被喚醒時將自動啟動 xfs_freeze。相對於無法掛起,卷管理器也無法對其創建“熱”快照的ext3文件系統,XFS的快照功能具有很大優勢。幸運地是,現在這種情況已經改觀。從Linux 2.6.29內核開始,ext3, ext4, gfs2和jfs文件系統也獲得了凍結文件系統的特性。
在線碎片整理
雖然XFS基於Extent的特征和延遲分配策略顯著提高了文件系統對碎片問題的抵抗力,XFS還是提供了一個文件系統碎片整理工具,xfs_fsr(XFS filesystem reorganizer的簡稱)。這個工具可以對一個已被掛載、正在使用中的XFS文件系統進行碎片整理。
在線尺寸調整
XFS提供了 xfs_growfs 工具,可以在線調整XFS文件系統的大小。XFS文件系統可以向保存當前文件系統的設備上的未分配空間延伸。這個特性常與卷管理功能結合使用,因為後者可以把多個設備合並進一個邏輯卷組,而使用硬盤分區保存XFS文件系統時,每個分區需要分別擴容。到2010年8月為止,XFS分區不可以原位收縮,不過有一些方法可以變相處理這個問題。
原生備份/恢復工具
XFS提供了 xfsdump 和 xfsrestore 工具協助備份XFS文件系統中的數據。xfsdump 按inode順序備份一個XFS文件系統。與傳統的UNIX文件系統不同,XFS不需要在dump前被卸載;對使用中的XFS文件系統做dump就可以保證鏡像的一致性。這與XFS對快照的實現不同,XFS的dump和restore的過程是可以被中斷然後繼續的,無須凍結文件系統。xfsdump 甚至提供了高性能的多線程備份操作——它把一次dump拆分成多個數據流,每個數據流可以被發往不同的目的地。不過到目前為止,Linux尚未完成對多數據流dump功能的完整移植。
原子磁盤配額
XFS的磁盤配額在文件系統被初次掛載時啟用。這解決了一個在其它大多數文件系統中存在的一個競爭問題:要求先掛載文件系統,但直到調用quotaon(8)之前配額不會生效。
性能考慮
寫入屏障
XFS文件系統默認在掛載時啟用“寫入屏障”的支持。該特性會一個合適的時間沖刷下級存儲設備的寫回緩存,特別是在XFS做日志寫入操作的時候。這個特性的初衷是保證文件系統的一致性,具體實現卻因設備而異——不是所有的下級硬件都支持緩存沖刷請求。在帶有電池供電緩存的硬件RAID控制器提供的邏輯設備上部署XFS文件系統時,這項特性可能導致明顯的性能退化,因為文件系統的代碼無法得知這種緩存是非易失性的。如果該控制器又實現了沖刷請求,數據將被不必要地頻繁寫入物理磁盤。為了防止這種問題,對於能夠在斷電或發生其它主機故障時保護緩存中數據的設備,應該以 nobarrier 選項掛載XFS文件系統。
日志的放置
XFS文件系統創建時默認使用內置日志,把日志和文件系統數據放置在同一個塊設備上。由於在所有的文件系統寫入發生前都要更新日志中的元數據,內置日志可能導致磁盤競爭。在大多數負載下,這種等級的競爭非常低以至於對性能沒有影響。但對於沉重的隨機寫入負載,比如在忙碌的數據塊服務器上,XFS可能因為這種I/O競爭無法獲得最佳性能。另一個可能提高這個問題的嚴重性的因素是,日志寫入被要求以同步方式提交——它們必須被完全寫入,之後對應實際數據的寫入操作才能開始。
如果確實需要最佳的文件系統性能,XFS提供了一個選項,允許把日志放置在一個分離的物理設備上。這只需要很小的物理空間。分離的設備有自己的I/O路徑,如果該設備能對同步寫入提供低延遲的路徑,那麼它將給整個文件系統的操作帶來顯著的性能提升。SSD,或帶有寫回緩存的RAID系統是日志設備的合適候選,它們能滿足這種性能要求。不過後者在遭遇斷電時可能降低數據的安全性。要啟用外部日志,只須以 logdev 選項掛載文件系統,並指定一個合適的日志設備即可。
缺點
XFS文件系統無法被收縮。
歷史上XFS上的元數據操作曾比其它文件系統都慢,表現為在刪除大量小文件時性能糟糕。該性能問題是被Red Hat的XFS開發者Dave Chinner在代碼中定位到的。使用一個叫“延遲記錄”的掛載選項可以成數量級地提升元數據操作的性能。該選項幾乎把日志整個存在內存中。Linux內核主線版本2.6.35中作為一個試驗性特性引入了這個補丁,在2.6.37中使它成為了一個穩定的特性,並計劃在2.6.39中把它作為默認的日志記錄方法。早期測試顯示在有少量線程的環境中其性能接近EXT4,在大量線程的環境下超過了EXT4。
三、其他文件系統
Minix 是Linux支持的第一個文件系統,對用戶有很多限制,性能低下,有些沒有時間標記,文件名最長l4個字符。Minix文件系統最大缺點是只能使用64MB的硬盤分區,所以目前已經沒有人使用它了。
Xia 是Minix文件系統修正後的版本,在一定程度上解決了文件名和文件系統大小的局限。但是沒有新的特色,目前很少有人使用。
ISO9660 標准CDROM文件系統,通用的Rock Ridge增強系統,允許長文件名。
NFS Sun公司推出的網絡文件系統,允許多台計算機之間共享同一文件系統,易於從所有這些計算機上存取文件。
SysV 是System V/Coherent在Linux平台上的文件系統。
除了上面這些Linux文件系統外,Linux也可以支持基於Windows和Netware的文件系統,例如UMSDOS、 MSDOS、VFAT、HPFS、SMB和NCPFS等。兼容這些文件系統對Linux用戶也是很重要的,畢竟在桌面環境下Windows文件系統還是很流行的,而Netware網絡也有許多用戶,Linux用戶也需要共享這些文件系統的數據。
UMSDOS Linux下的擴展MSDOS文件系統驅動,支持長文件名、所有者、允許權限、連接和設備文件。允許一個普通的MSDOS文件系統用於Linux,而且無須為它建立單獨的分區。
MSDOS 是在DOS、Windows和某些OS/2操作系統上使用的一種文件系統,其名稱采用“8+3”的形式,即8個字符的文件名加上3個字符的擴展名。
VFAT 是Windows 9x和Windows NT/2000下使用的一種DOS文件系統,其在DOS文件系統的基礎上增加了對長文件名的支持。
HPFT 高性能文件系統(High Performance File System,HPFS)是微軟的LAN Manager中的文件系統,同時也是IBM的LAN Server和OS/2的文件系統。HPFT能訪問較大的硬盤驅動器,提供了更多的組織特性,並改善了文件系統的安全特性。
SMB 是一種支持Windows for Workgroups、Windows NT和Lan Manager的基於SMB協議的網絡操作系統。
NCPFS 是一種Novell NetWare使用的NCP協議的網絡操作系統。
NTFS 是Windows NT/2000操作系統支持的、一個特別為網絡和磁盤配額、文件加密等管理安全特性設計的磁盤格式。