ext與xfs文件系統比較與總結

        最近在複習linux知識,複習到了磁盤管理,現在對各種常用文件系統做個總結。以下內容主要參考自百度百科。


        centos7.0開始默認文件系統是xfs,centos6是ext4,centos5是ext3


1.EXT2簡介


    EXT2第二代擴展文件系統英語:second extended filesystem,縮寫爲 ext2),是LINUX內核所用的文件系統。它開始由Rémy Card設計,用以代替ext,於1993年1月加入linux核心支持之中。ext2 的經典實現爲LINUX內核中的ext2fs文件系統驅動,最大可支持2TB的文件系統,至linux核心2.6版時,擴展到可支持32TB。其他的實現包括GNU Hurd,Mac OS X (第3方),Darwin (第3方),BSD。ext2爲數個LINUX發行版的默認文件系統,如DebianRed Hat Linux等。   

        其單一文件大小與文件系統本身的容量上限與文件系統本身的簇大小有關,在一般常見的 x86 電腦系統中,簇最大爲 4KB, 則單一文件大小上限爲 2048GB, 而文件系統的容量上限爲 16384GB。

        但由於目前核心 2.4 所能使用的單一分割區最大隻有 2048GB,實際上能使用的文件系統容量最多也只有 2048GB。

        至於Ext3文件系統,它屬於一種日誌文件系統,是對ext2系統的擴展。它兼容ext2,並且從ext2轉換成ext3並不複雜。


    Ext2文件系統具有以下一般特點:

1、當創建Ext2文件系統時,系統管理員可以根據預期的文件平均長度來選擇最佳的塊大小(從1024B——4096B)。例如,當文件的平均長度小於幾千字節時,塊的大小爲1024B是最佳的,因爲這會產生較少的內部碎片——也就是文件長度與存放塊的磁盤分區有較少的不匹配。另一方面,大的塊對於 大於幾千字節的文件通常比較合合適,因爲這樣的磁盤傳送較少,因而減輕了系統的開銷.

2、當創建Ext2文件系統時,系統管理員可以根據在給定大小的分區上預計存放的文件數來選擇給該分區分配多少個索引節點。這可以有效地利用磁盤的空間。

3、文件系統把磁盤塊分爲組。每組包含存放在相鄰磁道上的數據塊和索引節點。正是這種結構,使得可以用較少的磁盤平均尋道時間對存放在一個單獨塊組中的文件並行訪問。

4、在磁盤數據塊被實際使用之前,文件系統就把這些塊預分配給普通文件。因此當文件的大小增加時,因爲物理上相鄰的幾個塊已被保留,這就減少了文件的碎片。

5、支持快速符號鏈接。如果符號鏈接表示一個短路徑名(小於或等於60個字符),就把它存放在索引節點中而不用通過由一個數據塊進行轉換。

    

    Ext2還包含了一些使它既健壯又靈活的特點:

1、文件更新策略的謹慎實現將系統崩潰的影響減到最少。我們只舉一個例子來體現這個優點:例如,當給文件創建一個硬鏈接時,首先增加磁盤索引節點中 的硬鏈接計數器,然後把這個新的名字加到合適的目錄中。在這種方式下,如果在更新索引節點後而改變這個目錄之前出現一個硬件故障,這樣即使索引節點的計數 器產生錯誤,但目錄是一致的。因此,儘管刪除文件時無法自動收回文件的數據塊,但並不導致災難性的後果。如果這種處理的順序相反(更新索引節點前改變目 錄),同樣的硬件故障將會導致危險的不一致,刪除原始的硬鏈接就會從磁盤刪除它的數據塊,但新的目錄項將指向一個不存在的索引節點。如果那個索引節點號以 後又被另外的文件所使用,那麼向這個舊目錄的寫操作將毀壞這個新的文件。

2、在啓動時支持對文件系統的狀態進行自動的一致性檢查。這種檢查是由外部程序e2fsck完成的,這個外部程序不僅可以在系統崩潰之後被激活,也 可以在一個預定義的文件系統安裝數(每次安裝操作之後對計數器加1)之後被激活,或者在自從最近檢查以來所花的預定義時間之後被激活。

3、支持不可變(immutable)的文件(不能修改、刪除和更名)和僅追加(append-only)的文件(只能把數據追加在文件尾)。

4、既與Unix System V Release 4(SVR4)相兼容,也與新文件的用戶組ID的BSD語義相兼容。在SVR4中,新文件採用創建它的進程的用戶組ID;而在BSD中,新文件繼承包含它 的目錄的用戶組ID。Ext2包含一個安裝選項,由你指定採用哪種語義。

即使Ext2文件系統是如此成熟、穩定的程序,也還要考慮引入另外幾個負面特性。目前,一些負面特性已新的文件系統或外部補丁避免了。另外一些還僅僅處於計劃階段,但在一些情況下,已經在Ext2的索引節點中爲這些特性引入新的字段。


    最重要的一些特點如下:

    塊片(block fragmentation)

        系統管理員對磁盤的訪問通常選擇較大的塊,因爲計算機應用程序常常處理大文件。因此,在大塊上存放小文件就會浪費很多磁盤空間。這個問題可以通過把幾個文件存放在同一塊的不同片上來解決。

透明地處理壓縮和加密文件

這些新的選項(創建一個文件時必須指定)將允許用戶透明地在磁盤上存放壓縮和(或)加密的文件版本。

    邏輯刪除

        一個undelete選項將允許用戶在必要時很容易恢復以前已刪除的文件內容。

    日誌

        日誌避免文件系統在被突然卸載(例如,作爲系統崩潰的後果)時對其自動進行的耗時檢查。

        實際上,這些特點沒有一個正式地包含在Ext2文件系統中。有人可能說Ext2是這種成功的犧牲品;直到幾年前,它仍然是大多數Linux發佈公司採用的首選文件系統,每天有成千上萬的用戶在使用它,這些用戶會對用其他文件系統來代替Ext2的任何企圖產生質疑。

        Ext2中缺少的最突出的功能就是日誌,日誌是高可用服務器必需的功能。爲了平順過渡,日誌沒有引入到Ext2文件系統;但是,我們在後面 “Ext3文件系統”中會討論,完全與Ext2兼容的一種新文件系統已經創建,這種文件系統提供了日誌。不真正需要日誌的用戶可以繼續使用良好而老式的Ext2文件系統,而其他用戶可能採用這種新的文件系統。現在發行的大部分系統採用Ext3作爲標準的文件系統。


    Ext2文件系統格式

    The Second Extended File System(ext2)文件系統是Linux系統中的標準文件系統,是通過對Minix的文件系統進行擴展而得到的,其存取文件的性能極好。

    在ext2文件系統中,文件由inode(包含有文件的所有信息)進行唯一標識。一個文件可能對應多個文件名,只有在所有文件名都被刪除後,該文件纔會被刪除。此外,同一文件在磁盤中存放和被打開時所對應的inode是不同的,並由內核負責同步。

    ext2文件系統採用三級間接塊來存儲數據塊指針,並以塊(block,默認爲1KB)爲單位分配空間。其磁盤分配策略是儘可能將邏輯相鄰的文件分配到磁盤上物理相鄰的塊中,並儘可能將碎片分配給儘量少的文件,以從全局上提高性能。ext2文件系統將同一目錄下的文件(包括目錄)儘可能的放在同一個塊組中,但目錄則分佈在各個塊組中以實現負載均衡。在擴展文件時,會盡量一次性擴展8個連續塊給文件(以預留空間的形式實現)。



        ext3和ext4的最大區別在於,ext3在fsck時需要耗費大量時間(文件越多,時間越長),而ext4在fsck時用的時間會少非常多

        ext4是第四代擴展文件系統(英語:Fourth EXtended filesystem,縮寫爲ext4)是linux系統下的日誌文件系統,是ext3文件系統的後繼版本
        ext4的文件系統容量達到1EB,而文件容量則達到16TB,這是一個非常大的數字了。對一般的臺式機和服務器而言,這可能並不重要,但對於大型磁盤陣列的用戶而言,這就非常重要了。
        ext3目前只支持32000個子目錄,而ext4取消了這一限制,理論上支持無限數量的子目錄



2.xfs簡介
        xfs是一種非常優秀的日誌文件系統,它是SGI公司設計的。xfs被稱爲業界最先進的、最具可升級性的文件系統技術
        xfs是一個64位文件系統,最大支持8EB減1字節的單個文件系統,實際部署時取決於宿主操作系統的最大塊限制。對於一個32位Linux系統,文件和文件系統的大小會被限制在16TB
        xfs在很多方面確實做的比ext4好,ext4受限制於磁盤結構和兼容問題,可擴展性和scalability確實不如xfs,另外xfs經過很多年發展,各種鎖的細化做的也比較好

        XfS文件系統是SGI開發的高級日誌文件系統,XFS極具伸縮性,非常健壯。所幸的是SGI將其移植到了Linux系統中。在linux環境下。目前版本可用的最新XFS文件系統的爲1.2版本,可以很好地工作在2.4核心下。


    特性:

    主要特性包括以下幾點:

    數據完全性

    採用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操作。這種由分配組帶來的內部分區機制在一個文件系統跨越多個物理設備時特別有用,使得優化對下級存儲部件的吞吐量利用率成爲可能。


    原生備份/恢復工具

    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 。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章