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