macOS 文件系统深度解析

13 阅读15分钟

1. 概述

现代 macOS 的存储架构,远比表面看起来复杂。要真正理解 / 背后发生了什么,必须先了解 Apple 多年来对系统分层设计所做的演进。

从 macOS Catalina 开始,Apple 将系统拆分为:

  • System Volume(系统卷)

  • Data Volume(数据卷)

这一改变的出发点,是将只读的操作系统文件与用户可写的数据彻底分离,从而为后续的安全加固奠定基础。

从 Big Sur 开始,Apple 进一步引入了更激进的安全机制:

  • Signed System Volume (SSV)——对系统卷进行加密签名校验

  • APFS Snapshot Boot——从快照启动而非直接挂载卷

  • Firmlink Namespace——在内核层面实现跨卷目录映射

而在 Apple Silicon 平台上,由于芯片内置了独立的安全处理器和固件信任链,启动流程又增加了若干新的参与者:

  • iSCPreboot——存储并执行本地启动策略(LocalPolicy)

  • xART——保存可信缓存与安全启动元数据

  • Hardware——存储设备激活、工厂数据等硬件相关信息

  • Secure Boot Policy——Apple Silicon 特有的多层级安全启动策略体系

因此,现代 macOS 的根目录 / 已不再对应某一个真实的磁盘分区,而是由多个卷共同构建出的统一命名空间(Namespace Union)。理解这一点,是读懂本文所有内容的前提。


2. APFS 容器结构

APFS(Apple File System)以"容器"(Container)为最顶层的存储单元,容器之下才是各个独立的"卷"(Volume)。本机的主要 APFS 容器位于 disk3,内部包含以下卷:


disk3

├── disk3s1 System

├── disk3s2 Preboot

├── disk3s3 Recovery

├── disk3s5 Data

└── disk3s6 VM

其中,System 卷与 Data 卷在逻辑上属于同一个"卷组"(Volume Group):


disk3s1

Name: Macintosh HD

Role: System

  


disk3s5

Name: Data

Role: Data

它们共同归属于:


APFS Volume Group

UUID:

937449E6-EFC1-4FF8-B7B9-10B984769757

Volume Group 的概念由 macOS Big Sur 引入,其核心作用是将 System 卷与 Data 卷在逻辑上绑定为一对,使得 Finder、diskutil 以及系统工具能够将二者作为一个整体来管理,而无需用户感知其内部的分离结构。


3. 实际启动卷

一个常见的误解是:系统从 disk3s1(System Volume)启动。事实并非如此。

验证:


mount | grep ' / '

结果:


/dev/disk3s1s1 on /

(apfs, sealed, read-only)

这里出现了一个三级设备节点 disk3s1s1,它并不是一个独立的分区,而是 disk3s1 上的一个 APFS Snapshot(快照)。完整的启动层次如下:


disk3s1

↓

Snapshot

↓

disk3s1s1

↓

挂载到 /

结构图:


disk3s1

(System Volume)

│

▼

Signed Snapshot

(disk3s1s1)

│

▼

/

这意味着,你所看到的 /System/bin/usr 等目录,实际上来自一个不可变的快照,而非 System Volume 本身的实时状态。


4. Signed System Volume(SSV)

SSV 是 macOS Big Sur 引入的核心安全特性之一,其目标是确保系统文件在出厂之后不会被任何人(包括 root 用户)悄无声息地篡改。

验证:


diskutil info /

结果:


Sealed: Yes

Volume Read-Only: Yes

当前启动的是:


Signed System Volume

其安全特性体现在多个层面:

  • 只读(Read-Only):任何写操作都会被拒绝

  • Apple 签名:整个卷的内容由 Apple 在发布时完成签名

  • Hash Tree 校验:内核在访问每一个文件时都会验证其哈希值,确保文件未被修改

  • Secure Boot 验证:iBoot 在加载系统之前,会验证 SSV 的签名是否有效

因此,以下路径的所有内容:


/System

/bin

/sbin

/usr

均来自:


disk3s1s1

而非 Data 卷。即便是 root 用户,也无法在不破坏 SSV 完整性的前提下修改这些路径中的任何文件。


5. Root Namespace Union

用户在使用 macOS 时,会感觉 / 就是一个完整统一的文件系统,然而背后真正发生的是两个独立卷的"命名空间合并"(Namespace Union)。

验证:


ls -ldO /

结果:


sunlnk

同时:


ls -ldO /System/Volumes/Data

结果:


sunlnk

sunlnk 标志(Sun Link)是 macOS 内核用于标记参与 Namespace Union 的目录节点的标志位,说明系统正在使用:


Namespace Union

机制。这一机制的逻辑结构如下:


System Snapshot

+

Data Volume

│

▼

统一根目录 /

用户最终看到的是一个合并后的视图——来自 System Snapshot 的只读系统文件,与来自 Data Volume 的可写用户数据,在同一棵目录树中和谐共存,中间的边界对用户完全透明。


6. Firmlink 机制

Namespace Union 能够实现的关键技术之一,就是 Firmlink(固态链接)。Firmlink 是 Apple 专为 APFS 设计的跨卷目录映射机制,其工作方式类似于符号链接(Symlink),但在实现层面有根本性的不同。

验证:


cat /usr/share/firmlinks

结果:


/Applications

/Users

/Library

/private

/opt

/cores

/pkg

/usr/local

...

上述路径虽然在用户看来位于系统根目录下,但实际上它们全部指向:


/System/Volumes/Data

例如:


/Applications

│

▼

/System/Volumes/Data/Applications


/Users

│

▼

/System/Volumes/Data/Users


/Library

│

▼

/System/Volumes/Data/Library

Firmlink 与传统 Symbolic Link 的核心差异如下表所示:

| 特性 | Firmlink | Symlink |

| --------- | -------- | ------- |

| 内核级 | 是 | 否 |

| 用户可见 | 否 | 是 |

| 跨卷映射 | 是 | 否 |

| Finder 显示 | 普通目录 | 链接 |

正是因为 Firmlink 工作在内核层面且对用户不可见,绝大多数应用程序在访问 /Applications/Users 时,完全无感知地穿越了卷边界,访问到的实际上是 Data Volume 中的内容。


7. 根目录结构

了解了 Firmlink 机制之后,就可以更清晰地理解根目录中各路径的真实归属。

7.1 Data Volume 实际存储目录

以下路径在表面上位于根目录,但实际上通过 Firmlink 映射到 Data Volume:


/Applications

/Users

/Library

/private

/opt

/cores

/pkg

实际位于:


/System/Volumes/Data

这些都是用户可写的目录,属于系统的"可变"部分。


7.2 Symbolic Link

除了 Firmlink,根目录下还存在若干传统的 Symbolic Link,主要用于维护历史路径兼容性。

etc


/etc

↓

private/etc


tmp


/tmp

↓

private/tmp


var


/var

↓

private/var

/private 实际上是一个真实目录,位于 System Snapshot 中,而 /etc/tmp/var 则是指向其子目录的符号链接。这一设计同样是历史遗留——在 macOS 早期,这些路径的行为与传统 Unix 系统保持一致。


home

验证:


mount | grep home

结果:


auto_home

结构:


/home

↓

/System/Volumes/Data/home

/home 的行为与其他路径略有不同。它实际上由:


autofs

动态管理,负责在需要时自动挂载网络主目录(如通过 Open Directory 或 LDAP 绑定的用户目录),属于按需挂载(on-demand mount)的机制。


8. Volumes 目录

/Volumes 是 macOS 的传统挂载点目录,所有可见的磁盘卷(包括外部存储)通常都会挂载于此。值得注意的是,这里存在一个容易令人困惑的设计。

验证:


ls -ld /Volumes/"Macintosh HD"

结果:


Macintosh HD -> /

因此:


/Volumes/Macintosh HD

实际上是一个:


符号链接

指向:


/

形成的循环结构:


/Volumes/Macintosh HD

│

▼

/

这一设计主要用于兼容旧软件(部分应用以 /Volumes/Macintosh HD/... 的形式引用路径)以及 Finder 的导航逻辑——在 Finder 侧边栏中,"Macintosh HD" 作为一个独立的磁盘图标呈现,点击后实际访问的就是根目录 /


9. Data Volume

Data Volume 是用户日常操作中写入最频繁的卷,承载了系统运行时的所有可变数据。

挂载:


disk3s5

路径:


/System/Volumes/Data

验证:


mount

结果:


protect

root data

说明该卷是:


Root Data Volume

其主要作用涵盖以下几个方面:

  • 用户数据:Home 目录、文档、下载等所有个人文件

  • 第三方应用:从 App Store 或其他渠道安装的应用程序

  • Home Directory:所有本地用户的主目录均位于此卷

  • 可写系统数据:部分系统组件在运行时需要写入的配置与缓存

与 System Volume 的只读特性不同,Data Volume 支持读写操作,也是 FileVault 加密的主要保护对象。


10. Preboot Volume

Preboot Volume 是启动过程的关键参与者,承担着为内核加载提供支撑材料的职责。

卷:


disk3s2

挂载:


/System/Volumes/Preboot

其中存储的内容包括:


Kernel Collections —— 内核及内核扩展的集合,由 kextcache 构建

Boot Manifest —— 启动清单,描述当前启动配置

Boot Support Files —— iBoot 与早期启动阶段所需的辅助文件

Preboot Volume 通常在启动完成后不会被用户直接访问,但在系统更新或重建内核缓存时,系统会对其进行写入操作。


11. Recovery Volume

Recovery Volume 平时处于"休眠"状态,仅在需要系统恢复时才会被激活并挂载。

卷:


disk3s3

Role:


Recovery

正常运行时不挂载,用户无法直接访问。

当系统无法正常启动、或用户主动进入恢复模式(Apple Silicon 上长按电源键,Intel 上按住 Cmd+R)时,该卷会被加载,提供以下能力:


macOS Recovery —— 完整的恢复环境

恢复系统 —— 从 Time Machine 或互联网恢复系统

磁盘工具 —— First Aid、分区、抹除等操作

终端 —— 命令行访问,用于高级排查

重新安装系统 —— 在线下载并重新安装 macOS


12. VM Volume

VM Volume 专用于虚拟内存管理,是系统在内存压力下进行页面置换的场所。

卷:


disk3s6

挂载:


/System/Volumes/VM

其主要功能:


swapfile —— 交换文件,用于将内存页面置换到磁盘

memory pressure —— 配合系统内存压力管理机制

虚拟内存 —— 为所有进程提供统一的虚拟地址空间支撑

该卷的挂载参数包含:


noexec

即禁止在此卷上执行任何可执行文件,从而防止潜在的安全利用(将恶意代码写入 swap 后尝试执行)。


13. Update Volume

Update Volume 是系统更新流程中的临时工作区,负责在更新写入正式生效之前暂存相关数据。

卷:


disk3s4

挂载:


/System/Volumes/Update

其作用包括:


系统更新缓存 —— 存放已下载但尚未应用的更新包

SSV 构建 —— 新 System Volume 快照的构建工作区

更新中间状态 —— 记录更新进度,支持断点恢复

这一设计使得 macOS 能够在不中断当前运行系统的前提下,在后台完成新系统快照的构建,下次重启时再切换到新的 Signed Snapshot。


14. Apple Silicon 辅助启动容器

Apple Silicon 的安全启动链远比 Intel 时代复杂。除了主存储器上的 disk3 容器,系统还存在一个额外的 APFS 容器:


disk1

这个容器运行在 Apple Silicon 的安全飞地(Secure Enclave)及启动辅助芯片(SoC)的控制下,其结构为:


disk1

├── iSCPreboot

├── xART

├── Hardware

└── Recovery

这四个卷共同构成了 Apple Silicon 平台独有的"安全启动辅助层",在 iBoot 正式加载 macOS 内核之前发挥关键作用。


15. iSCPreboot

iSCPreboot(iSC 代表"Internal SoC",即片上系统内部)是 Apple Silicon 启动策略的核心存储卷。

卷:


disk1s1

挂载:


/System/Volumes/iSCPreboot

在对其内容进行探查时,可以发现:


937449E6-EFC1-...

这个目录名与:


APFS Volume Group UUID

完全一致。这并非巧合——它明确表明 iSCPreboot 中的内容与特定的 Volume Group 绑定,每个已注册的 macOS 安装都对应其中的一个目录。

该目录内部进一步包含:


LocalPolicy/

LocalPolicy 是 Apple Silicon 安全启动体系的核心概念之一,记录了针对本机当前 macOS 安装所设定的启动策略,具体涵盖:

  • Startup Security(启动安全性):完整安全性(Full Security)、降低安全性(Reduced Security)

  • External Boot Policy(外部启动策略):是否允许从外部存储设备启动

  • Custom Kernel Extensions:是否允许加载第三方内核扩展

  • MDM Enrollment(移动设备管理)相关策略

iSCPreboot 的整体目录结构如下:


iSCPreboot

├── VolumeGroupUUID

│ └── LocalPolicy

├── SystemRecovery

├── WiFi

└── SFR


16. xART

xART 是 Apple Silicon 启动链中保密程度最高的组件之一,其全称和内部实现均未被 Apple 公开记录。

卷:


disk1s2

挂载:


/System/Volumes/xarts

在对其进行有限探查时,发现:


A375F60A-....gl

其物理特征:

  • 大小约 6 MB,体量极小

  • 受 SIP(System Integrity Protection)严格保护

  • 即使是 root 用户也无法读取其内容

根据现有的逆向工程资料与 Apple 安全白皮书的间接线索,推断其用途如下:


Trust Cache —— 系统信任的可执行文件哈希缓存

Boot Artifacts —— 启动过程所需的中间产物

Secure Boot Metadata —— 支持 SSV 校验的元数据

IMG4 / IM4P 相关数据 —— Apple 固件签名格式的相关数据

Apple 至今未公开 xART 的详细文档,其内部格式和访问协议对外部研究者仍属黑盒。


17. Hardware Volume

Hardware Volume 存储了设备生命周期中积累的各类硬件相关数据,是设备身份与健康状态的"档案室"。

卷:


disk1s3

挂载:


/System/Volumes/Hardware

对其内容进行探查,发现以下目录和文件:


FactoryData —— 出厂时写入的设备基础数据

MobileActivation —— 设备激活信息,与 Apple ID 及 iCloud 相关

ProductDocuments —— 产品文档与认证资料

dramecc —— DRAM ECC(纠错码)状态记录

recoverylogd —— 恢复流程日志

srvo —— 未公开用途的硬件服务数据

这些数据属于设备的"出厂固有属性",在正常使用过程中不会被修改,但在设备激活、硬件更换或特定维修场景下可能会被系统读取或更新。


18. Simulator Runtime

macOS 上的 iOS/iPadOS 模拟器并非单纯的软件层,其运行时(Runtime)以独立 APFS 卷的形式挂载,本机上存在两套不同的运行时机制,体现了 Apple 正在推进的架构演进。

18.1 传统 Runtime


disk5s1

挂载:


/Library/Developer/CoreSimulator/Volumes/iOS_23E254a

对应:


iOS 26.4.1 Simulator

这是传统的模拟器运行时挂载方式:每个 iOS 版本的运行时作为一个独立的 APFS 卷存在,以只读方式挂载到 /Library/Developer/CoreSimulator/Volumes/ 下对应的路径。


18.2 Cryptex Runtime


disk7s1

挂载:


/private/var/run/com.apple.security.cryptexd/mnt/...

对应:


iOS 27.0 Simulator

新版模拟器运行时开始采用:


Cryptex

机制进行动态挂载。Cryptex 是 Apple 在 macOS Monterey 和 iOS 15 中引入的安全容器格式,最初用于 macOS 安全更新(Rapid Security Response),现已扩展到模拟器运行时的分发与挂载场景,具备更灵活的签名验证与按需加载能力。这一转变意味着未来的 Simulator Runtime 将统一走 Cryptex 通道,而非传统的静态卷挂载模式。


19. APFS 加密用户

APFS 支持多用户加密(Multi-User Encryption),其用户模型与 macOS 的登录账户体系并不一致,理解这一点对于正确使用 FileVault 至关重要。

验证:


diskutil apfs listUsers /

结果:


Local Open Directory User

Volume Owner: Yes

  


Personal Recovery User

Volume Owner: Yes

这里需要强调:APFS 用户并不等于 macOS 登录用户。

APFS 用户是持有卷加密密钥(Volume Encryption Key, VEK)解锁权限的实体。当前卷上存在两个 Owner 级别的 APFS 用户:

Local Open Directory User:代表本地 macOS 账户的加密密钥持有者,当用户输入登录密码时,该用户对应的密钥保护器(Key Protector)会被解锁,进而解密整个卷。

Personal Recovery User:用于以下场景:

  • 当用户忘记 FileVault 密码时,通过个人恢复密钥(Personal Recovery Key)解锁卷

  • 在 Recovery 环境下进行身份认证

  • 配合 Apple ID 实现 iCloud 托管的恢复流程


20. 完整启动链

将上述所有组件串联起来,macOS Apple Silicon 的完整启动链如下所示。每个环节都是前一个环节的信任基础,任何一处校验失败都会中断整个启动流程:


Boot ROM

│ (固化在 SoC 中,Apple 签名,不可修改)

▼

LLB

│ (Low-Level Bootloader,第一级引导程序)

▼

iBoot

│ (第二级引导程序,负责验证后续组件)

▼

iSCPreboot

│

└── LocalPolicy

(读取并应用启动策略:安全级别、外部启动权限等)

│

▼

xART

│

└── Trust Cache

Boot Artifacts

(验证后续加载组件的签名合法性)

│

▼

disk3s1

(System Volume)

│

▼

Signed Snapshot

(disk3s1s1)

│ (验证 SSV 签名,校验 Hash Tree 完整性)

▼

Namespace Union

│

├── System Snapshot (只读,来自 disk3s1s1)

└── Data Volume (读写,来自 disk3s5)

│

▼

最终根目录 /


21. 最终结论

通过以上对各个组件的逐一分析,可以得出一个清晰的结论:

现代 Apple Silicon macOS 的 / 并不是单一文件系统,而是由以下组件共同构建的逻辑视图:


Boot Policy

(iSCPreboot)

+

Secure Boot Artifacts

(xART)

+

Signed System Snapshot

(disk3s1s1)

+

Root Data Volume

(disk3s5)

+

Firmlink Namespace

+

Symlink Layer

+

Autofs

│

▼

最终用户看到的 /

从系统实现角度来看,macOS 根目录实际上是一个由 APFS Snapshot、Volume Group、Firmlink、Secure Boot 和 Namespace Union 共同组成的逻辑文件系统视图,而非传统意义上的单一磁盘分区。

这一设计的核心价值在于:它在不牺牲用户体验的前提下,实现了系统文件的加密签名保护、用户数据的读写灵活性、以及从固件到操作系统的完整信任链——三者在同一个看似普通的 / 背后和谐共存,这正是 Apple Silicon 安全架构最精妙的地方之一。


文档版本: v1.0

分析对象: MacBook Pro 14(macOS Golden Gate 27.0 beta 1)

分析方式: 实机验证(diskutil、mount、firmlink、snapshot、APFS Volume Group、Simulator Runtime)