歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

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

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

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

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

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

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 12下一頁

Copyright © Linux教程網 All Rights Reserved