日誌檔案系統可以在系統發生斷電或者其它系統故障時保證整體資料的完整性,linux是目前支援日誌檔案系統最多的作業系統之一,本文重點研究了linux常用的日誌檔案系統:ext3、reiserfs、xfs和jfs日誌技術,並採用標準的測試工具postmark和 bonnie++對它們進行了測試,給出了詳細的效能分析,對linux伺服器應用具有重要的參考價值。
一、概述
所謂日誌檔案系統是在傳統檔案系統的基礎上,加入檔案系統更改的日誌記錄,它的設計思想是:跟蹤記錄檔案系統的變化,並將變化內容記錄入日誌。日誌檔案系統在磁碟分割槽中儲存有日誌記錄,寫操作首先是對記錄檔案進行操作,若整個寫操作由於某種原因(如系統掉電)而中斷,系統重啟時,會根據日誌記錄來恢復中斷前的寫操作。在日誌檔案系統中,所有的檔案系統的變化都被記錄到日誌,每隔一定時間,檔案系統會將更新後的元資料及檔案內容寫入磁碟。在對元資料做任何改變以前,檔案系統驅動程式會向日誌中寫入乙個條目,這個條目描述了它將要做些什麼,然後它修改元資料。目前linux的日誌檔案系統主要有:在ext2基礎上開發的ext3,根據物件導向思想設計的reiserfs,由sgi irix系統移植過來的xfs,由ibm aix系統移植過來的jfs,其中ext3完全相容ext2,其磁碟結構和ext2完全一樣,只是加入日誌技術;而後三種檔案系統廣泛使用了b樹以提高檔案系統的效率。
二、ext3
ext3 檔案系統是直接從ext2檔案系統發展而來,目前ext3檔案系統已經非常穩定可靠,它完全相容ext2檔案系統,使用者可以平滑地過渡到乙個日誌功能健全的檔案系統。ext3日誌檔案系統的思想就是對檔案系統進行的任何高階修改都分兩步進行。首先,把待寫塊的乙個副本存放在日誌中;其次,當發往日誌的 i/o 資料傳送完成時(即資料提交到日誌),塊就寫入檔案系統。當發往檔案系統的i/o 資料傳送終止時(即資料提交給檔案系統),日誌中的塊副本就被丟棄。
2.1 ext3日誌模式
ext3既可以只對元資料做日誌,也可以同時對檔案資料塊做日誌。具體來說,ext3提供以下三種日誌模式:
日誌(journal )
檔案系統所有資料和元資料的改變都記入日誌。這種模式減少了丟失每個檔案所作修改的機會,但是它需要很多額外的磁碟訪問。例如,當乙個新檔案被建立時,它的所有資料塊都必須複製乙份作為日誌記錄。這是最安全和最慢的ext3日誌模式。
預定(ordered )
只有對檔案系統元資料的改變才記入日誌。然而,ext3檔案系統把元資料和相關的資料塊進行分組,以便把元資料寫入磁碟之前寫入資料塊。這樣,就可以減少檔案內資料損壞的機會;例如,確保增大檔案的任何寫訪問都完全受日誌的保護。這是預設的ext3 日誌模式。
寫回(writeback )
只有對檔案系統元資料的改變才記入日誌;這是在其他日誌檔案系統發現的方法,也是最快的模式。
2.2 日誌塊裝置(jbd)
ext3 檔案系統本身不處理日誌,而是利用日誌塊裝置(journaling block device)或叫jbd 的通用核心層。ext3檔案系統呼叫jdb例程以確保在系統萬一出現故障時它的後續操作不會損壞磁碟資料結構。ext3 與jdb 之間的互動本質上基於三個基本單元:日誌記錄,原子操作和事務。
日誌記錄本質上是檔案系統將要發出的低階操作的描述。在某些日誌檔案系統中,日誌記錄只包括操作所修改的位元組範圍及位元組在檔案系統中的起始位置。然而,jdb 層使用的日誌記錄由低階操作所修改的整個緩衝區組成。這種方式可能浪費很多日誌空間(例如,當低階操作僅僅改變點陣圖的乙個位時),但是,它還是相當快的,因為jbd 層直接對緩衝區和緩衝區首部進行操作。
修改檔案系統的任一系統呼叫都通常劃分為操縱磁碟資料結構的一系列低階操作。如果這些低階操作還沒有全部完成系統就意外宕機,就會損壞磁碟資料。為了防止資料損壞,ext3檔案系統必須確保每個系統呼叫以原子的方式進行處理。原子操作是對磁碟資料結構的一組低階操作,這組低階操作對應乙個單獨的高階操作。
出於效率的原因,jbd 層對日誌的處理採用分組的方法,即把屬於幾個原子操作處理的日誌記錄分組放在乙個單獨的事務中。此外,與乙個處理相關的所有日誌記錄都必須包含在同乙個事務中。乙個事務的所有日誌記錄都存放在日誌的連續塊中。jbd層把每個事務作為整體來處理。例如,只有當包含在乙個事務的日誌記錄中的所有資料提交給檔案系統時才**該事務所使用的塊。
三、reiserfs
reiserfs 是乙個非常優秀的檔案系統,其開發者非常有魄力,整個檔案系統完全是從頭設計的。目前,reiserfs可輕鬆管理上百g的檔案系統,這在企業級應用中非常重要。reiserfs 是根據物件導向的思想設計的,由語義層(semantic layer)和儲存層(storage layer)組成。語義層主要是對物件命名空間的管理及物件介面的定義,以確定物件的功能。儲存層主要是對磁碟空間的管理。語義層與儲存層是通過鍵(key)聯絡的。語義層通過對物件名進行解析生成鍵,儲存層通過鍵找到物件在磁碟上儲存空間,鍵值是全域性唯一的。
3.1 語義層主要介面
1) 檔案介面 每個檔案擁有乙個介面id,此id標識乙個方法集,此方法集包含訪問reiserfs 檔案的所有介面。
2) 屬性介面 reiserfs實現了一種新介面,把檔案的每一種屬性當做乙個檔案,屬性的值就是此檔案的內容,以實現對檔案屬性的目錄式訪問。
3) hash介面 目錄是檔名到檔案的對映表,reiserfs是通過b+樹來實現這張對映表。由於檔名是變長的,而且有時檔名會很長,所以檔名不適合作為鍵值,故引入了hash函式來產生鍵值。
4) 安全介面 安全介面處理所有的安全性檢查,通常是由檔案介面觸發的。下面以讀檔案為例:檔案介面的read 方法在讀入檔案資料之前會呼叫安全介面的read chech 方法來來進行安全性檢查,而後者又會呼叫屬性檔案的read方法把檔案屬性讀入以便檢查。
5) 項(item)介面 項介面主要是一些對項進行平衡處理的方法,包括:項的拆分,項的評估,項的覆寫,項的追加,項的刪除,插入及查詢。
6) 鍵分配(key assignment)介面 當把乙個鍵分配給乙個項時,鍵分配介面就會被觸發。每一種項都有乙個與其對應的鍵分配方法。
3.2 儲存層
reiserfs是以b+樹來儲存資料的,其結構如圖:
圖1:reiserfs b+ 樹
在b+樹中的各個結點中有乙個稱為項(item)的資料結構。項是乙個資料容器,乙個項只屬於乙個結點,是結點管理空間的基本單位。如圖所示,乙個項包括以下內容:
1) item_body:項的資料域
2) item_key: 項的鍵值
3) item_offset:資料域的起點在結點中的偏移量
4) item_length: 資料域的長度
5) item_plugin_id:項介面id。
圖2: reiserfs 項結構
reiserfs設計了多種不同的項以儲存不同的資料,主要有以下幾種:
1) static_stat_data: 靜態統計資料,包括檔案的所有者,訪問許可權,建立時間,最近修改時間,鏈結數等
2) cmpnd_dir_item: 包含各個目錄項
3) extend_pointers: 指向乙個盤區(extend)
4) node_pointers: 指向乙個結點
5) bodies: 包含的是檔案的小部分資料
3.3 reiserfs日誌
與ext3 一樣,reiserfs也有三種日誌模式,即journal,ordered,writeback。同時,reiserfs引入了兩種日誌優化方法: copy-on-capture和steal-on-capture。copy-on-capture:當乙個事務要修改的塊在另乙個未提交的事務中時,就把這個塊複製乙份,這樣這兩個事務就可以併發進行了。steal-on-capture:當乙個塊被多個事務修改時,只有最晚提交的那個事務才把這個塊實際寫入檔案系統,其他事務都不寫這個塊。
四、xfs
xfs 是一種高效能的64 位檔案系統,由sgi 公司為了替代原有的efs 檔案系統而開發的。xfs 通過保持cache 的一致性、定位資料和分布處理磁碟請求來提供對檔案系統資料的低延遲、高頻寬的訪問。目前sgi已經將xfs檔案系統從irix移植到linux。
4.1 分配組(allocation groups)
當建立 xfs 檔案系統時,底層塊裝置被分割成八個或更多個大小相等的線性區域(region),使用者可以將它們想象成"塊"(chunk)或者"線性範圍(range)",在 xfs 中,每個區域稱為乙個"分配組"。分配組是唯一的,因為每個分配組管理自己的索引節點(inode)和空閒空間,實際上是將這些分配組轉化為一種檔案子系統,這些子系統透明地存在於 xfs 檔案系統內。有了分配組,xfs **將允許多個執行緒和程序持續以並行方式執行,即使它們中的許多執行緒和程序正在同一檔案系統上執行大規模 io 操作。因此,將 xfs 與某些高階硬體相結合,將獲得高效能而不會使檔案系統成為瓶頸。分配組在內部使用高效的 b+樹來跟蹤主要資料,具有優越性能和極大的可擴充套件性。
4.2 日誌記錄
xfs 也是一種日誌記錄檔案系統,它允許意外重新引導後的快速恢復。象 reiserfs 一樣,xfs 使用邏輯日誌;它不象 ext3 那樣將文字檔案系統塊記錄到日誌,而是使用一種高效的磁碟格式來記錄元資料的變動。就 xfs 而言,邏輯日誌記錄是很適合的;在高階硬體上,日誌經常是整個檔案系統中爭用
Linux系統日誌檔案系統及效能分析
日誌檔案系統可以在系統發生斷電或者其它系統故障時保證整體資料的完整性,linux是目前支援日誌檔案系統最多的作業系統之一,本文重點研究了linux常用的日誌檔案系統 ext3 reiserfs xfs和jfs日誌技術,並採用標準的測試工具postmark和 bonnie 對它們進行了測試,給出了詳細...
Linux 日誌檔案系統
檔案系統要解決的乙個關鍵問題是怎樣防止掉電或系統崩潰造成資料損壞 在此類意外事件中,導致檔案系統損壞的根本原因在於寫檔案不是原子操作 因為寫檔案涉及的不僅僅是使用者資料,還涉及元資料 metadata 包括 superblock inode bitmap inode data block bitma...
Linux檔案系統與日誌
lsof檢視系統裡所有程序的檔案開啟數 ulimts n linux檔案系統與日誌 root wangna ls lhi total 28k 265490 drwxr xr x 2 root root 4.0k oct 26 22 01 aa 265485 rw 1 root root 1.2k o...