新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux的日志文件系統(tǒng)簡要剖析

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

作者: 時(shí)間:2010-05-31 來源:網(wǎng)絡(luò) 收藏

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

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

本文引用地址:http://2s4d.com/article/257955.htm

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

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


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

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

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

  
日志的幾種變體

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

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

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

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

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

  JFS2

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

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

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

  XFS

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

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

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

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

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

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

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

  ReiserFS

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

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

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

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

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

  Reiser4

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

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

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

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

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

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

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

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

  Ext4fs 已被合并到自 2.6.19 以后的 Linux 內(nèi)核中,但它還是不夠穩(wěn)定。下一代系統(tǒng)的開發(fā)將繼續(xù)致力于此;輔之以上一代的優(yōu)勢, 它就會是下一代的 Linux 日志文件系統(tǒng)。

  
結(jié)束語

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

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉