目录项结构分析

目录项用来存放文件及目录的i-节点号、目录项的长度、文件名等信息,它们存储在分配给目录的块中。Ext3文件系统的目录项结构见表7-16。

表7-16 Ext3文件系统的目录项结构

字节偏移 字段长度(字节) 字段名和定义
0x00~0x03 4 i-节点号
0x04~0x05 2 目录项长度
0x06~0x06 1 名字长度
0x07~0x07 1 文件类型(具体见表7-17)
0x08~ 变长 名字

目录项中“文件类型”的具体分类见表7-17。

表7-17 目录项中“文件类型”的具体分类

类型值 类型含义
0x01 文件
0x02 目录
0x07 符号链接

目录项结构特点

Ext3文件系统的目录项有如下特点:

①目录项存储在目录区中,i-节点内有描述目录区地址的块指针。

②目录项的长度不是固定的,其长度随着文件名长度的不同而不同,文件名最长为255个字符,并且使用ASCII码进行存储。

③Ext3的目录项长度虽然不固定,但一定是4字节的倍数,每个目录项以4字节为边界进行排列,即每个目录项的起始字节必须是位于目录内可被4整除的相对偏移字节处。

④另外,Ext3目录项的结束位置如果没有达到4字节的边界,那么也需要在文件名后加空字节以达到4字节的边界。

⑤目录区中的前两个目录项一定是“.”和“. .”目录,“.”目录表示当前目录,“. .”目录表示父目录。

⑥每个目录项中有一个长度值指向下一个目录项,最后一个目录项的长度则指向本块的结尾处。

目录项实例分析

下面通过实例进一步分析目录项的结构。

要在一个Ext3文件系统内找到目录项,需要首先找到根目录区,以下是具体步骤:

第1步 定位i-节点表

Ext3文件系统的超级块位于分区内的2号扇区,跳转到2号扇区,获得如下信息:

  • 块大小为4096字节;
  • i-节点大小为128字节。

块组描述符表起始于超级块所在块的下一个块,也就是1号块。当前文件系统每块大小为4096字节,所以1号块开始于8号扇区。

用WinHex跳转到8号扇区,其中第一个块组描述符就是0号块组描述符表。从0号块组描述符中查看到该块组的i-节点表起始于4号块,因为每块大小为8扇区,所以4号块开始于32号扇区。

第2步 定位根目录区

跳转到32号扇区就是i-节点表的开始了,其中第一个i-节点(1号i-节点)为坏块i-节点,2号i-节点就是根目录的i-节点。2号i-节点的内容如图7-45所示。

Ext3文件系统的目录项分析-数据恢复迷

图7-45 2号i-节点的内容

我们用模板查看一下2号i-节点的具体参数,如图7-46所示。

Ext3文件系统的目录项分析-数据恢复迷

图7-46 2号i-节点的具体参数

从模板中可以看到,根目录目前只占用1个块,就是第一个直接块指针中记录的“514”号块,换算为扇区等于4112。跳转到4112扇区,其内容如图7-47所示。

Ext3文件系统的目录项分析-数据恢复迷

图7-47 根目录区

图7-47的根目录区中就都是根目录下的文件及文件夹的目录项了,扇区上部的阴影部分是前三个目录项,分别为“.”目录的目录项、“..”目录的目录项和“lost+found”目录的目录项。这三个目录项的具体含义及数值如图7-48、图7-49、图7-50所示。

Ext3文件系统的目录项分析-数据恢复迷

图7-48 “.”目录项的模板

Ext3文件系统的目录项分析-数据恢复迷

图7-49 “..”目录项的模板

Ext3文件系统的目录项分析-数据恢复迷

图7-50 “lost+found”目录项的模板

图7-47的根目录区所在扇区下部的阴影部分是最后一个目录项,也就是为“halt”目录的目录项,这个目录项的具体含义及数值如图7-51所示。

Ext3文件系统的目录项分析-数据恢复迷

图7-51 “halt”目录项的模板

“halt”目录项中记录着其目录项长度为3796字节,而实际上该目录项只用了12字节。因为这是目录区的最后一个目录项了,所以这个目录项的长度则指向了当前块的结尾处。