Linux ext4 rm 數據恢復原理(一)-文件系統結構及文件解析

注意

本文僅理論探討,真實數據恢復,敬請先參考:

Linux ext4 rm 誤刪,用extundelete恢復失敗/報錯,無數血淚教訓!!!附:ext4誤刪後的正確處理步驟

https://blog.csdn.net/weixin_42745590/article/details/86418144


基本概念

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扇區,下圖顯示爲文件的真實內容:


Ext4引入 “Extents”概念,可參考《Linux ext4文件系統原理(二)-大文件Extent結構解析及數據恢復實例-rm誤刪恢復


技術支持

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

恢復支持:https://item.taobao.com/item.htm?id=577090061943

官方網站:http://www.data-unit.com/

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