ext2檔案系統學習(一)

2022-08-26 19:12:12 字數 2264 閱讀 1312

原始碼分析網上太多了,不寫了,記錄簡單的實踐步驟:

cd /tmp

ddif=/dev/zero of=ext2-1m.img bs=1024 count=1024

mkfs.ext2 ext2-1m.img

mkdir

ext2

sudo

mount -o loop ext2-1m.img ext2

cd ext2

touch

test

echo

"test content

" > test

所以超級快的位址為1 * 1024 = 0x400,可以對照著資料結構ext2_super_block來分析檔案內容,通過/sbin/dumpe2fs  /dev/loop0來驗證分析是否正確。

第乙個組描述符在第二個block: 0x800,類似的可以對照著資料結構ext2_group_desc來分析檔案內容,通過/sbin/dumpe2fs來驗證結果。

找到了組描述符便可以找到資料快位圖(bg_block_bitmap)、索引節點位圖(bg_inode_bitmap)、索引節點表(bg_inode_table)等結構的位置。

檢視測試檔案的索引節點編號:

每個group裡的索引節點個數為ext2_super_block.s_inodes_per_block,在結構體ext2_super_block中的偏移量40,也就是為0x28,因此在檔案中的位址為0x428:

0x428處的值為0x00000080,也就是128,因此節點編號12(編號從1開始)所在的group為(12 -1 ) / 128 = 0,也就是第乙個group;在inode table中的下標為(12 -1) % 128 = 11。

inode table的位址在ext2_group_desc.bg_inode_table,檔案中位址為0x808,值為0x0008,也就是inode table起始於第八個blcok,位址為1024*8=0x2000。

每個inode大小為128位元組,因此inode table index為11的inode位址為11 * 128 + 0x2000 = 0x002580:

該位址對應結構體ext2_inode:

struct

ext2_inode linux1;

struct

hurd1;

struct

masix1;

} osd1;

/*os dependent 1

*/__le32 i_block[ext2_n_blocks];

/*pointers to blocks

*/__le32 i_generation;

/*file version (for nfs)

*/__le32 i_file_acl;

/*file acl

*/__le32 i_dir_acl;

/*directory acl

*/__le32 i_faddr;

/*fragment address

*/union linux2;

struct

hurd2;

struct

masix2;

} osd2;

/*os dependent 2

*/};

i_size為0x0d,i_block偏移量為0x28,檔案中位址為0x0025a8,i_block[0]的值為0x0026:

《深入理解linux核心》

ext2檔案系統

ext2磁碟結構 ext2分割槽和ext2分組的分布圖 下圖是借用其他部落格的 塊組中的每個塊包含的資訊 超級快 1個塊 描述該分割槽中的整個檔案系統的資訊,包括有多少個快組,每個快組有多少個塊,多少個索引節點等。組描述符塊 n塊 塊點陣圖 1塊 索引節點位圖 1塊 索引節點 n塊 資料塊 n塊 塊...

Ext2檔案系統

ext2檔案系統的總體布局,如下圖。1檔案系統的最小儲存單元是塊 block 塊的大小一般為512bytes,或者是它的整數倍,塊的大小是在格式化是所確定的。不能修改除非重新格式化。上圖中顯示了檔案系統的總體布局,由乙個boot block和對個block group組成,每個block group...

掛載EXT2檔案系統

檔案系統的安裝主要是通用mount命令來實現的,然後通過系統呼叫由使用者態進入到核心態,把某乙個分割槽下的檔案系統掛載到某乙個目錄下,當然掛載也可以能指定掛載的檔案系統。mount函式通過sys mount函式來實現,其具體函式如下 asmlinkage long sys mount char us...