歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux問題解決

Linux的日志文件系統簡要剖析

  在近代歷史上,日志文件系統被認為十分奇特,主要是處於研究階段。而如今,日志文件系統(ext3)已經成為 Linux 的缺省文件系統。本文向大家揭示了日志文件系統背後的一些思想,以及在電源故障或系統崩潰時,如何提供更好的完整性。此外本文還介紹了現行的幾種日志文件 系統和下一代日志文件系統。

  定義日志文件系統的方法有很多種,但是讓我們抓住要點。日志文件系統就是專為那些厭倦了一直盯著啟動時 fsck(即文件系統一致性檢查)的人而設計的(日志文件系統同樣適用於希望文件系統具有故障恢復能力的群體)。如果系統采用傳統的未提供日志功能的文件系統,那麼操作系統在檢測到系統為非正常關機時,會使用 fsck 應用程序執行一致性檢驗。該應用程序會掃描文件系統(這要花費很長的時間),並修復任何可安全修復的問題。而在某些情況下,當文件系統損壞嚴重時,操作系統會啟動到單用戶模式,由用戶進行進一步的修復。

  那麼現在您應該清楚日志文件系統針對的是哪類人群了,但是他們是如何取締 fsck 的呢?籠統地說,日志文件系統就是通過維護一份日志來防止文件系統崩潰。所謂日志就是一種特殊的文件,它會在一個循環的緩沖區內記錄文件系統的修改,然後 將其定期提交到文件系統。一旦系統發生崩潰,日志文件就會起到一個檢查點的作用,用於恢復未保存的信息,防止損壞文件系統元數據。

  總 之,日志文件系統就是一種具有故障恢復能力的文件系統,它利用日志來記錄尚未提交到文件系統的修改,以防止元數據破壞(請參見圖 1)。但是如眾多其他 Linux 解決方案一樣,日志文件系統有多種方案供您選擇。下面就讓我們一起簡短回顧一下日志文件系統的歷史,然後再看一看現行的幾種文件系統,看看它們之間有什麼 區別。//本文轉自www.45it.com電腦軟硬件應用網

Linux的日志文件系統簡要剖析
圖 1. 典型的日志文件系統

  Linux 日志文件系統的歷史

  最 早的日志文件系統是 IBM? Journaled File System(JFS)。JFS 於 1990 年首次發行,而當前 Linux 支持的版本是後期開發的 JFS2。1994 年,Silicon Graphics 為 IRIX 操作系統引進了高性能的 XFS。XFS 於 2001 年被植入 Linux 系統中。1998 年開發的智能文件系統(SFS)起初是為 Amiga 開發的,但之後卻在 GNU Lesser General Public License(LGPL)下發行,並於 2005 年獲得了 Linux 的支持。最常用的日志文件系統 ext3fs (third extended file system)是 ext2 的擴展,它增加了記錄日志的功能。從 2001 年起,Linux 系統中就開始支持 ext3fs。最終,ReiserFS 日志文件系統在其被引入之後,力壓群雄,被廣泛使用。但由於其原開發者的一些法律糾紛,ReiserFS 日志文件系統未能得到進一步的發展。

  日志的幾種變體

  日志文件系統是使用日志來緩沖文件系統的修改(同時也可以應用於緊急故障恢復)的,但可以根據記錄的時間與內容采取不同的策略。其中,三種常見的策略為:回寫(writeback)、預定(ordered)和數據(data)。

  在回寫模式 中,僅有元數據被記錄到日志,數據塊則被直接寫入到磁盤位置上。這樣可以保存文件系統結構,防止崩潰,但卻有可能發生數據崩潰(比如:在元數據記錄到日志後,數據塊寫入磁盤前,系統崩潰)。要想解決這個問題,您可以使用預定模式。預定模式 只將元數據記錄到日志,但是在此之前將數據寫入到磁盤。這樣就可以保證系統恢復後數據和文件系統的一致性。最後一種模式將數據也記錄到了日志中。在數據模式 中,元數據和數據都被記錄到日志中。這種模式可以最大限度地防止文件系統崩潰與數據丟失,但由於全部數據都寫入了兩次(先寫入日志,再寫入磁盤),系統性能可能會降低。

  日志的提交也有很多種不同的策略。比如,是在日志將滿時,還是在超時後?

  日志文件系統的現狀

  如今,有幾種日志文件系統應用非常廣泛。每一種都有其自己的優缺點。下面介紹現存最普遍的四種日志文件系統。

  JFS2

  JFS2(又稱 enhanced journaled file system)是最早期的日志文件系統,在植入 Linux 之前已被應用於 IBM AIX? 操作系統多年。它是 64 位的文件系統,雖然它是在原來的 JFS 的基礎上開發的,但卻較之有所改進,即:JFS2 具有更優的擴展性能,而且支持多處理器架構。

  JFS2 支持預定的日志記錄方式,可以提高較高的性能,並實現亞秒級文件系統恢復。JFS2 同時為提高性能提供了基於分區的文件分配(Extent-based allocation)。基於分區的分配 是指對一組連續的塊而非單一的塊進行分配。由於這些塊在磁盤上是連續的,其讀取和寫入的性能就會更好。這種分配的另外一個優勢就是可以將元數據管理最小化。按塊分配磁盤空間就意味著要逐塊更新元數據。而使用分區,元數據則僅需按照分區(可以代表多個塊)更新。

  JFS2 還使用了 B+ 樹,以便更快地查找目錄和管理分區描述符。JFS2 沒有內部日志提交策略,而是在 kupdate 守護進程超時時提交。

  XFS

  XFS 是 Silicon Graphicsis 於 1995 年為 IRIX 操作系統開發的其他早期日志文件系統之一。它於 2001 年就已經被植入 Linux,因此,它已經成熟而且可靠。

  XFS 支持 64 位全地址尋址,並以 B+ 樹為目錄和文件分配提供高性能。XFS 同樣使用了基於分區的分配,支持可變的塊大小(從 512 字節到 64KB )。除分區外,XFS 還采用延時分配,即等到塊將被寫入磁盤時,再為其分配磁盤空間。這樣所需磁盤空間總數就一目了然,因此這個功能提高了分配連續磁盤塊的可能性。

  XFS 還有一些其他的有趣特性,它可以保證 rate 輸入輸出(I/O — 通過為文件系統用戶保留帶寬)和直接 I/O。其中,數據是直接在磁盤和用戶空間緩沖區間拷貝的(而不是從多個緩沖區進入)。XFS 采用回寫日志策略。

  第三擴展文件系統(ext3fs)

  第 三擴展文件系統(third extended file system,ext3fs)是最流行的日志文件系統,是由 ext2 文件系統演化而來。實際上,Ext3fs 可以與 ext2fs 兼容,這是因為 ext3fs 使用的結構與 ext2fs 相同,僅僅多了一個日志而已。我們甚至可以把 ext3fs 的一部分當作 ext2 文件系統掛載,或者將 ext2 文件系統轉換成 ext3 文件系統(使用 tune2fs 實用程序)。

  Ext3fs 允許用三種方式記錄日志(回寫,預定和數據),但預定模式為默認模式。日志提交策略也是可配置的,但是默認在日志填滿 1/4 時或其中一個提交計時器超時時,提交日志。

  ext3fs 主要的弊端之一就是它最初不是作為日志文件系統而設計的。它是在 ext2fs 的基礎上開發的,因此缺少一些其他日志文件系統所具備的高級特性(例如分區)。它在性能方面較之 ReiserFS、JFS 以及 XFS 也尤為遜色,但它所需要的 CPU 和內存要比同類解決方案少。

  ReiserFS

  ReiserFS 是從一開始就按照記錄日志的意圖而開發的日志文件系統。ReiserFS 於 2001 年被引進到主流 2.4 內核(Linux 采用的第一個日志文件系統)。其默認的日志記錄方法為預定,且支持以在線調整大小的方式擴展文件系統。ReiserFS 同時還具有 tail packing 功能,顯著減少了磁盤碎片。在處理較小文件方面,ReiserFS 的速度要比 ext3f 快(當 tail packing 可用時)。

  ReiserFS(又稱 ReiserFS v3)具有很多先進的功能,如 B+ 樹。該文件系統的基礎格式建立在單一的 B+ 樹的基礎之上,這使得搜索的效率和可伸縮性增強。提交策略則取決於日志的大小,但是要以待提交的塊的數量為基礎。

  ReiserFS 也遇到了幾個問題 — 大多是最近出現的,這與其開發者遇到了一些法律糾紛有直接原因。

  日志文件系統的未來

  現在您已經了解了現行的(和過去的)日志文件系統,下面就讓我們看一看它的發展趨勢。

  Reiser4

  在成功地將 ReiserFS 合並到 Linux 內核,並被很多的 Linux 發行版采用之後,Namesys(開發 ReiserFS 的公司)便開始致力於新的日志文件系統的開發。Reiser4 被設計成為全新的日志文件系統,它擁有很多先進的功能。

  Resier4 擬定通過 wandering 日志和延遲分配塊直至日志提交(像在 XFS 中一樣)的方式來實現更優秀的日志記錄。Reiser4 還設計有靈活的插件架構(以支持諸如壓縮和加密之類的功能),但是被 Linux 社區拒絕了,因為這些在虛擬文件系統(virtual file system,VFS)被當作是最好的功能。

  由於 Namesys 的所有者的堅持,所有關於 Reiser4 的商業活動都停止了。

  第四擴展文件系統

  第 四擴展日志文件系統(fourth extended journaling file system,ext4fs)是由 ext3fs 演化而來。Ext4 文件系統被設計為具有向前和向後兼容性,但它具有許多新的高級特性(其中的一些特性破壞了兼容性)。這就意味著您可以將 ext4fs 的一部分作為 ext3fs 掛載,反之亦然。

  首先,ext4fs 是 64 位文件系統,並被設計為可以支持很大的容量(1 exabyte)。它還可以使用分區,但是這樣做將失去與 ext3fs 的兼容性。像 XFS 和 Reiser4 一樣,ext4fs 還支持在必要時采取延時分配方式分配塊(這樣可以減少磁盤碎片)。日志的內容也已經執行過檢查和(checksum),使日志更加可靠。ext4fs 並沒有采用標准的 B+ 或者 B* 樹,取而代之的是 B 樹的一種變體,叫做 H 樹,它支持更大的子目錄(ext3 的上限為 32KB )。

  雖然延時分配的方法可以減少磁盤碎片,但時間久了,一個大的文件系統可能會成為碎片。為解決這個問題,開發了在線磁盤碎片整理工具(e4defrag)。您可以使用這個工具來整理單個的文件或者整個文件系統。

  ext3fs 與 ext4fs 間的另一個有趣的區別就在於文件的日期分辨率。在 ext3 中,時間戳的最小分辨率為 1 秒。而 Ext4fs 是面向未來的:那時處理器和接口的速度會持續加快,需要更高的分辨率。因此,ext4 中時間戳的最小分辨率為 1 納秒。

  Ext4fs 已被合並到自 2.6.19 以後的 Linux 內核中,但它還是不夠穩定。下一代系統的開發將繼續致力於此;輔之以上一代的優勢, 它就會是下一代的 Linux 日志文件系統。

  結束語

  日志文件系統在系統崩潰或斷電時提供了可靠性,並防止系統崩潰。另外,與較傳統的文件系統方法(比如那些依賴於 fsck 的系統)相比,日志文件系統大大地縮短了系統崩潰的恢復時間。新的日志記錄功能的開發要指望將來的新算法與結構,也要仰仗以前的算法與結構,將 JFS 和 XFS 的功能結合起來。將來日志文件系統到底會如何發展還不得而知,但可以確定的是它們會更具實用性,並會成為新的日志文件系統標准

Copyright © Linux教程網 All Rights Reserved