Ext3文件系统间接块指针研究

2020-07-22 02:04苏神保刘丹
九江职业技术学院学报 2020年2期
关键词:指针字节指向

苏神保,刘丹

(湖南商务职业技术学院,湖南长沙 410205)

1 Ext3文件系统的i-节点

Ext3文件系统的大致结构如图1所示,该文件系统将整个空间分成若干个大小相同的块组,每个块组又由若干个块(block)构成;每个块包含2的n次幂个扇区(sector),一般为2、4、8等,这些参数在超级块中都有描述〔1〕。

在数据恢复领域,手工定位Ext3文件系统中的文件的方法一般是通过底层数据恢复软件Winhex来实现:通过搜索53EF可以找到块组中的超级块或者备份,然后根据超级块或者备份可以算出文件系统的起始0号扇区的位置,再根据Ext3文件系统的结构在下一块中找到块组描述符。块组描述符中描述有块组块位图、i-节点位图以及i-节点的相关信息,通过块组描述符中i-节点的块号则可以定位i-节点的起始位置。i-节点对数据恢复人员恢复Ext3文件来说相当重要,因为文件系统中每个文件都是通过i-节点来记录的,每个文件都对应一个独一无二的i-节点号,该文件的大小、所占块号等都通过i-节点来体现。数据恢复人员需要先找到根目录的i-节点(一般位于2号i-节点),定位根目录后再根据根目录中的目录项描述的文件的i-节点号来定位文件。

图1 Ext3文件系统的结构〔2〕

2 直接块指针数据重现

图2为一Ext3文件系统中的文件311.docx文档的i-节点表,该表占用256个字节,列出了该文件的大小、最后访问时间、最后修改时间以及所占用的块号等关键信息。对于数据恢复人员来说,字节偏移0X04-0X07处的262F0000即表示该文件实际大小,数据解释器显示该文件实际大小为12,070字节。0X28-0X33表示该文件所占用的块号,分别占1705、1706、1707三个块,这三个块为直接块指针,直接指向文件。每块大小8扇区即8*512=4096字节。三个块占用空间即为4096*3=12288字节。

根据以上数据可知,该文件的起始块号为1705号块,实际大小为12070字节,占用空间大小为12288字节。有了这些关键数据后,根据图3所示步骤,即可恢复该文件。

3 间接块指针数据重现

Ext3文件系统的i-节点只提供12个直接块指针,假设该文件系统块大小为8扇区,文件的最大空间为12*8*512=49152B=48KB,很显然这个是不能满足用户需求的。这个时候就需要引入间接块指针。

Ext3文件系统跟UFS文件系统一样,在i-节点中用块指针描述文件内容的存放地址。每个i-节点中有15个块指针,包括12个直接块指针、1个间接块指针、1个二级间接块指针和1个三级间接块指针〔3〕。

12个直接块指针指向文件内容的前12个数据块地址。如果文件大于12个块,则第13个块指针是一个间接块指针,它指向的块内存放的是直接块指针而不是文件内容。

图2 311.docx文件的i-节点表(部分截取)

图3 恢复311.docx文件步骤

图4 有间接块指针的i-节点(部分截取)

如果间接块指针指向的块依然存放不下文件所占的块号,就需要二级间接块指针了。第14个块指针是二级间接块指针,它指向的块内存放的是一级间接块指针,而不是文件内容。二级间接块指针如果还是无法满足文件的块号需求,就要用第15个块指针了。第15个块指针是三级间接块指针,它指向的块内存放的是二级间接块指针而不是文件内容。

在数据恢复领域,直接指针块所指向才是用户需要的数据,因此需要将所有指针指向的数据找出来才能有效地恢复数据。图4为一示例压缩文件的i-节点表,根据i-节点所描述指针定义可知,该文件的i-节点包含14个指针,前12个直接块指针已占满且直接指向用户数据。CC2E0000(十进制11980)为第一间接块指针,该指针指向的是直接块指针而不是用户数据,用户数据需要先跳转至11890号块,然后利用11890号块内存放的直接块指针来找到用户数据。同理,BE380000(十进制14526)为第二间接块指针,该块指针指向的是第一间接块指针,根据里面存放的第一间接块指针就可以找到直接块指针,从而找到用户数据。

根据以上直接块指针与间接块指针的定义,可以列出该文件的i-节点中所描述指针对应块的占用情况(见表1)。

由表1可知,该文件的实际存放地址为3788—11979号块和11989—14523号块两个部分,分为两个碎片(Fragment)。中间11980—11988号块用来存放第一间接块指针,不能被算在文件里面,不然恢复出来的文件也会报错或者打不开。该文件所占块号可以用Winhex软件列出来,如图5所示。

表1 Ext3文件系统的间接块指针情况表

图5 示例文件所占块号图

图5中列出了文件在11979号块的位置被分成两个部分,且文件大小占用10727个块,表示该示例文件所占空间为10727*8*512=43937792B。此数据与用户在系统里面根据文件属性查看到的占用空间大小相符。数据恢复人员只需要利用Winhex软件提供的文件合并功能将两个碎片合并在一起手提文件即可。碎片合并功能如图6所示。

图6 碎片合并功能

4 Ext3文件的删除与恢复

Ext3文件系统的文件存储原理大致可以总结如下:先根据块组描述符中的i-节点表块号找到根目录的i-节点从而找到根目录;在根目录中读取目录中相关文件的i-节点号,然后根据该i-节点号再回到i-节点表找到该文件的i-节点表;从i-节点表内存储有该文件的文件大小、直接块指针或者间接块指针等信息可知,i-节点表作用等同于NTFS文件系统的文件记录表MFT。

由以上分析可知,文件的目录项和i-节点表对于恢复文件作用相当重要。为了更好地说明Ext3文件系统文件删除后目录项和i-节点表的变化情况,可以将文件删除前和删除后的目录项和i-节点表形成对比。

311.docx删除前与删除后目录项对比图如图7、8所示:

根据文件删除前与删除后的目录项对比可知,311.docx文件删除后,其目录项没有发生任何变化,i-节点号为3F010000H,目录项长度为1000H,文件名长度为08H,文件类型为01H,文件名311.docx。但是前一目录项的长度由原先的1000H变为2000H,即由16变成了32,也就是311.docx的目录项长度被加到前一文件的目录项中去了,相当于被遮盖了,只是不影响数据恢复人员根据该信息找到该文件的i-节点表。

311.docx删除前与删除后i-节点表对比图如图9、10所示:

图7 311.docx删除前的目录项

图8 311.docx删除后的目录项

图9 311.docx删除前的i-节点表

图10 311.docx删除后的i-节点表

根据该文件删除前和删除后的i-节点表对比可知,文件被删除后,i-节点表中的文件大小以及文件的直接块指针或者间接块指针(如果存在的话)都被清零了,这就给数据恢复带来了极大难度。虽然我们可以根据前一i-节点所指向的块和后一i-节点所指向的块中间的间隙来恢复该数据,但是假如文件存在间接块指针的话,那就比较困难了。

5 小结

全文分析了Ext3文件系统的文件存储的基本原理,介绍了该文件系统在只有直接块指针和有间接块指针两种不同的情况下数据重现的不同方法,文中也通过实例阐述了Ext3文件系统中文件被删除前后目录项以及i-节点表的变化情况,可以为专业数据恢复技术人员提供技术参考,也可以作为大中专职业院校学生参加全国职业院校数据恢复技能大赛的参考资料〔4〕。

猜你喜欢
指针字节指向
No.8 字节跳动将推出独立出口电商APP
科学备考新指向——不等式选讲篇
垂悬指针检测与防御方法*
No.10 “字节跳动手机”要来了?
基于MSP430的四旋翼飞行器的S-BUS通信协议的设计与实现
把准方向盘 握紧指向灯 走好创新路
为什么表的指针都按照顺时针方向转动
浅析C语言指针
人类进入“泽它时代”