Linux文件系統分析之四(目錄項)

下面順着分析之三的思路,追溯到19號磁盤塊,首先算出其偏移地址19*1024=19456即4C00處,這裏的磁盤映象如下:
00004c00h: 01 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00004c10h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00004c20h: 02 00 62 69 6E 00 00 00 00 00 00 00 00 00 00 00 ; ..bin...........
00004c30h: 06 00 64 65 76 00 00 00 00 00 00 00 00 00 00 00 ; ..dev...........
00004c40h: 19 00 65 74 63 00 00 00 00 00 00 00 00 00 00 00 ; ..etc...........
00004c50h: 1E 00 75 73 72 00 00 00 00 00 00 00 00 00 00 00 ; ..usr...........
00004c60h: 3C 00 74 6D 70 00 00 00 00 00 00 00 00 00 00 00 ; <.tmp...........
00004c70h: 44 00 72 6F 6F 74 00 00 00 00 00 00 00 00 00 00 ; D.root..........
00004c80h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; 該塊後面都爲0

這裏每一行,即16個字節,表示一個目錄項。
struct dir_entry{
 unsigned short inode;
 char name[NAME_LEN];
};
第一個目錄項,4c00那一行中,inode爲01,表示該目錄所在i節點爲第1個i節點,name爲"."就是所謂的當前目錄了"/",這個目錄i節點確實

就是第一個,即我們在分析之三中分析的那個。
第二個目錄項,inode爲01,name爲".."表示上一層目錄,目前已是根目錄了,上層目錄也是根目錄,這就是爲什麼在根目錄時執行cd ..命令

時結果還是根目錄。
第三個目錄項,inode爲02,name爲"bin",它就表示/bin目錄了。
後面的幾個同理可知其涵義。如此,這個文件系統根目錄下面有.,..,bin,dev,etc,usr,tmp,root這8個目錄了,每個目錄佔用16個字

節,總共就佔用了128個字節了,這個數字和分析之三中的i_size爲128剛好吻合。

下面我們順藤摸瓜,看看這個root目錄下面有些什麼東西。root位於第44H=68個i節點,在磁盤映象中找到如下:
00001860h: ED 41 00 00 20 00 00 00 00 58 9C 29 00 02 4D 05 ; 鞟.. ....X?..M.
00001870h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
這個root目錄的i節點顯示其數據塊在054DH=1357塊中,即1357*1024=153400H處
00153400h: 44 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; D...............
00153410h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
除了兩個.,..目錄外這個目錄下面什麼也沒有,可以看到.目錄就是當前目錄,其i節點爲44,..指向根目錄,而根目錄i節點爲01,和前面的

分析剛好吻合。
再看看usr目錄下面有什麼東西,usr位於第1EH=30個i節點,再磁盤映象中找到如下:
000013a0h: ED 41 00 00 50 00 00 00 80 79 73 29 00 05 95 01 ; 鞟..P...?ys)..?
000013b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
這個目錄的i節點顯示其數據塊在0195H=405塊中,即405*1024=414720=65400H處
00065400h: 1E 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00065410h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00065420h: 1F 00 62 69 6E 00 00 00 00 00 00 00 00 00 00 00 ; ..bin...........
00065430h: 3B 00 6C 6F 63 61 6C 00 00 00 00 00 00 00 00 00 ; ;.local.........
00065440h: 3D 00 72 6F 6F 74 00 00 00 00 00 00 00 00 00 00 ; =.root..........
顯然比root目錄多了bin,local,root目錄了,下面往該文件系統中寫一個文件,看看通過這裏的分析方法是否能夠找到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章