1. 程式人生 > >ext2文件系統學習(二)—— 目錄磁盤結構

ext2文件系統學習(二)—— 目錄磁盤結構

echo free 文件格式 htm file 目錄結構 bitmap 點號 name

創建鏡像、mount等操作和上一篇一樣,測試目錄結構如下:

技術分享

一些文件系統信息如下:

  • Block size: 1024
  • Inodes per group: 128
  • Inode size: 128
  • Block bitmap at 6
  • Inode bitmap at 7
  • Inode table at 8-23

下面看看文件系統根目錄的結構,ext2的根目錄的索引節點號是2,根據上面的信息可以計算出根目錄的索引節點地址是0x002080。如果是用vim打開的鏡像文件,可以通過以下命令計算地址:

:echo printf("%x", 8*1024+128)

文件內容如下:

技術分享

對照ext2_inode結構定義:

  • i_mode: 0x41ed 對照這裏可知文件格式為EXT2_S_IFDIR
  • i_uid: 0
  • i_size: 0x000400,也就是1K (可以通過ls -ld /tmp/ext2驗證)
  • i_block: 0x000018,說明該目錄只占用了一個block,地址為0x18 * 1024=0x6000,這裏也就是根目錄的內容

0x6000地址處內容如下:

技術分享

ext2的目錄是一個特殊的文件,文件內容是多個ext2_dir_entry_2結構的目錄項,每個目錄項是文件名和索引節點的集合。

對照ext2_dir_entry_2的結構,第一個目錄項信息如下:

  • inode : 2
  • rec_len: 0x000C
  • name_len: 0x01
  • file_type: 0x02,表示目錄
  • name: 0x2E, 也就是“."

因為上一個目錄項rec_len是0x0C,所以下一個目錄項地址為0x600C,對應目錄項信息如下:

  • inode: 2
  • rec_len: 0x000C
  • name_len: 0x02
  • file_type: 0x02,表示目錄
  • name: 0x2E,0x2E,也就是“..”

下一個目錄項地址為上一個目錄項地址加上上一個目錄項的rec_len,也就是0x600C + 0x0C = 0x6018,信息如下:

  • inode: 0x0B,11
  • rec_len: 0x14,20
  • name_len: 0x0A,10
  • file_type: 0x02, 2,表示目錄
  • name: 0x6C,0x6F, ..., 也就是“lost+found”

以此類推就可以找到所有根目錄下的目錄項

ext2文件系統學習(二)—— 目錄磁盤結構