1. 程式人生 > >Linux ext4檔案系統原理-檔案系統結構及檔案解析

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

  1. 定位Group:(14-1)/2032=0,位於Group0。(注:此例中,每Group包含2032個inode)
  2. 定位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扇區,下圖顯示為檔案的真實內容:


技術支援

溫馨提示:如重要資料丟失,還請在行動前諮詢專業工程師建議,以免資料遭到二次破壞。

恢復支援:https://item.taobao.com/item.htm?id=583275204347