標籤:
Ext3介紹
對於ext3檔案系統,磁碟空間劃分一系列block groups,每個group有位元影像來跟蹤inode和data塊的分配和範圍。其物理布局如下:
Superblock:位於group內第0個block,為了保證相容,前1024B位元組為0,SB從1024B位移處儲存,大小1024B。儲存的是檔案系統相關資訊,在多個group中有備份(0,1,3,5,7,9,25,37,49,81等)。大部分資訊在格式化時確定,並唯讀。可以用dumpe2fs命令查看;
Group Descriptor:位於group內第1個block,描述group資訊,如inode bitmap,data blockbitmap等位置資訊。group描述符在多個group中有備份。為了保證檔案再寫入的時候,盡量在一個連續的空間上,ext3檔案系統將32768(0x8000)個block組成一個group,group通過Group Descriptor描述,所有的Group Descriptor存在Group Descriptor Table中,整個 desc table 總大小不能超過 1個 block 的大小,對於4096B的block,則最多1024B*4 / 32B = 128個group;
block bitmap:佔用1個block,描述block的使用方式;用於group內block的分配;
inode bitmap:佔用1個block,描述inode的使用方式;用於group內inode的分配;
inode table:佔用多個block,存放inode資訊。每個inode 128Byte ,inode是描述資料的資料,即檔案系統中繼資料,是最重要的一部分,包含了檔案的許可權,擁有者,時間資訊,資料存放區在哪些 block 上等資訊;inode通過多級索引表對block進行管理;inode分配後,會更新到inode bitmap中;
data block:佔用多個block,存放資料資訊。block分配後,會更新到inode的block索引表和block bitmap中;
JBD介紹
Ext3檔案系統作為記錄檔系統,其本身不處理日誌,而是利用日誌塊裝置(Journaling Block Device)或叫JBD 的通用核心層。JDB有3個核心概念:日誌記錄,原子操作和事務。
日誌記錄(journal):本質上是檔案系統將要發出的低級操作的描述。在某些記錄檔系統中,日誌記錄只包括操作所修改的位元組範圍及位元組在檔案系統中的起始位置。然而,JDB 層使用的日誌記錄由低級操作所修改的整個緩衝區組成。這種方式可能浪費很多日誌空間(例如,當低級操作僅僅改變位元影像的一個位時),但是,它還是相當快的,因為JBD 層直接對緩衝區和緩衝區首部進行操作。
原子操作(handle):修改檔案系統的任一系統調用都通常劃分為操縱磁碟資料結構的一系列低級操作。如果這些低級操作還沒有全部完成系統就意外宕機,就會損壞磁碟資料。為了防止資料損毀,Ext3檔案系統必須確保每個系統調用以原子的方式進行處理。需要原子地完成的一組修改或寫操作,叫做原子操作。
事務(transaction):將每個原子操作都寫入到日誌之中可能不那麼高效。為了更高的效能,JBD 將一組原子操作打包為一個事務,並將事務一次寫入日誌。一個事務的所有日誌記錄都存放在日誌的連續塊中。JDB的操作單位是事務。
當事務正在提交時,它的生命週期經曆了下面的一系列狀態:
- 運行(running):事務當前在記憶體中,還可以接受新的原子操作。在一個系統中,僅有一個事務可以處於運行狀態。
- 鎖定(locked):事務不再接受新的原子操作,但現有原子操作們還沒有完成。一旦所有原子操作都完成了,事務將進入下一個狀態。
- 寫入(flush):事務中的所有原子操作都完成了,事務正在寫入日誌。
- 提交(commit):事務已寫入日誌。事務會寫一個提交塊,指示事務log已寫入日誌。
- 完成(Finished):事務寫到日誌之後,它會留在那直到所有的塊都被更新到磁碟上的實際位置。
Ext3記錄模式
Ext3既可以只對中繼資料做日誌,也可以同時對檔案資料區塊做日誌。
日誌寫入分3個階段:
- Journal Write:事務寫入到日誌空間;
- Journal Commit:寫入commit塊;一個完整commit到日誌區的事務以JFS_DESCRIPTOR_BLOCK開始,以JFS_COMMIT_BLOCK結束;
- CheckPoint Write:事務寫入到磁碟空間,並且其在日誌的空間被回收。CheckPointing的觸發情境較多,如檔案系統快取達到閾值,日誌剩餘空間達到閾值,定時器逾時等等。
同時,Ext3提供三種記錄模式:
只有對檔案系統中繼資料的改變才記入日誌,也是最快的模式。資料區塊直接寫入磁碟上的真實位置(fixed location),這種模式不保證日誌和資料的寫入順序。回寫入模式是三種模式中一致性最差的,它只保證檔案系統中繼資料的一致性,不保證資料的一致性。
只有檔案系統中繼資料才寫入日誌。但是資料會保證在中繼資料寫入到日誌前寫入真正儲存位置。相比於writeback模式,這種模式提供了更高的一致性保護:資料和中繼資料都保證一致性。
檔案系統所有資料和中繼資料的改變都記入日誌。這意味著所有資料區塊會被寫2次,一次寫入日誌,然後再寫入磁碟上的真實位置(fixed location)。和ordered一樣,data模式提供了相同強度的一致性保護。
記錄模式對比分析:
- 相較於無記錄檔系統,記錄模式在隨機寫情境下效能較高;
- writeback和ordered在大檔案順序寫情境下效能較高;
- data將亂序轉換為順序,擷取順序的高效能;所以data在非同步小檔案隨機寫情境下效能較高;
- data和ordered提供相同的一致性保護;
- 有些情境下data效能較高,有些情境下ordered效能較高;
- ordered模式下,fixed data write, journal inode write,journal commit write依次順序寫入。當日誌存於獨立的裝置上時,這種限制會不必要的降低效能;
- 大量臨時檔案的情境下,data和ordered的效能較低,因為定時器重新整理中繼資料到日誌時,相應的資料也必須寫入,不必要的臨時檔案寫入,增加IO負荷。
Ext3日誌視圖
日誌是管理一個塊裝置的更新的內部記錄(log)。更新首先會放到日誌之中,然後再寫到它們在磁碟上的真實位置。Ext3的日誌(journal)可以看做一個檔案,其inode固定為8,位於第一個group中,,其物理布局如下,包含超級塊、描述塊、提交塊等。
Ext3日誌的詳細內部視圖如下,首先是日誌的superblock,然後是每個事務描述塊,最後是資料區塊。完整的事務分3部分:事務開始塊,資料索引項目,事務提交塊。
參考文獻:
Linux Kernel 2.6.32
Analysis and Evolution of Journaling File Systems
ext3 journaling filesystem (stephen c. tweedie)
journal block device原始碼分析
--EOF--
Ext3檔案系統及JDB介紹