macOS 无法在根目录创建目录的原因与解决方案

一、问题概述

在 macOS 的较新版本中(自 Catalina 起),许多用户在终端中尝试在系统根目录下创建文件夹时,会遇到以下错误提示:

bash 复制代码
sudo mkdir /data
mkdir: /data: Read-only file system

即便以 root 身份或使用 sudo 命令执行,也依然无法在根目录中创建新的目录。这一变化让许多开发者和系统管理员感到困惑。

事实上,这并非权限问题或磁盘故障,而是 macOS 系统架构调整后的正常行为。


二、问题原因分析

自 macOS Catalina(10.15)起,苹果对系统卷(System Volume)进行了重要的结构性变更,采用了"双卷架构(System and Data Volume)"。

在该架构下,系统磁盘被拆分为两个逻辑卷:

卷名称 主要内容 权限属性
System Volume 存放操作系统核心文件,如 /System/bin/usr/sbin 只读(Read-only)
Data Volume 存放用户数据,如 /Users/Applications(非系统应用)等 可写(Read-write)

系统会通过联合挂载(firmlinks)机制,把这两个卷在 Finder 和终端中合并显示成一个整体,但实际上 / 根路径所在的部分是只读的系统卷。因此,在根目录创建目录(例如 /data/opt)会被系统拒绝。

此外,macOS 的 系统完整性保护机制(System Integrity Protection,简称 SIP) 进一步限制了 root 用户对系统关键目录的修改权限,以防止恶意程序篡改系统文件。


三、不推荐的解决方式:关闭 SIP

部分网络教程建议通过关闭 SIP 来绕过此限制,例如:

bash 复制代码
csrutil disable

虽然这样确实可以临时恢复对根卷的写入权限,但这种做法会显著降低系统安全性,使系统暴露于潜在的恶意修改风险中。

因此,不建议通过关闭 SIP 或强制挂载根卷为可写的方式解决问题。


四、推荐的官方解决方案:使用 /etc/synthetic.conf

苹果在 macOS Catalina 中引入了一个更为安全、官方支持的机制,允许用户在系统启动时,在根目录下"呈现"自定义目录或符号链接。该机制基于配置文件 /etc/synthetic.conf /etc/synthetic.conf

通过修改此文件,用户可以在不破坏系统安全策略的前提下,于根目录下创建虚拟目录映射。


操作步骤

以下为详细操作流程:

  1. 打开终端(Terminal)

    可通过 Spotlight 搜索"终端"或在 Launchpad 的"其他"文件夹中打开。

  2. 编辑配置文件

    在终端中执行以下命令:

    bash 复制代码
    sudo vi /etc/synthetic.conf

    如果该文件不存在,系统会自动创建。

  3. 在文件中添加映射规则

    文件格式为:

    复制代码
    目录名[TAB键]目标路径

    例如,若希望在根目录 / 下显示一个名为 /data 的目录,实际映射到 /Users/username/data,则应添加如下行:

    复制代码
    data	/Users/username/data

    注意事项:

    • 中间分隔符必须是 Tab 键,不能使用空格;
    • 目标路径必须已经存在,否则映射无效。
  4. 保存并退出编辑器

    vi 中,按 Esc → 输入 :wq → 回车。

  5. 重启系统

    修改完成后,执行以下命令使配置生效:

    bash 复制代码
    sudo reboot
  6. 验证结果

    系统重启后,在终端执行:

    bash 复制代码
    ls -l /

    若配置正确,将看到类似输出:

    复制代码
    lrwxr-xr-x   1 root  wheel     24 Oct 23 09:30 data -> /Users/username/data

    此时 /data 实际上是一个符号链接,指向 /Users/username/data


五、示例与应用场景

如需一次性配置多个目录映射,可以在配置文件中添加多行记录。例如:

复制代码
data	/Users/username/data
logs	/Users/username/logs
projects	/Users/username/projects

配置完成并重启后,系统将在根目录中同时显示 /data/logs/projects 三个虚拟目录。

该方法常用于:

  • 部署数据库数据目录(例如 MongoDB 的 /data/db);
  • 配置开发环境中的共享路径;
  • 为脚本和应用程序提供统一路径。

六、推荐替代路径

在某些情况下,如果无需在根目录下展示目录,建议将数据放置于以下可写位置:

  • /usr/local/(适合存放开发工具或软件资源);
  • /Users/Shared/(适合多个用户共享的数据);
  • /opt/(用于第三方应用的标准安装目录)。

这些路径均位于可写的数据卷中,既安全又符合 macOS 的文件系统规范。


七、总结

项目 内容
问题根源 系统卷变为只读,禁止直接写入
不推荐方案 关闭 SIP 或强制挂载系统卷为可写
推荐方案 使用 /etc/synthetic.conf 配置虚拟目录
是否需重启
风险级别 低(官方支持方式)
建议路径 /usr/local/Users/Shared、或 synthetic.conf 映射路径

八、参考资料


结语

macOS 的安全架构在不断强化,系统根卷的只读化是为了确保操作系统的完整性与稳定性。

通过 /etc/synthetic.conf,用户依然能够以官方支持的方式在根目录下实现自定义目录的映射,既满足开发和部署需求,又不破坏系统安全。

在现代 macOS 环境中,安全与灵活并不矛盾,关键在于遵循系统设计原则。

相关推荐
csdn_aspnet1 天前
在 MacOS 中安装 MySQL 8
mysql·macos
木兰不吃草1 天前
完美解决在最新系统 MacOS 26 无法使用 playCover 键盘映射的问题(下载安装教程,完美适配)
macos·键盘映射·playcover·mac26
乾坤瞬间2 天前
【Deepseek OCR】重磅测试,mac环境下的体验【本人已经本地实验成功】
macos·ocr
开发者驿站2 天前
2025年保姆级C++环境配置教程(Windows/macOS双平台)
c++·windows·macos
猫头虎2 天前
解决升级IDEA2025.2后,每次打开Maven项目爆红的问题:Windows和Mac解决方案
java·ide·macos·maven·intellij-idea·idea·intellij idea
白玉cfc2 天前
【iOS】KVC 与 KVO 的基本了解与使用
macos·ios·objective-c·cocoa
马拉萨的春天2 天前
谈谈你对iOS的runtime和runloop的了解
macos·ios·cocoa
xingxing_F2 天前
A Better Finder Rename for mac 文件批量重命名
macos