亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Linux 日志文件系統

前小節介紹了早期的 Linux 文件系統,本小節介紹 Linux 日志文件系統,日志文件系統是給 Linux 操作系統增加了一些安全相關能力,日志文件系統和早期的文件系統相比,它并不是先把數據寫到中間存儲設備,然后再寫到存儲設備索引節點的,而是先把數據寫道臨時生成的文件中(稱為日志),然后數據成功同步到存儲設備和索引節點表,再刪除對應的日志數據。本小節介紹 Linux 常見的日志文件系統。

1. ext3 文件系統介紹

ext3 文件系統是第三代擴展文件系統(Third extended filesystem,縮寫為 ext3),它是一個日志文件系統,經常被用于 Linux 操作系統中,它是很多 Linux 發行版的默認文件系統。Stephen Tweedie 在 1999 年 2 月將該文件系統從 2.4.15 版本的內核開始,合并到內核主線中,它是對 ext2 系統的擴展,并且它兼容 ext2。

日志式文件系統的優越性在于:由于文件系統都有快取層參與運作,若不使用時必須將文件系統卸下,以便將快取層的資料寫回磁盤中,因此每當系統要關機時,必須將其所有的文件系統全部 shutdown 后才能進行關機,若在文件系統尚未 shutdown 前就關機如(停電)時,下次重開機后會造成文件系統的資料不一致,故這時必須做文件系統的重整工作,將不一致與錯誤的地方修復。

然而,此一重整的工作是相當耗時的,特別是容量大的文件系統,而且也不能百分之百保證所有的資料都不會流失,此類文件系統最大的特色就是它會將整個磁盤的寫入動作完整記錄在磁盤的某個區域上,以便有需要時可以回溯追蹤。當在某個過程中被中斷時,系統可以根據這些記錄直接回溯并重整被中斷的部分,而不必花時間去檢查其他的部分,故重整的工作速度相當快,幾乎不需要花時間。

1.1 ext3 日志文件系統特點

  • 高可用性:系統使用了 ext3 文件系統后,即使在非正常關機后,系統也不需要檢查文件系統。宕機發生后,恢復 ext3 文件系統的時間只要數十秒鐘。

  • 數據的完整性ext3 文件系統能夠極大地提高文件系統的完整性,避免了意外宕機對文件系統的破壞。在保證數據完整性方面,ext3 文件系統有兩種模式可供選擇。其中之一就是 同時保持文件系統及數據的一致性 模式。采用這種方式,你永遠不再會看到由于非正常關機而存儲在磁盤上的垃圾文件。

  • 文件系統的速度:盡管使用 ext3 文件系統時,有時在存儲數據時可能要多次寫數據,但是,從總體上看來,ext3ext2 的性能還要好一些。這是因為 ext3 的日志功能對磁盤的驅動器讀寫頭進行了優化。所以,文件系統的讀寫性能較之 ext2 文件系統并來說,性能并沒有降低。

  • 數據轉換:由 ext2 文件系統轉換成 ext3 文件系統非常容易,只要簡單地鍵入兩條命令即可完成整個轉換過程,用戶不用花時間備份、恢復、格式化分區等。用一個 ext3 文件系統提供的小工具 tune2fs,它可以將 ext2 文件系統輕松轉換為 ext3 日志文件系統。另外,ext3 文件系統可以不經任何更改,而直接加載成為 ext2 文件系統。

  • 多種日志模式ext3 有多種日志模式,一種工作模式是對所有的文件數據及 metadata(定義文件系統中數據的數據,即數據的數據)進行日志記錄(data=journal 模式);另一種工作模式則是只對 metadata 記錄日志,而不對數據進行日志記錄,也即所謂 data=ordered 或者 data=writeback 模式。系統管理人員可以根據系統的實際工作要求,在系統的工作速度與文件數據的一致性之間作出選擇。

2. ext4 文件系統介紹

ext4 是第四代擴展文件系統(Fourth extended filesystem,縮寫為 ext4),它是 Linux 系統下的日志文件系統,是 ext3 文件系統的后繼版本。ext4 是由 ext3 的維護者 Theodore Tso 領導的開發團隊實現的,并引入到 Linux2.6.19 內核中。ext4 產生原因是開發人員在 ext3 中加入了新的高級功能,但在實現的過程出現了一些重要問題:

  • 一些新功能違背向后兼容性;
  • 新功能使 ext3 代碼變得更加復雜并難以維護;
  • 新加入的更改使原來十分可靠的 ext3 變得不可靠。

由于上述原因,從 2006 年 6 月份開始,開發人員決定把 ext4ext3 中分離出來進行獨立開發。ext4 的開發工作從那時起開始進行,但大部分 Linux 用戶和管理員都沒有太關注這件事情,直到 2.6.19 內核在 2006 年 11 月的發布。ext4 第一次出現在主流內核里,但是它當時還處于試驗階段,因此很多人都忽視了它。

2008 年 12 月 25 日,Linux Kernel 2.6.28 的正式版本發布。隨著這一新內核的發布,ext4 文件系統也結束實驗期,成為穩定版。

2.1 ext4 文件系統的特點

  • 更大的文件系統和更大的文件ext3 文件系統最多只能支持 32TB 的文件系統和 2TB 的文件,根據使用的具體架構和系統設置,實際容量上限可能比這個數字還要低,即只能容納 2TB 的文件系統和 16GB 的文件。而 ext4 的文件系統容量達到 1EB,而文件容量則達到 16TB,這是一個非常大的數字了。對一般的臺式機和服務器而言,這可能并不重要,但對于大型磁盤陣列的用戶而言,這就非常重要了。

  • 更多的子目錄數量ext3 目前只支持 32000 個子目錄,而 ext4 取消了這一限制,理論上支持無限數量的子目錄。

  • 更多的塊和i-節點數量ext3 文件系統使用 32 位空間記錄塊數量和 i-節點數量,而 ext4 文件系統將它們擴充到 64 位。

  • 多塊分配:當數據寫入到Ext3文件系統中時,Ext3的數據塊分配器每次只能分配一個4KB的塊,如果寫一個 100MB 的文件就要調用 25600 次數據塊分配器,而Ext4的多塊分配器 Multiblock Allocator(MBAlloc) 支持一次調用分配多個數據塊。

  • 持久性預分配:如果一個應用程序需要在實際使用磁盤空間之前對它進行分配,大部分文件系統都是通過向未使用的磁盤空間寫入 0 來實現分配,比如 P2P 軟件。為了保證下載文件有足夠的空間存放,常常會預先創建一個與所下載文件大小相同的空文件,以免未來的數小時或數天之內磁盤空間不足導致下載失敗。而 ext4 在文件系統層面實現了持久預分配并提供相應的 API,比應用軟件自己實現更有效率。

  • 延遲分配ext3 的數據塊分配策略是盡快分配,而 ext4 的策略是盡可能地延遲分配,直到文件在緩沖中寫完才開始分配數據塊并寫入磁盤,這樣就能優化整個文件的數據塊分配,顯著提升性能。

  • 盤區結構ext3 文件系統采用間接映射地址,當操作大文件時,效率極其低下。例如,一個 100MB 大小的文件,在 ext3 中要建立 25600 個數據塊(以每個數據塊大小為 4KB 為例)的映射表,而 ext4 引入了盤區概念,每個盤區為一組連續的數據塊,上述文件可以通過盤區的方式表示為 該文件數據保存在接下來的 25600 個數據塊中,提高了訪問效率。

  • 新的i-節點結構ext4 支持更大的 i-節點。之前的 ext3 默認的 i-節 點大小 128 字節,ext4 為了在 i-節點 中容納更多的擴展屬性,默認 i-節點 大小為 256 字節。另外,ext4 還支持快速擴展屬性和 i-節點 保留。

  • 日志校驗功能:日志是文件系統最常用的結構,日志也很容易損壞,而從損壞的日志中恢復數據會導致更多的數據損壞。ext4 給日志數據添加了校驗功能,日志校驗功能可以很方便地判斷日志數據是否損壞。而且 ext4ext3 的兩階段日志機制合并成一個階段,在增加安全性的同時提高了性能。

  • 支持無日志模式:日志總歸會占用一些開銷。ext4 允許關閉日志,以便某些有特殊需求的用戶可以借此提升性能。

  • 默認啟用Barrier:磁盤上配有內部緩存,以便重新調整批量數據的寫操作順序,優化寫入性能,因此文件系統必須在日志數據寫入磁盤之后才能寫 Commit 記錄。若 Commit 記錄寫入在先,而日志有可能損壞,那么就會影響數據完整性。 ext4 文件系統默認啟用 Barrier,只有當 Barrier 之前的數據全部寫入磁盤,才能寫 Barrier 之后的數據。

  • 在線碎片整理:盡管延遲分配、多塊分配和盤區功能可以有效減少文件的碎片,但碎片還是不可避免會產生。ext4 支持在線碎片整理,并將提供 e4defrag 工具進行個別文件或整個文件系統的碎片整理。

  • 支持快速fsck:以前的文件系統版本執行 fsck 時很慢,因為它要檢查所有的 i-節點,而 ext4 給每個塊組的i-節點 表中都添加了一份未使用i-節點的列表,所以 ext4 文件系統做一致性檢查時就可以跳過它們而只去檢查哪些在使用的 i-節點,從而提高了速度。

  • 支持納秒級時間戳ext4 之前的擴展文件系統的時間戳都是以秒為單位的,這已經能夠應付大多數設置,但隨著處理器的速度和集成程度(多核處理器)不斷提升,以及 Linux 開始向其他應用領域發展,它將時間戳的單位提升到納秒。ext4 給時間范圍增加了兩個位,從而讓時間壽命在延長 500 年,ext4 的時間戳支持的日期到 2514 年 4 月 25 日,而 ext3 只達到 2038 年 1 月 18 日。

3. ReiserFS 文件系統介紹

ReiserFS 是一種新型的文件系統,它通過一種與眾不同的方式,完全平衡樹結構來容納數據,包括文件數據,文件名以及日志支持。ReiserFS 還以支持海量磁盤和磁盤陣列,并能在上面繼續保持很快的搜索速度和很高的效率。與 ext2 相比,ReiserFS 有先進的日志 (Journaling/logging) 功能 機制。日志機制保證了在每個實際數據修改之前,相應的日志已經寫入硬盤。文件與數據的安全性有了很大提高。

3.1 ReiserFS 文件系統的特點

  • 高效的磁盤空間利用ReiserFS 對一些小文件不分配 inode。而是將這些文件打包,存放在同一個磁盤分塊中。而其它文件系統則為每個小文件分別放置到一個磁盤分塊中。這意味著:如果有 10000 個小文件,就要占用 10000 個分塊,有點浪費磁盤空間。

  • 獨特的搜尋方式ReiserFS 基于快速平衡樹 (balanced tree) 搜索,平衡樹在性能上非常卓越,這是一種非常高效的算法。Reiser 搜索大量文件時,搜索速度要比 ext2 快得多。ReiserFS 文件系統使用 B*Tree 存儲文件,而其它文件系統使用 B+Tree 樹。B*Tree 查詢速度比 B+Tree 要快很多。ReiserFS 在文件定位上速度非??臁?br> 在實際運用中,ReiserFS 在處理小于 1k 的文件時,比 ext2 快 8 到 15 倍,ReiserFS 幾乎在各個方面都優于 ext2。

  • 支持海量磁盤:ReiserFS 是一個非常優秀的文件系統,可輕松管理上百 G 的文件系統,ReiserFS 文件系統最大支持的文件系統尺寸為 16TB。這非常適合企業級應用中。

  • 優異的性能:由于它的高效存儲和快速小文件 I/O 特點,使用 ReiserFS 文件系統的 PC,在啟動 X 窗口系統時,所花的時間要比在同一臺機器上使用 ext2 文件系統少 1/3。另外,ReiserFS 文件系統支持單個文件尺寸為 4G 的文件,這為大型數據庫系統在 linux 上的應用提供了更好的選擇。

  • 搜尋方式ReiserFS 是基于平衡樹 (STree) 的文件系統結構,尤其對于大量文件的巨型文件系統,如服務器上的文件系統,搜索速度要比 ext2快,ext2 使用局部的二分查找法,綜合性能比不上 ReiserFS。在 Reiser4 中還運用了文件即是目錄的設計來管理 meta-data,并且運用了 Hans Reiser 自己發明的 Dancing B-tree ,效率提升非常明顯。

  • 空間分配和利用情況ReiserFS 里的目錄是完全動態分配的,因此不存在 ext2 中常見的無法回收巨型目錄占用的磁盤空間的情況。ReiserFS 里小文件(< 4K)可以直接存儲進樹,小文件讀取和寫入的速度更快,樹內節點是按字節對齊的,小的文件可共享同一個硬盤塊,節約大量空間。ext2 使用固定大小的塊分配策略,也就是說,不到 4K 的小文件也要占據4K的空間,導致的空間浪費比較嚴重。

  • 缺點:出現異常斷電的時候,會出現大量的未寫入完全的數據。ReiserFS 會在恢復的時候進行 rebuild-tree。而這個過程是非常慢的。在 ReiserFS 的升級版本 Reiser4 中有所改觀。

3.2 ReiserFS 與 ext3 的比較

從技術層面來講兩者文件系統有很大的不同,但對于很多人來說,關注其中幾點即可:

  • 第一,是你可以很方便地從 ext2 格式進行升級,因為到目前為止,很多 Linux 發行套件仍然在使用這種文件系統。

  • 第二,就是 ext3 不僅可以記錄數據日志(這在 ext2 中就已經具備),而且在此基礎上還可以記錄元數據 (Metadata)日志。現在的 ReiserFS 則只有日志元數據。

  • 第三,就是文件系統的可擴展性。在介紹第三點以前,讓我們先來看一看前兩個不同點,因為第三點值得我們特別關注。就 ext3 來說,它可以方便地從 ext2 文件系統進行升級轉換是其一大優勢。當然,對于一直使用 ReiserFS 的人來說,這沒有什么意義。但是,大多數用戶并不愿意嘗試使用 ext3 以外的任何一種日志文件系統。原因很簡單,把 ext2 轉換到 ext3 要比轉換成其它任何一種文件系統更簡單、快捷。

4. JFS 文件系統介紹

JFS( JOURNAL FILE SYSTEM),一種字節級日志文件系統,借鑒了數據庫保護系統的技術,以日志的形式記錄文件的變化。JFS通過記錄文件結構而不是數據本身的變化來保證數據的完整性。這種方式可以確保在任何時刻都能維護數據的可訪問性。

4.1 JFS 體系結構和設計

  • 體系結構和設計JFS 體系結構可從磁盤布局特性的角度進行說明。

  • 邏輯,卷所有文件系統討論的基礎是某種類型的邏輯卷。

  • 聚集和文件集,文件系統創建實用程序 mkfs,創建了完全包含在分區內的聚集。聚集是包含一種特定格式的磁盤塊陣列,其格式包括超級塊和分配映射表。超級塊將分區標識成 JFS 聚集,而分配映射表描述聚集內每個數據塊的分配狀態。格式還包括描述它所必需的初始文件集和控制結構。文件集是可安裝的實體。

  • 文件、目錄、inode 與尋址結構,文件集包含文件和目錄。文件和目錄由 inode 持續表示,每個 inode 描述文件或目錄的屬性,并作為查找磁盤上文件或目錄數據的起始點。JFS 還使用 inode 來表示其它文件系統對象,如描述文件集中每個 inode 的分配狀態和磁盤位置的映射表。目錄將用戶特定的名稱映射到為文件和目錄所分配的 inode 上,并且形成傳統的命名層次。文件包含用戶數據,用戶數據中沒有隱含任何限制或格式。也就是說,JFS 將用戶數據看成是未解釋的字節流。根植于 inode 基于盤區的尋址結構用來將文件數據映射到磁盤。聚集超級塊和磁盤分配映射表、文件描述符和 inode 映射表、inode、目錄以及尋址結構一起表示了 JFS 控制結構或元數據。

  • 日志,在每個聚集中維護 JFS 日志,并且用來記錄元數據的操作信息。日志有一種同樣由文件系統創建實用程序設置的格式。聚集內多個安裝的文件集可以同時使用一個日志。

5. XFS 文件系統介紹

XFS 一種高性能的日志文件系統,最早于 1993 年,由 Silicon Graphics 為他們的 IRIX 操作系統而開發,是 IRIX 5.3 版的默認文件系統。2000 年 5 月,Silicon GraphicsGNU 通用公共許可證發布這套系統的源代碼,之后被移植到 Linux 內核上。XFS 特別擅長處理大文件,同時提供平滑的數據傳輸。SGI 發現他們的現有文件系統(existing filesystem,EFS)正在迅速變得不適應當時激烈的計算競爭。為解決這個問題,SGI 決定設計一種全新的高性能 64 位文件系統,而不是試圖調整 EFS 在先天設計上的某些缺陷。因此,XFS 誕生了,并于 1994 年隨 IRIX 5.3 的發布而應用于計算。

5.1 XFS 文件系統的特點

  • 數據完全性,采用 XFS 文件系統,當意想不到的宕機發生后,首先,由于文件系統開啟了日志功能,所以你磁盤上的文件不再會意外宕機而遭到破壞了。不論目前文件系統上存儲的文件與數據有多少,文件系統都可以根據所記錄的日志在很短的時間內迅速恢復磁盤文件內容。

  • 傳輸特性XFS 文件系統采用優化算法,日志記錄對整體文件操作影響非常小。XFS 查詢與分配存儲空間非???。XFS 文件系統能連續提供快速的反應時間。筆者曾經對 XFS、JFSExt3、ReiserFS 文件系統進行過測試,XFS 文件文件系統的性能表現相當出眾。

  • 可擴展性,XFS 是一個全 64-bit 的文件系統,它可以支持上百萬 T 字節的存儲空間。對特大文件及小尺寸文件的支持都表現出眾,支持特大數量的目錄。最大可支持的文件大 小為 263 = 9 x 1018 = 9 exabytes,最大文件系統尺寸為 18 exabytes。XFS 使用高的表結構(B+ 樹),保證了文件系統可以快速搜索與快速空間分配。XFS 能夠持續提供高速操作,文件系統的性能不受目錄中目錄及文件數量的限制。

  • 傳輸帶寬XFS 能以接近裸設備 I/O 的性能存儲數據。在單個文件系統的測試中,其吞吐量最高可達 7GB 每秒,對單個文件的讀寫操作,其吞吐量可達 4GB 每秒。

5.2 XFS 文件系統的缺點

歷史上 XFS 上的元數據操作曾比其它文件系統都慢,表現為在刪除大量小文件時性能糟糕。該性能問題是被 Red HatXFS 開發者 Dave Chinner 在代碼中定位到的。使用一個叫 “延遲記錄” 的掛載選項可以成數量級地提升元數據操作的性能。該選項幾乎把日志整個存在內存中。Linux 內核主線版本 2.6.35 中作為一個試驗性特性引入了這個補丁,在 2.6.37 中使它成為了一個穩定的特性,并計劃在 2.6.39 中把它作為默認的日志記錄方法。早期測試顯示在有少量線程的環境中其性能接近 EXT4,在大量線程的環境下超過了 EXT4。

6. 小結

本小節介紹了 ext3、ext4、ReiserFS、JFS、XFS 日志相關的文件系統的特點,日志文件系統為 Linux 系統增加了一層安全性,熟悉這些文件系統之后,你就知道了 Linux 系統中有多個文件系統,除了默認使用的文件系統之外,還有可供選的文件系統。