IT貓撲網:您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉貼|軟件發(fā)布

您當前所在位置:首頁操作系統(tǒng)LINUX → Linux的日志文件系統(tǒng)簡要剖析

Linux的日志文件系統(tǒng)簡要剖析

時間:2015/6/28來源:IT貓撲網作者:網管聯(lián)盟我要評論(0)

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

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

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

  總 之,日志文件系統(tǒng)就是一種具有故障恢復能力的文件系統(tǒng),它利用日志來記錄尚未提交到文件系統(tǒng)的修改,以防止元數據破壞(請參見圖 1)。但是如眾多其他 Linux 解決方案一樣,日志文件系統(tǒng)有多種方案供您選擇。下面就讓我們一起簡短回顧一下日志文件系統(tǒng)的歷史,然后再看一看現行的幾種文件系統(tǒng),看看它們之間有什么 區(qū)別。

典型的日志文件系統(tǒng)
圖 1. 典型的日志文件系統(tǒng)

  Linux 日志文件系統(tǒng)的歷史

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

  日志的幾種變體

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

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

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

  日志文件系統(tǒng)的現狀

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

  JFS2

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

#p#副標題#e#

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

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

  XFS

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

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

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

  第三擴展文件系統(tǒng)(ext3fs)

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

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

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

  ReiserFS

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

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

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

  日志文件系統(tǒng)的未來

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

  Reiser4

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

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

  由于 Namesys 的所有者的堅持,所有關于 Reiser4 的商業(yè)活動都停止了。

  第四擴展文件系統(tǒng)

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

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

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

關鍵詞標簽:Linux,Linux日志文件系

相關閱讀

文章評論
發(fā)表評論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠程會話使用screen管理你的遠程會話GNU/Linux安裝vmwareGNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠程桌面連如何登錄linux vps圖形界面 Linux遠程桌面連

相關下載

人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址linux tc實現ip流量限制dmidecode命令查看內存型號linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關機、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務器硬盤IO讀寫負載