HFS+文件系统的索引节点主要用来存放指针记录。一个索引节点由三部分构成,它们是节点描述符、指针记录、节点记录起始偏移量列表。

对于节点描述符和节点记录起始偏移量列表的结构前面已经详细分析过,就不再重复了,本节主要分析指针记录的结构。

首先看一个具体的索引节点,其内容如图6-37所示。

HFS+文件系统的索引节点分析-数据恢复迷

图6-37 索引节点

在图6-37所示的节点中,节点描述符的08H偏移处的值为“0”,说明这是个索引节点。节点描述符之后是节点记录列表,其中有6个指针记录,在图中已经用阴影表示出来,并且从0~5进行了编号,每个指针记录的起始地址由节点记录起始偏移量列表中的表项0~表项5描述,而表项6是用来描述空闲空间的起始地址的。

索引节点中指针记录的结构被称为“关键字”结构,每个指针记录的大小虽然不一定相同,但结构都是一样的,都属于“关键字”结构,该结构的具体含义见表6-25。

表6-25 指针记录的“关键字”结构

字节偏移(相对偏移) 字段长度(字节) 字段名和定义
0x00~0x01 2  关键字的长度(N)。该参数占用1个字节或者两个字节。如果B−树的头记录中“属性”参数“1位”进行了设置,则该参数占用两个字节;否则占用1个字节(可查看表6-21)。在HFS+文件系统中,该参数都占用两个字节
0x02~0x(N+1) N  关键字。索引节点的关键字长度取决于B−树的头记录中“属性”参数“2位”是否被设置,如果此位被设置,关键字的字节数由它的“关键字长度”参数定义;如果此位被清除,索引节点的关键字总是等于“节点中关键字的最大长度”定义的值(可查看表6-21)
0x(N+2)~0x(N+5) 4  该索引节点的孩子节点号。一个索引节点可能会有两个或更多的孩子节点。孩子节点的多少取决于索引节点的大小和关键字的大小