•  您好,欢迎访问飞客数据恢复合肥分公司网站,我们为您提供最专业的数据恢复服务  

    综合栏目

    合肥飞客资讯
    苹果数据恢复
    硬盘开盘数据恢复
    业内存储资讯
     

    苹果数据恢复

     
    苹果HFS+文件系统解析
    添加时间: 2013-3-25 来源: 作者: 点击数:14655
    HFS+文件系统结构原理分析
     
    1. 引言
    HFS+文件系统是HFS 文件系统的更新版本,它改进了HFS 文件系统的结构和对数据管
    理中存在的不足。HFS+文件系统的主要特点体现在以下几个方面:
    (1)采用32bit 记录分配块数量
    HFS 和HFS+文件系统对磁盘卷采用分块进行分配,将一个卷分成等大的分配块。HFS
    文件系统采用16bit 来记录分配块的数量,最多只能描述216个分配块。而对于HFS+文件系
    统,采用32bit 来记录分配块的数量,最多能描述232 个分配块。对于Mac 系统上的非空数
    据,都必须占用整数个分配块,也就是说,即使一个数据只有一个字节,也要占用一个分配
    块。而HFS+文件系统增大了每个卷分配块的数量,可以使分配块的单位空间更小,从而达
    到减少存储空间浪费的目的。
    (2)目录树节点大小增加到4KB
    HFS 文件系统的目录树节点大小为512 字节,由于HFS+文件系统目录树索引节点需要
    存储附加指针和节点描述符两个关键值,HFS+文件系统的目录树节点大小增加到4KB。
    (3)单一文件大小得到提升
    HFS 文件系统的单一文件大小上限为231bit,而HFS+文件系统的单一文件大小最大可
    达到263bit。
    (4)支持长文件名
    HFS 文件系统对文件名最长支持到31 个字符,而HFS+文件系统对文件名采用Unicode
    编码,最长达到255 个字符。
    苹果hfs+文件系统结构图
    2. 基本概念
    不同文件系统的体系结构和对数据的管理方式也都采用了不同的方式,每种文件系统都
    有自己特有的一些结构和文件,每种结构和文件都有特定的意义和概念。
    2.1 卷头
    卷头内存储着各种与卷相关的信息,如卷建立的时间、卷大小等,每个HFS+都有必须
    由一个卷头,卷头通常位于2 号扇区。卷头有一个备份存储在卷的倒数第二个扇区。
    2.2 域溢出文件
    HFS+通过跟踪“叉”的“域”来确定哪些分配块属于这个“叉”!坝颉笔俏安妗狈
    1
    配的一系列连续的分配块,用分配块号和分配块的数量来描述。对于一个用户文件,每个叉
    的前8 个域的信息保存在卷的总目录文件中,如果多于8 个,超出的其他域的信息保存在域
    溢出文件中。
    2.3 目录文件
    目录文件用来描述卷内的文件和目录的层次结构,存储着卷内所有文件和目录的重要信
    息,采用B-tree 结构可以快速的在目录中寻找文件。
    2.4 属性文件
    属性文件的结果和目录文件一样,采用B-tree 结构,它的作用是用来保存文件或目录的
    信息。
    2.5 坏块文件
    磁盘上的缺陷或受损位置由坏块文件来记录,以免文件系统对磁盘缺陷位置进行分配。
    3. 文件系统总体布局
    HFS+卷由七种类型的区域组成,分别为用户文件、分配文件、目录文件、域溢出文件、
    属性文件、启动文件和未使用空间。HFS+卷开始和结尾分别保留1024bytes 512bytes,卷
    头一般位于第二扇区,并在倒数第二扇区有卷头的备份。
    4. 卷头数据结构
    每个HFS+卷都有一个卷头,它开始于1024 字节处,记录着其他关键结构位置和大小
    的信息,在卷的倒数第二个扇区,有一个卷头的备份,用来在文件系统出现问题时进行修复。
    卷头的数据结构如下表:
    表1 卷头数据结构
    Tab.1 Volume the first data structure
    字节偏移(16 进制)字节数简要说明
    0000~0001 2 签名
    0002~0003 2 版本
    0004~0007 4 属性
    0008~000B 4 最后装载版本
    000C~000F 4 日志信息块
    0010~0013 4 建立时间
    0014~0017 4 修改时间
    0018~001B 4 备份时间
    001C~001F 4 最后检查时间
    0020~0023 4 文件数
    0024~0027 4 文件夹数
    0028~002B 4 分配块大小字节数
    002C~002F 4 总块数
    0030~0033 4 空闲块数
    0034~0037 4 下一分配块号
     
    2
    5. 节点
    在HFS+文件系统中,共有四种节点,分别是头节点、图节点、索引节点和叶节点。所
    有的节点都具有相同的基本结构,主要包括三个部分,分别是位于节点开始处的节点描述符、
    档案列表和位于节点尾部的档案起始偏移量列表。
    5.1 头节点
    B-tree 文件的第一个节点就是头节点,它包含整个B-tree 文件的基本信息。头节点由头
    节点描述符和档案列表组成,其中档案列表包括B-tree 头档案、保留档案和B-tree 位图档案。
    5.1.1节点描述符的数据结构
    表2 节点描述符的数据结构
    Tab.2 Node data structure descriptor
    5.1.2头档案的数据结构
    表3 头档案的数据结构
    Tab.3 The first file data structure
    0038~003B 4 资源叉块组大小
    003C~003F 4 数据叉块组大小
    0040~0043 4 下一目录ID
    0044~0047 4 写入计数
    0048~004F 4 文档编码位图
    0050~006F 32 Finder 信息
    0070~00BF 80 分配文件信息
    00C0~010F 80 域溢出文件信息
    0110~015F 80 目录文件信息
    0160~01AF 80 属性文件信息
    01B0~01FF 80 启动文件信息
    字节偏移(16 进制)字节数简要说明
    0x00~0x03 4 第一个图节点的节点号
    0x04~0x07 4 前一个节点的节点号
    0x08~0x08 1 节点类型
    0x09~0x09 1 节点在B-tree 结构中的高度
    0x0A~0x0B 2 头节点中含有的档案数
    0x0C~0x0D 2 保留
    字节偏移(16 进制)字节数简要说明
    0x00~0x01 2 本节点在B-tree 中的深度
    0x02~0x05 4 根节点的节点号
    0x06~0x09 4 所有叶节点总的档案数
    0x0A~0x0D 4 第一个叶节点节点号
    0x0E~0x11 4 最后一个叶节点节点号
    0x12~0x13 2 节点的大小字节数
    0x14~0x15 2 索引或叶节点中一个key 的最大长度
     
    3
    5.2 索引节点
    索引节点的档案项使用key 结构,key 结构包含一个key 长度(KeyLength),之后是key
    本身,之后是档案的数据内容。
    5.2.1 key长度
    key 长度指的是紧跟在后面的key 的长度,不包含用以记录其长度的这个数据本身所占
    的空间。key 长度值的大小只有两种,即1 个字节或者两个字节。
    5.2.2 key
    key 的作用是说明本档案项的一些基本属性,如文件名等,对于B-tree 中节点的连接和
    父子目录及文件间的连接起重要作用。
    5.2.3数据
    数据总是起始于偶数字节并占用偶数倍字节数,数据的格式取决于节点的类型。
    5.3 图节点和叶节点
    (1)图节点实在头节点的位图档案无法完全记录B-tree 中的所有节点的时候来存储分配
    数据。当使用图节点来描述数据时,头节点描述符中的0x00~0x03 字节处的fLink 位置指出
    第一个图节点的节点号。图节点由节点描述符和一个位图档案组成。
    (2)叶节点位于B-tree 结构的最末端,由数据档案组成,这些数据档案同样使用key 结
    构。从节点描述符0x08 字节处的值可以判断一个节点是否为叶节点,叶节点此处的值为
    “FF”。
    6. 目录文件
    6.1 档案项的key部分
    (1)数据结构
    表4 档案项key 数据结构
    Tab.4 File of key data structure
    (2)详细解释
    00~03:4 个字节,文件或文件夹的父目录ID。
    04+:0~510 个字节,描述该文件或文件夹在其父目录中的名字,使用Unicode 编码。
    0x16~0x19 4 B-tree 中节点总数
    0x1A~0x1D 4 B-tree 中未使用节点总数
    0x1E~0x1F 2 保留
    0x20~0x23 4 不使用
    0x24~0x24 1 B-tree 类型
    0x25~0x25 1 保留
    0x26~0x29 4 B-tree 属性标识
    0x2A~0x69 64 保留
    字节偏移(16 进制)字节数简要说明
    00~03 4 父目录ID
    04~05 2 文件夹名或文件名长度
    06+ 0~510 文件夹名或文件名
     
    4
    6.2 档案项的数据部分
    6.2.1文件档案项
    (1)数据结构
    表5 文件档案项数据结构
    Tab.5 Data file structure
    (2)HFSPlusCatalogFile 结构
    struct HFSPlusCatalogFolder {
    SInt16 recordType;
    UInt16 flags;
    UInt32 reservedl;
    HFSCatalogNodeID fileID;
    UInt32 createDate;
    UInt32 contentModDate;
    UInt32 attributeModDate;
    UInt32 accessDate;
    UInt32 backupDate;
    HFSPluspermissions permissions;
    FInfo userInfo;
    FXInfo finderInfo;
    UInt32 textEncoding;
    UInt32 reserved;
    HFSPlusForkDate dateFork;
    HFSPlusForkDate resourceFork;
    };
    6.2.2文件夹档案项
    (1)数据结构
    字节偏移(16 进制)字节数简要说明
    00~01 2 档案类型,文件档案总为0x0002
    02~03 2 文件夹位标志
    04~07 4 保留
    08~0B 4 文件自身的CNID
    0C~0F 4 文件建立的时间和日期
    10~13 4 文件最后修改的时间和日期
    14~17 4 属性时间
    18~1B 4 最后访问的时间和日期
    1C~1F 4 文件备份的时间和日期
    20~2F 16 文件夹许可
    30~3F 16 用户信息
    40~4F 16 Finder 信息
    50~53 4 文件命名编码
    54~57 4 保留
    58~A7 80 数据叉存放位置及大小
    A8~F7 80 资源叉存放位置及大小
     
    5
    表6 文件夹档案项数据结构
    Tab.6 Data file folder structure
    (2)HFSPlusCatalogFolde r 结构
    struct HFSPlusCatalogFolder {
    SInt16 recordType;
    UInt16 flags;
    UInt32 valence;
    UInt32 folderID;
    UInt32 createDate;
    UInt32 contentModDate;
    UInt32 attributeModDate;
    UInt32 accessDate;
    UInt32 backupDate;
    HFSPlusPremissions permissions;
    DInfo userInfo;
    DXInfo finderInfo;
    UInt32 textEncoding;
    UInt32 reserved;
    };
    6.2.3链接档案项
    (1)数据结构
    表7 链接档案项数据结构
    Tab.7 Links to the file data structure
    字节偏移(16 进制)字节数简要说明
    00~01 2 档案类型,文件夹档案总为0x0001
    02~03 2 文件夹位标志
    04~07 4 文件或文件夹数量
    08~0B 4 文件夹自身的CNID
    0C~0F 4 文件夹建立的时间和日期
    10~13 4 文件夹最后修改的时间和日期
    14~17 4 属性修改时间
    18~1B 4 最后访问时间和日期
    1C~1F 4 文件夹备份时间和日期
    20~2F 16 文件夹许可
    30~3F 16 用户信息
    40~4F 16 Finder 信息
    50~53 4 文档命名编码
    54~57 4 保留
    字节偏移(16 进制)字节数简要说明
    00~01 2
    档案类型
    0x0003 文件夹链接
    0x0004 文件链接
    02~03 2 保留
     
    6
    (2)HFSPlusCatalogThread 结构
    struct HFSPlusCatalogThread {
    SInt16 recordType;
    SInt16 reserved;
    HFSCatalogNodeID parentID;
    HFSUniStr255 nodeName;
    };
    7. 坏块文件
    坏块文件是用来记录那些有缺陷的不能正常存数数据的块;悼槲募靡桓鎏厥獾
    CNID 作为域溢出文件中域档案的key,当一个块被标记为坏块,拥有这个CNID 的域和坏
    块被添加到域溢出文件,坏块则被分配文件标记为已使用,是文件系统不会再次使用它;悼槲募皇粲谟没募,它在目录中没有文件记录,也不属于特殊文件。
    8. 属性文件
    属性文件属于特殊文件,同样具有B-tree 结构,由一个长度可变的key 和三个数据记录
    类型组成。有两种属性类型,分别为叉数据属性和域属性。
    叉数据属性由4 个字节的recordType来表示属性数据档案类型,由一个HFSPlusForkData
    类型的theFork 记录属性数据存储的大小和位置,同时保留了一个4 个字节的reserved。
    域属性由4 个字节的recordType 来表示属性数据类型,由一个HFSPlusExtentRecord 类
    型的extents 来描述属性数据的前8 个域,同时保留一个4 个字节的reserved。
    9. 总结
    通过本文对HFS+文件系统的分析,可以看书HFS+文件系统对于HFS 文件系统在结构
    和管理方便的不足采取了有效的改进,使文件系统的性能得到了提升。HFS+文件系统已经
    取代了HFS 文件系统成为苹果操作系统的主流文件系统,但从现在专家和用户的评价来看,HFS+文件系统任然存在一个不足。本文通过对HFS+文件系统结构和数据管理的分析,为用户初步的了解此文件系统提供了依据,同时也为用户了解和发现文件系统的优点和不足提供了参考。

    上一条: 苹果分区HFS文件系统介绍
    下一条: 浅谈固态存储的技术
     
    安徽三户网络 | 银川数据恢复 | 山西数据恢复 | 中国硬盘配件网 | 哈尔滨数据恢复 | 数据库恢复
     
    网站首页 公司简介 数据恢复 成功案例 产品与技术 软件及设备 数据恢复外包 数据安全 数据恢复培训 联系我们
    版权所有: 飞客数据恢复中心 Copyright @ 2009-2012 All rights reserved 皖ICP备15013845号-2
    公司地址:安徽省合肥市蜀山区黄山路254号赛博数码广场A座1508室 | 邮编:230031 1024*768显示最佳
    公司电话:0551-62858915 13395696602
    飞客数据恢复中心