?? ext3日志系統(tǒng).txt
字號:
any problems, send mails to sindybear@163.com
相關(guān)文件
/fs/jbd/*.c
日志系統(tǒng)較為復(fù)雜。
ext3文件系統(tǒng)中,又一個全局的journal,這個日志結(jié)構(gòu)代表了ext3文件系統(tǒng)中所有的狀態(tài)。例如當(dāng)前的
事務(wù)(transaction)狀況,磁盤上的日志區(qū)當(dāng)前的狀況等。
在ext3文件系統(tǒng)中,只有一個運行狀態(tài)的transaction,這個事務(wù)連接到j(luò)ournal->j_running_transaction域中
在這個事務(wù)的存在時間段內(nèi),所有的進程對這個文件系統(tǒng)的更改的信息都要加入到這個事務(wù)中去,由這個事務(wù)
統(tǒng)一寫到磁盤上去。
ext3文件系統(tǒng)中,每一個進程的進程結(jié)構(gòu)current中都有一個域journal_info,存儲的就是這個進程對文件系統(tǒng)
的更改。這種更改都使用一個handle_t結(jié)構(gòu)進行表示。
這些結(jié)構(gòu)的關(guān)系如下
task1
jorunal_info--->handle-----------------|
|
|
task2 |
journal_info--->hanlde-----------------|
|
…… |
|
taskN \|/
journal_info--->handle----------------------->transaction------>journal
*****************************日志的磁盤結(jié)構(gòu)**********************************
jbd的日志組織結(jié)構(gòu)如下。
|<----superblock----->|<---------------------數(shù)據(jù)區(qū)-------------------------->|
|<--(1)-->|<---(2)--->|<---(1)--->|<--(4)-->|<--若干4-->|<--(5)-->|<--若干5-->|
|<-------(3)--------->|<------------descriptor--------->|
(1)journal_header_t
(2)super block中的一些數(shù)據(jù),包括s_first,s_maxlen,s_start
(3)journal_superblock_s
(4)journal_block_tag_t
(5)meta data數(shù)據(jù),也就是實際的數(shù)據(jù)。
其實ext3論文里的將日志區(qū)的數(shù)據(jù)分為三種,一個是header,一個是descriptor,一個是meta-data,
在實際的操作中,實際上前兩個是不分的。他們和起來通常叫做descriptor。
如圖所示,一個header后面跟隨著若干的tag,這個tag其實就是論文中所指的的descriptor。
也就是保存源數(shù)據(jù)在原始磁盤的位置。這些tag和這個header就放在一個設(shè)備塊中。這個設(shè)備塊
后面跟隨著若干的meta-data數(shù)據(jù)塊,他們就是被更改過的元數(shù)據(jù)。具體的個數(shù)是由descriptor
塊中的tag數(shù)目來決定的,最大不可能超過一個設(shè)備塊所能包含的tag數(shù)目。一個tag對應(yīng)一個meta-data
如果一個transaction包含的meta-data太多,不能用一個descriptor包含,那么系統(tǒng)就會生成一個
新的header + tag組成descriptor來進行映射。
每一個header的最前端都有一個magic數(shù),這個數(shù)字就是用來描述一個descriptor的開始,但是如果有
數(shù)據(jù)塊的最前面的數(shù)字恰好和這個magic相同怎么辦。當(dāng)檢測到這個情況的時候,就要把這個數(shù)據(jù)塊
最前面的一個work設(shè)置為0。并且在descriptor中進行標(biāo)記。這樣就解決了沖突問題。
*************************************************************************
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -