在 macOS(Apple Silicon)根目录下创建目录的正确方式

2025-10-29 17:30:05 237 0 技术文章

在 macOS 上,我想在根目录(/)下创建一个目录,比如 /data1,用于放置项目数据。

mkdir /data1

结果系统提示:

mkdir: /data1: Read-only file system

一开始我以为是权限问题,于是又试了:

sudo mkdir /data1

但依然报错,说明即使 sudo 也不行。

为什么会这样?

从 macOS Big Sur(11) 开始,苹果对系统盘启用了 Signed System Volume(SSV)签名保护机制。

这意味着:

系统卷 / 是 只读的 APFS 快照;

即使是 root 用户,也不能直接修改;

mount -uw / 在 Apple Silicon(M1/M2/M3)上会报错:

mount_apfs: volume could not be mounted: Permission denied
mount: / failed with 66

简单来说:根目录是锁死的。

发现关键:synthetic.conf

在查资料的过程中,我找到了苹果文档中提到的机制:

/etc/synthetic.conf – macOS Big Sur 引入的配置文件,用于在根目录创建“虚拟目录”或符号链接。

这就是系统官方预留的“安全白名单”, 允许我们在 / 下扩展目录结构,而不会破坏系统签名卷。

实战步骤

  1. 编辑配置文件
    sudo vim /etc/synthetic.conf
    
  2. 添加内容(每行一个条目,字段间用 Tab 键)

    data0	/Users/cuiliang/data0
    data1	/Users/cuiliang/data1
    

    ⚠️ 注意:是 Tab,不是空格! macOS 对这个非常严格,如果用空格分隔会被忽略。

  3. 创建实际目录

    mkdir -p ~/data0 ~/data1
    
  4. 重启系统(必须)
    sudo reboot
    
  5. 验证结果

重启后执行:

ls -ld /data*

输出:

lrwxr-xr-x   1 root  wheel    21 10月 29 17:22 /data0 -> /Users/cuiliang/data0
lrwxr-xr-x   1 root  wheel    21 10月 29 17:22 /data1 -> /Users/cuiliang/data1

此时 /data0/data1 都能直接访问:

cd /data1
pwd
# /data1
    没有找到数据。
您的邮箱不会被公开