skip to content

On macOS 11 and later, the startup disk holds a read-only System volume and a writable Data volume that nonetheless appear as one directory tree. What joins them, and how is the System volume protected from modification?

level: seniorimportance: nice to knowfreq 34%

answer

  1. two volumes, one apparent tree
  2. a group, not a mount stack
  3. the OS declares the splice points
  4. you boot a snapshot, not the volume
  5. the whole volume is hashed and signed

basics

~20 s

The two volumes form an APFS volume group joined by firmlinks, which splice Data-volume directories such as /Users into the read-only System tree. The System volume is cryptographically sealed, and macOS boots from a read-only snapshot of it whose seal is verified.

solid answer

~50 s

They form an APFS **volume group**: a sealed, read-only System volume and a writable **Data** volume, mounted at `/System/Volumes/Data`. What makes them look like one filesystem is **firmlinks** — bidirectional links, declared by the OS in `/usr/share/firmlinks` and not creatable by users, that splice directories such as `/Users` and `/Applications` from the Data volume into the System volume's tree. Protection comes from the **Signed System Volume**: the System volume's contents are hashed into a tree whose root seal is signed by Apple and verified during boot, and the running system actually mounts a read-only *snapshot* of that sealed volume rather than the volume itself. So even root cannot write to `/`, and any tampering is detectable rather than merely discouraged. Legitimately modifying the system means disabling the protection, mounting the volume writable, and blessing a new snapshot — a deliberate, reboot-bound operation.

code

bash · 2 lines
bash
cat /usr/share/firmlinks
df -h / /System/Volumes/Data

go deeper

for a junior

Know that modern macOS keeps the operating system on a separate read-only volume from your files, which is why you cannot write into system directories even with sudo.

for a middle

Explain the pieces: a volume group of System plus Data, firmlinks declared by the OS that merge the trees, and the Data volume mounted at /System/Volumes/Data.

for a senior

Add the integrity story — the System volume is hashed and sealed, the running root is a read-only snapshot of it, and legitimate changes require disabling protection and blessing a new snapshot.

for a principal

Discuss the trade-off it encodes: guaranteeing a known-good, attestable system image costs the ability to patch the OS in place, so fleet tooling must move to configuration, MDM and user-space installs instead.

## The problem being solved A traditional Unix root filesystem mixes two very different kinds of content: the operating system, which should be identical on every machine and should never change except during an update, and everything else — users, applications, configuration, logs — which is unique to the machine and changes constantly. If they share one writable volume, you cannot state what the running OS is, verify that it has not been tampered with, or roll it back cleanly. Apple split them. macOS 10.15 Catalina moved the OS onto its own read-only **System volume** and everything else onto a **Data volume**; macOS 11 Big Sur added the cryptographic seal that turns "read-only" into "provably unmodified". ## The volume group The two volumes are not independent. They form an APFS **volume group** inside the same container: they share the container's free space, they are unlocked and mounted together, and tooling treats them as one startup disk. The Data volume's real mount point is `/System/Volumes/Data`, and `df` will happily show you both — with the same available figure, since they share a container. ## Firmlinks A volume group would be awkward if the split were visible in every path, so APFS provides **firmlinks**: bidirectional links between a directory on the System volume and its counterpart on the Data volume. Walking into `/Users` transparently lands you on the Data volume; the tree looks exactly like the single filesystem everyone's muscle memory expects. Three properties matter for an interview: 1. **They are declared, not created.** The set lives in `/usr/share/firmlinks` as a table of path pairs, established by the OS. Users and administrators cannot add firmlinks of their own. 2. **They are bidirectional**, unlike a symlink's one-way redirection, which is why the merge is seamless in both directions rather than a set of redirects programs can trip over. 3. **They are scoped to a volume group.** This is not a general-purpose linking feature you can point at any volume. A symlink would have been visible to every program and easy to defeat; a mount would have shown up in the mount table and been remountable. Firmlinks make the split a property of the filesystem layout itself. ## The Signed System Volume Read-only alone would only stop accidents. The **Signed System Volume** makes the system's contents *verifiable*: the System volume's data and metadata are hashed into a tree, the root of that tree is a seal signed by Apple, and boot verifies the seal before handing control to the system. If a single block differed from what was signed, verification fails. The last piece is the one candidates miss: what gets mounted at `/` is not the sealed volume but a **read-only APFS snapshot** of it. Because a snapshot is immutable by construction, the running system is pinned to exactly the state that was verified — there is no window in which the live volume could be remounted writable underneath a running system. ## What this means in practice **Root cannot write to `/`.** `sudo` does not help, because the restriction is not a permission check — the mounted filesystem is read-only. Software that historically dropped files into system directories had to move to `/Library`, `/usr/local` or a user-space prefix; this is a large part of why third-party tooling on macOS installs outside the system tree. **Updates become atomic and reversible.** An update builds a new system volume state and blesses a new snapshot to boot from. If it fails, the previous snapshot is still there and still valid. **Deliberate modification is possible but heavyweight.** Changing the system means booting to Recovery, disabling the protection, mounting the system volume writable, making the change, blessing a new snapshot and rebooting — and the volume is no longer sealed. The friction is intentional: it converts an easy, silent change into an auditable, reboot-bound one. **Migration and backup tooling had to learn the split.** "Copy the startup disk" now means understanding volume groups, and cloning tools rely on Apple's replication mechanisms rather than a plain file copy of `/`. ## Contrast worth drawing If an interviewer is probing your general OS knowledge, the comparison to reach for is any immutable-OS design: a verified, read-only system image plus a separate writable state area, with updates delivered as whole new images rather than in-place edits. Apple's version happens to use APFS snapshots and firmlinks to keep the result looking like an ordinary Unix root.

  • How is a firmlink different from a symlink or a bind mount?
    A symlink is a path redirection any user can create and any program can see and follow; a firmlink is a bidirectional link between directories in the two volumes of a volume group, declared by the OS and not creatable by users, so the two trees appear genuinely merged rather than redirected. It is closer in spirit to a mount than to a link, but it is a filesystem-level feature of volume groups rather than a mount-table entry.
  • Why does macOS boot from a snapshot of the System volume rather than the volume itself?
    Because a snapshot is read-only by construction and captures the exact sealed state that was verified. Booting the snapshot means the running system cannot be modified even transiently, and updates can prepare a new system volume and bless a new snapshot without touching the one in use — so an interrupted or bad update leaves the previous, still-valid snapshot to boot from.
  • What does a user actually see if they try to write to /System on a current Mac?
    The write fails even as root, because the mounted root is a read-only snapshot of a sealed volume. Making it succeed requires disabling the protection from Recovery, mounting the system volume read-write, making the change, blessing a new snapshot and rebooting — and the volume is no longer sealed afterwards. That deliberate friction is the point: the system is not merely permission-protected, it is cryptographically fixed.

saying these in an interview costs you the question

  • Says /Users is a symlink into the Data volume
  • Thinks the system volume is only protected by file permissions
  • Claims root can write to / after authenticating
  • Believes the split is just two partitions mounted separately
  • Assumes users can create firmlinks for their own directories

context