Linux ext4檔案系統原理-檔案系統結構及檔案解析
基本概念
1扇區(sector)=512位元組(byte)
1資料塊(block)=8扇區=4KB(mkfs時指定,預設4KB,可設定為1KB - 64KB)
Ext4欄位使用little-endian順序寫入磁碟;但journal日誌使用big-endian順序寫入磁碟。
ext4檔案系統結構
- 塊裝置被劃分為多個group
- Super block在Group 0中, backup super block存放在其它group的頭部
SuperBlock
superblock記錄檔案系統的各種資訊,例如block總數,inode總數,支援的功能,維護資訊等。如果sparse_super置位,則superblock和組描述符的副本僅保留在Group編號為0或3、5、7……的Group中。如果未設定該標誌,superblock在所有組中均有副本。
Magic signature=0x53EF,位於偏移0x38,即56位元組處。UUID位於偏移0x68:
塊組描述段
即Block Group Descriptor,描述本group的inode資訊、datablock資訊
當block=1kb時,BGD起始於block2
當block>1kb時,BGD起始於block1
本案例中為block=1kb,則BGD起始了block2
Inodetable位於BGD偏移0x8處,:
inode table
Inode欄位定義:
如果檔案<=12個block,inode中可以直接儲存其所有block指標。
如果檔案的block資料在13個block 至【 ($block_size / 4) ^ 3 + ($block_size / 4) ^ 2 + ($block_size / 4) + 12】個block之間,則需要藉助多級索引來儲存所有資料塊。本案例block=1kb,三線索引inode可儲存16777216+65536+268=16843020byte,大概16MB檔案。
inode中有15個指標陣列,其中12個是直接索引,後面三個分別是一級索引、二級索引和三級索引。如下圖示:
如果檔案大於16MB,則需要inode開啟擴充套件屬性i_extra_isize,使用Extent Tree,本文不再展開。
Group0的inode table處數值為0x0124,即block292,即 292*2=584扇區:
datablock
如上圖,檔案Inode為14
- 定位Group:(14-1)/2032=0,位於Group0。(注:此例中,每Group包含2032個inode)
- 定位Group-inode:(14-1)% 2032=13,位於第13個inode
Group0 inode table起始於block 292,
而inode14位於(14-1)*128=1664 byte = 0x680 byte .
Inode偏移60byte=0x3C byte處,記錄了檔案的資料塊索引,下圖為0x000029b7:
第0x000029b7=10679個數據塊,位於:10679*1024byte/512byte=21358扇區,下圖顯示為檔案的真實內容:
技術支援
溫馨提示:如重要資料丟失,還請在行動前諮詢專業工程師建議,以免資料遭到二次破壞。