HFS+文件系统是目前的Apple电脑中默认的最常用的文件系统。HFS+来源于UNIX,但又不用于UNIX,它增加了许多新的特性,同时也有许多不同于Windows、UNIX等系统的概念。

HFS+把文件系统的“卷”称为“宗卷”。为了真正地融入Apple电脑的HFS+文件系统中,就要接受并适应这些概念,所以本书将使用Apple官方的定义方式讲解HFS+文件系统中的相关概念。

HFS+文件系统的发展

早期的Apple电脑使用MFS文件系统,它是一种平面文件系统。到了1985年9月17日,Apple发布了HFS文件系统,它取代了MFS成为Apple电脑上新的文件系统。

HFS即Hierarchical File System,是指分层文件系统,也被称为Mac OS Standard(Mac OS标准系统)。因为Apple系统所产生的数据与Windows、UNIX等系统有很大的不同,所以HFS文件系统能够支持更多的文件属性和双分支文件。每个文件的数据分支(Data Fork)和资源分支(Resource Fork)可以分开存储,数据分支用来存放原始数据,而资源分支则用来存放相应的参数。

1998年1月19日,Apple在其最新发布的Mac OS 8.1系统中推出了HFS Plus文件系统,也写作“HFS+”,同时HFS+文件系统也被称为Mac OS Extended(Mac OS扩展系统)。HFS+文件系统改善了HFS对磁盘空间地址定位效率低下的问题,并加入了很多新的改进。

2002年11月11日,Apple推出了Mac OS X v10.2.2版本,该版本在HFS+文件系统中增加了可选的日志功能,以提高数据的可靠性。但日志型的HFS+主要应用于Mac OS X的服务器中,客户端则需要通过命令行的方式访问日志型的HFS+文件系统。

2003年10月24日,在Apple发布的Mac OS X v10.3版本中,HFS+文件系统全面地支持日志功能,所有的HFS+宗卷将被默认为日志型HFS+文件系统,并且这种具有日志功能的HFS+宗卷被定义为“HFSJ”。

在Mac OS X v10.3版本中,Apple还推出了另外一种HFS+文件系统,称为“HFSX”。HFSX与HFS+几乎完全一样,只是在HFSX中支持大小写敏感,也就是说在HFSX中文件名将区分大小写。

那么如何分辨出Apple的宗卷是HFS+还是HFSX呢,这很容易,通过查看宗卷的卷头就可以分辨出来。具体方法将在下文的卷头结构讲解中详细介绍。

虽然当前版本的Mac OS仍旧支持HFS,但从Mac OS X版本开始,HFS宗卷不能作为启动的宗卷。

由于HFS文件系统早已淘汰,基本不再使用,所以本书不对HFS做更多的讲解,只把重点放在目前流行的HFS+文件系统上。

HFS+文件系统的特点

相对于HFS,HFS+文件系统主要有以下特点。

(1)支持更多的块

Mac系统把硬盘内的空间分为一个个的逻辑块(Logic Block),每个逻辑块大小为512字节,所以逻辑块其实就是扇区。文件系统中文件的分配单元并不是扇区,而是分配块(Allocation Block),每个分配块的大小为2N扇区,所以分配块也就相当于FAT文件系统及NTFS文件系统中的簇。

提示:在本站中我们把Mac系统中的分配块称为“块”。

HFS用16位记录块的数量,这样在一个宗卷中最多可以管理216个块。而HFS+用32位记录块的数量,所以一个宗卷中最多可以管理232个块。

对于相同大小的宗卷,块数增加了就意味着可以减小块的大小,这样就可以减少存储空间的浪费,同时也能够增加文件系统中存储文件的个数。

(2)支持更大的文件

在HFS文件系统中,文件的大小用32位描述,而在HFS+文件系统中用64位描述,所以能够支持更大的文件。

(3)支持更长的文件名

HFS文件系统的文件名只能达到31个字符的长度,而HFS+文件系统则支持255个字符长度的Unicode码文件名。

(4)支持更大的节点

HFS文件系统的节点大小为512字节,而HFS+文件系统则支持4096字节的节点。

HFS+文件系统的元文件

HFS+文件系统中有5种特殊的文件,用来保存文件系统结构的数据性数据和属性,我们称这5个文件为“元文件”,它们分别是分配文件(Allocation File)、盘区溢出文件(Extents Overflow File)、编录文件(Catalog File)、属性文件(Attributes File)、启动文件(Startup File)。

HFS+文件系统的元文件只有数据分支,没有资源分支,它们的起始地址和大小都在文件系统的卷头中描述。

(1)分配文件(Allocation File)

分配文件的作用是描述文件系统中的块是空闲的还是已被占用,它相当于NTFS文件系统中的位图文件。

(2)盘区溢出文件(Extents Overflow File)

HFS+文件系统的“盘区”是为“分支”分配的一系列连续的块,并用“起始块号”和“块数”描述“盘区”的所在地址。对于一个用户文件,每个分支前8个盘区的信息保存在宗卷的编录文件中,如果文件的分支大于8个盘区,超出的盘区信息存放在“盘区溢出文件”中,文件系统只要通过跟踪“分支”的“盘区”就能确定块的具体归属了。

通过上面的描述可以看出,盘区溢出文件的功能实际上类似于UFS文件系统中的间接块指针。

另外,盘区溢出文件也可以为元文件保存除盘区溢出文件自身以外的其他附加盘区信息,不过有一个元文件例外,这个例外就是启动文件。如果启动文件需要的盘区数量大于在卷头中所描述的8个,也因此而需要用盘区溢出文件来保存的话,系统对它的访问就会变得很困难,也就无法达到快速启动的目的。所以,在实际中启动文件将单独保存,这样就不需要在盘区溢出文件中保存它的额外盘区信息了。

(3)编录文件(Catalog File)

编录文件用来描述文件系统内的文件和目录的层次结构,该文件内存储着文件系统中所有文件和目录的重要信息。

编录文件用B-树的形式组织目录结构,B-树能够快速而有效地在一个层次很多的大目录中寻找目标文件。

(4)属性文件(Attributes File)

属性文件的作用是保存文件及目录的附加信息,它的组织结构与编录文件一样,都采用B-树结构。

(5)启动文件(Startup File)

启动文件是一个为了从HFS+宗卷上启动非Mac OS系统而设置的元文件。

另外,在HFS+文件系统中还有一个特殊的文件,用来管理文件系统中有缺陷的块地址,该文件被称为“坏块文件”。

提示:坏块文件不属于用户文件,但它也不属于元文件,在文件系统的卷头中没有对其进行描述。

hfs支持php文件系统,HFS+文件系统的发展及特点介绍相关推荐

  1. 鸿蒙支持ntfs,文件系统 FAT/FAT32/NTFS/ufs/ext3/reiserfs介绍

    文件系统 FAT/FAT32/NTFS/ufs/ext3/reiserfs介绍 FAT16/FAT32 FAT(File Allocation Table)是"文件分配表"的意思. ...

  2. 移植U-BOOT之支持烧写YAFFS文件系统以及制作U-BOOT补丁

    今天,我们来移植U-BOOT让其支持YAFFS文件系统映像的烧写,以及最后的终极目标,制作Uboot补丁,因为我们信心苦苦移植好了Uboot,如果换一个地方的或者换一台电脑之类的,我们也不想再浪费时间 ...

  3. linux so文件支持系统,让linux支持xfs jfs reiserfs 文件系统

    让linux支持xfs jfs reiserfs文件系统 使用的实验环境是:CentOS5.5内核版本是:2.6.18-194.el5,安装好开发环境 所需软件包:kernel-2.6.18-194. ...

  4. u-boot-2012.04.01移植到TQ2440(八):支持烧写yaffs文件系统

    一.支持yaffs烧写文件系统 先直接烧写试一下 TQ2440 # nand write.yaffs32000000 rootfs $filesize NAND write: device 0 off ...

  5. linux asm 文件系统,LINUX 文件系统精通指南---讲的非常好

    究竟什么是"文件系统"?Sheryl Calish 介绍了这个概念以及它的实际应用 尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具.这对 Linux ...

  6. Linux文件系统(文件系统类型、设备文件、常用命令、U盘与光盘挂载)

    Linux文件系统(文件系统类型.设备文件.常用命令.U盘与光盘挂载)   本篇文章是Linux文件系统整块集合,包含了Linux文件系统介绍.设备文件介绍.常用文件系统命令(查看.修复与配置).挂载 ...

  7. linux文件系统dentry_NFS 文件系统源代码剖析

    NFS 文件系统概述 NFS(Network File System,网络文件系统)是一种基于网络的文件系统.它可以将远端服务器文件系统的目录挂载到本地文件系统的目录上,允许用户或者应用程序像访问本地 ...

  8. ROS文件系统和文件系统操作

    目录 ROS文件系统 1.package.xml 2.CMakelists.txt ROS文件系统相关命令 1.增 2.删 3.查 4.改 5.执行 5.1 roscore ROS文件系统 ROS文件 ...

  9. 根文件系统与文件系统的区别

    Ø         根文件系统:英文应该为Root Filesytem,但是有时会被简单地称为文件系统.而实际上就是指的我们前一节所指的Linux系统运行所需的一些文件,命令组成的整个文件目录结构. ...

最新文章

  1. 使用HTML5画布实现的超棒javascript动画仪表板:gauge.js
  2. property、staticmethod、classmethod与__str__的用法
  3. Base64 加密算法原理
  4. 安卓 on a null object reference_详解Object.prototype.__proto__
  5. js转json工具_菜鸟丨Egert3D微信小游戏发布与Unity工具使用
  6. Wordpress基础:精简头部wp_head
  7. 虚拟机 NAT模式与桥接模式的区别
  8. 学维修电脑要多久_学古筝难吗?古筝要多久才能学会?
  9. 微信小程序实现自动语音功能:小程序语音提醒演示
  10. 基于FPGA的视频处理
  11. オルレイア / 雷斧
  12. 2020最新免费网盘
  13. 从后端到前端的简陋博客开发
  14. 机器人测钢卷直径_一种基于关节机器人的冷轧钢卷卷芯焊接方法与流程
  15. webpack概念以及配置文件详解
  16. Guard Ring的制作(基于IC617)
  17. 电子计算机师德风范 论文,师德师风论文2000字
  18. 华为HCIE实验LAB-1
  19. 点阵字库二进制文件修改方案
  20. 图灵奖得主John Hopcroft推荐的这本强化学习入门书

热门文章

  1. HTTP详解(请求方式)
  2. 51单片机中断详解(上)
  3. CentOS7.5安装Oracle19c
  4. Java代码是怎么运行的?
  5. 【贝叶斯神经网络训练】(torch实现)
  6. 22. 将文件映射到内存
  7. 转载: 10+公司SWE/DS offer经验
  8. camera杂项---两种shutter
  9. uni-app项目中引入Vant UI组件库(完美避坑!!!)纯净版
  10. uniapp使用Vant ui