所有 Macintosh 存储设备(软盘除外)都分区为一个或多个卷。卷可以包含四种类型的项目:文件、目录、目录线程和文件线程。每个项目都由目录记录描述,该记录类似于 Unix inode。目录记录在磁盘目录 B 树中组织。目录内容来自搜索目录 B 树。只有文件可以占用目录记录之外的空间。
Macintosh “文件”包含两个组件,或称为叉(fork)。资源叉(resource fork)是一个索引文件,包含代码段、菜单项、对话框等。数据叉(data fork)具有 Unix 文件内容的“字节流”语义。每个叉由一个或多个区段(extent)或连续的块运行组成。区段描述符将区段的起始块和长度编码为 32 位数量。每个叉的第一个区段记录(三个区段描述符)是文件目录记录的一部分。任何进一步的区段记录都保存在区段溢出 B 树中。
除了文件和 B 树区段外,卷还包含两个引导块、一个卷信息块和一个可用空间位图。磁盘数据结构中存在大量的冗余,这提高了崩溃恢复能力。虽然严格来说不是文件系统的一部分,但应该注意的是,几个目录记录字段被保留供 Finder 独占使用,Finder 是一个处理用户访问文件系统并在应用程序和数据文件之间自动维护关联的程序。因此,HFS 也必须维护此 Finder 信息。
HFS 卷上的每个文件和目录都有一个标识号,类似于 Unix 文件系统中的 inode 号。但是,文件或目录通过其父目录的标识号和文件或目录的文件名来命名,文件名是一个可以包含空字符的 32 个字符的字符串。这种组合是卷目录 B 树的搜索键。目录 B 树与传统的 B 树结构不同,因为 B 树每一层的所有节点都链接在一起形成双向链表,并且所有记录都在叶节点中。这些变体允许通过使用链表遍历叶子来访问同一目录中的许多项目。严格来说,HFS B 树是 B+ 树的变体,尽管 Apple 的技术文档称它们为 B*- 树。
每个目录(包括根目录)都包含其目录线程,该线程具有空文件名。目录线程记录包含目录的名称和目录父目录的 ID。类似地,文件线程包含文件的名称以及它们所在的目录的 ID。虽然每个目录都必须包含一个目录线程,但文件线程非常少见。事实上,两者都是 HFS 冗余的例子 - 对于未损坏的树,线程不是绝对必要的。文件和目录记录都包含 Finder 使用的 32 字节信息。目录 B 树的前三个区段描述符保存在卷信息块中。如果目录 B 树文件增长超过三个区段,则剩余的区段描述符将保存在区段溢出中。
HFS 和 HFS+(也称为 Sequoia)文件系统有详细的文档记录。关于 HFS 的最佳技术信息来源可以在 Inside Macintosh 系列书籍中找到。请查看 http://developer.apple.com/techpubs/mac/Files/Files-99.html。HFS+ 文件系统在 Technote 1150 中描述,可在线获取,网址为 http://developer.apple.com/technotes/tn/tn1150.html。许多信息也可在其他技术说明中找到。这些链接由 Paul H. Hargrove 收集
HFS/2 让 OS/2 用户可以无缝地读取和写入使用分层文件系统(Macintosh 计算机使用的文件系统)格式化的软盘上的文件。使用 HFS/2,Macintosh 软盘可以像普通软盘一样使用。
此程序不再开发,因为作者不再使用 OS/2。如果您愿意维护该程序,请告知他。
hfsutils 软件包包含一组命令行实用程序,例如 hformat、hmount、hdir、hcopy 等。它们允许对 HFS 卷上的文件和目录进行读写访问。