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

news/2025/11/28 22:56:31/文章来源:https://www.cnblogs.com/yangykaifa/p/19284374

一、问题概述

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

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 来绕过此限制,例如:

csrutil disable

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

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


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

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

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


操作步骤

以下为详细操作流程:

  1. 打开终端(Terminal)

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

  2. 编辑配置文件

    在终端中执行以下命令:

    sudo vi /etc/synthetic.conf

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

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

    文件格式为:

    目录名[TAB键]目标路径

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

    data	/Users/username/data

    注意事项:

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

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

  5. 重启系统

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

    sudo reboot
  6. 验证结果

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

    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 环境中,安全与灵活并不矛盾,关键在于遵循系统设计原则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/980160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ID48 96-Bit Remote Key Copy: Online Calculation (Daily 3 Tokens, 1-Year) for CGDI K2

Struggling with 96-Bit ID48 Key Copies? Meet Your Solution For automotive repair shops across Europe and America, 96-bit ID48 key duplication has long been a pain point. Whether you’re working on Vol…

实用指南:Drogon: 一个开源的C++高性能Web框架

实用指南:Drogon: 一个开源的C++高性能Web框架pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

Mini Auto Key Programmer: Remotely Unlock Copy 96Bit ID48/NCF29xx Car Keys

The Modern Car Key Programming Dilemma: A Challenge for Mechanics and Owners Alike In today’s automotive world, car keys are far more than just access tools—they’re sophisticated electronic componen…

从零开始的云原生之旅(十一):压测实战:验证弹性伸缩效果 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AI浪潮下的机遇与挑战:从技术突破到就业现实

最近刷到不少AI相关的新闻,感觉整个科技圈都在疯狂内卷。一边是DeepSeek开源模型在数学竞赛中击败谷歌,另一边却是苹果的AI论文翻车导致程序员加班。这种冰火两重天的景象,让我这个学软件的不禁思考:AI到底给我们带…

11.19 jdbc

url:"jdbc:mysql://ip:端口/数据库名称" Connection=DriverMan

用C语言和文本文件实现一个简单的,可保存的通讯录

我们先思考一个通讯录都有那些信息,很明显通讯录记录的是人 人有哪些信息呢 这里我就写5个吧,分别是姓名,年龄,电话,性别,地址 然后我们把他们写成一个结构体,最好定义在头文件里,这样在使用的时候更方便 我们…

Ai元人文:价值的惊险一跃——当AI伦理告别“救火”迈向“共生”

Ai元人文:价值的惊险一跃——当AI伦理告别“救火”迈向“共生” 我们正身处一个巨大的认知裂谷之上。裂谷的一侧,是日新月异、以“数值优化”为圭臬的技术逻辑;另一侧,是古老而复杂、以“意义判断”为内核的人类价…

HarmonyOS 应用开发:深入探索截屏与录屏API的创新实践 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11.28每日总结

今天主要的课程有人机交互技术和机器学习,人机交互的实验做完了,机器学习的实验跟着课程在做,明天去驾校报名,在剩下的大学时间里把能做的多做些

搞定多数据源 + 统一数据格式!用工厂 / 策略 / 适配器模式解决用户端与管理端协同开发痛点

作为一名后端开发,最近在做会员活动相关的用户端系统时,踩了个典型的协同开发坑:管理端和用户端并行开发,管理端负责配置活动规则,用户端需要根据配置展示活动内容,但测试数据源和生产数据源格式不统一、切换数据…

测试档案

测试1测试文章测试标头测试代码

GPU内存层次结构如何影响计算体验

本文深入探讨GPU内存层次结构对计算性能的影响,涵盖CUDA内存类型、缓存层级以及H100系列的新特性,帮助开发者优化内存访问延迟、最大化内存带宽并降低功耗,实现GPU性能的极致发挥。GPU内存层次结构:隐藏的性能瓶颈…

P13270 【模板】最小表示法

题目背景 原模板题:P1368 工艺。 题目描述 若长度为 \(n\) 的字符串 \(s\) 中可以选择一个位置 \(i\),使得 \(\overline{s_i\cdots s_ns_1\cdots s_{i-1}}=t\),则称 \(s\) 与 \(t\) 循环同构。字符串 \(s\) 的最小表…

P5357 【模板】AC 自动机

题目背景 本题原为“AC 自动机(二次加强版)”。完成本题前可以先完成 AC 自动机(简单版) 和 AC 自动机(简单版 II) 两道题,为 AC 自动机更简单的应用。 题目描述 给你一个文本串 \(S\) 和 \(n\) 个模式串 \(T_{…

分布式Session会话实现优秀的方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Revive Adserver存储型XSS漏洞技术分析

本文详细分析了Revive Adserver广告管理系统中的存储型XSS安全漏洞,涉及inventory-retrieve.php和campaign-edit.php文件,包含漏洞复现步骤、技术原理和修复方案,已分配CVE-2025-52667编号。Revive Adserver存储型X…

2025年终总结

多好的35岁,人生黄金期,全盛时期。 2024年年终总结写道:“2024年是个好年份。今年过得真好,有滋有味。果真人生至味是清欢。2024年第一次享受平静,第一次没有大的目标、计划、挑战。只是静心生活,学习,做事。20…

局域网---局域网传输文件及共享桌面

我想要在局域网内进行文件传输以及共享桌面,可以使用文件快传:https://transfer.52python.cn/软件界面:该软件可以联网使用,可以本地部署使用:打完收工!

P2709 【模板】莫队 / 小B的询问

题目描述 小 B 有一个长为 \(n\) 的整数序列 \(a\),值域为 \([1,k]\)。 他一共有 \(m\) 个询问,每个询问给定一个区间 \([l,r]\),求: \[\sum\limits_{i=1}^k c_i^2 \]其中 \(c_i\) 表示数字 \(i\) 在 \([l,r]\) 中…