HFS+文件系统
头节点分析
HFS+文件系统节点分类
HFS+文件系统用B-树结构组织数据,B-树包含若干节点(Node),每个节点包含记录(Records),记录由**关键字(Key)和数据(data)**组成。节点分为4种:
- 头节点(Header Nodes):B-树的第一个节点,其中包含有头记录和位图记录。每个B-树只能包含一个头节点。
- 位图节点(Map Nodes):位图节点中只包含一个位图记录。当头节点中的位图记录不足以管理该B-树中的节点分配情况时,就需要位图节点进一步管理。
- 索引节点(Index Nodes):索引节点用来存放定义B-树结构的指针记录。
- 叶节点(Leaf Nodes):叶节点包含与某个关键字相关联的数据记录,每个数据记录的关键字都是唯一的。
HFS+文件系统节点基本结构
节点号 = 节点在B-树文件中的偏移量 / 每节点字节数
节点结构:节点描述符、节点记录列表、节点记录起始偏移量列表
节点描述符
大小固定14字节
offset | length | description |
---|---|---|
0x00~0x03 | 4 | 下一个节点号,最后一个节点为0 |
0x04~0x07 | 4 | 上一个节点号,第一个节点为0 |
0x08 | 1 | 节点类型,叶节点-1,索引节点0,头结点1,图节点2 |
0x09 | 1 | 节点高度,头结点0,叶节点1,索引节点比子节点高一层,图节点0 |
0x0A~0x0B | 2 | 节点记录数 |
0x0C~0x0D | 2 | 保留 |
节点记录列表
节点描述符的大小14个字节,节点记录列表始于该节点的14偏移处。节点记录列表中由若干个节点记录组成,节点记录的类型和所描述的信息不一样,每个节点记录的大小不一样。
节点记录起始偏移量列表
-
节点记录起始偏移量列表由若干表项构成,每个表项占用2个字节,用于描述一个节点记录的起始偏移地址,节点通过表项定位和访问每个节点记录。
-
每个表项采取倒序排列,第一个节点记录的偏移地址由节点记录起始偏移量列表的最后一个表项描述;第二个节点记录的偏移地址由节点记录起始偏移量列表的倒数第二个表项描述,以此类推。
-
节点记录起始偏移量列表中的表项比节点中的记录数多1,多出表项描述的节点中空闲空间的起始地址,说明节点中最后一个记录的结束地址。如果节点中没有空闲空间,多出的表项描述它本身在节点中的起始偏移。
HFS+文件系统的头节点结构
B-树的第一个节点是头节点,包含着整个B-树的基本信息。头节点的节点描述符后面跟着三个节点记录:
- 头记录,106字节
- 保留记录,128字节
- 位图记录,占用保留记录到节点记录偏移量列表之间的所有空间