Mac 读写 NTFS 这事,我自己写了个工具:插上硬盘就自动挂载
把一块 Windows 时代留下来的移动硬盘插到 Mac 上,想拷一部电影进去,访达直接弹了个提示:此项目不能被修改——macOS 对 NTFS 天生只读。
装 Paragon NTFS,官网一年两百块;iBoysoft 也要小一百;开源的老方案 macFUSE 更麻烦:要装内核扩展,还得重启进恢复模式把系统安全策略降级,SIP 一关,系统完整性就裸奔了。
作为一个手里有服务器、有代码的人,这事的最优解显然不是掏钱,是自己写一个。于是有了这个「NTFS 读写助手」:一个 1.8 MB 的菜单栏小工具,插上 NTFS 硬盘 3 秒自动转读写、自动弹访达窗口。写完已经在我自己的机器上跑了几天,插拔十几次、330GB 的资料读写无恙。今天放出来,免费下载。

先说结论
- macOS 原生对 NTFS 只读,往里拷文件直接被拒;商业软件(Paragon / iBoysoft)要收费,老开源方案要动系统安全策略
- 我写的 NTFS 读写助手:免费、安装包约 1.8 MB、ntfs-3g + FUSE-T 双引擎全内置,拖进「应用程序」就能用
- 插上硬盘约 3 秒自动转为读写并弹出访达窗口;首次运行授权一次管理员密码,之后永久免密
- 稳定性下了大功夫:USB 掉线 5 秒内自动恢复挂载,推出保护、僵尸挂载自动清理都有
- 支持 Apple Silicon(M 系列)和 Intel,macOS 13 及以上
- 产品页(教程与下载):杨杨.xyz/ntfs;直链:NTFSReadWriteHelper-1.4.0.dmg
为什么 Mac 天生不能写 NTFS
NTFS 是微软的文件系统,核心实现不开源。Apple 的态度一直很微妙:系统里其实藏着一个实验性的 NTFS 写开关(/etc/fstab 里加 ntfs rw),但从来没被官方支持过,新版 macOS 里基本形同虚设。
所以想写 NTFS,只有三条路:
| 路线 | 代表 | 问题 |
|---|---|---|
| 商业闭源驱动 | Paragon NTFS、iBoysoft、Tuxera | 收费年付,闭源黑盒 |
| 内核扩展开源方案 | macFUSE + ntfs-3g | 要重启进恢复模式降级安全策略,新版 macOS 越来越难装 |
| 用户态文件系统 | FUSE-T + ntfs-3g | 性能略低于内核方案,但不碰系统任何设置 |
我选了第三条。FUSE-T 的思路很聪明:它不做内核扩展,而是把 FUSE 文件系统请求翻译成 NFS 协议,通过本机回环挂载。ntfs-3g 则是十几年历史、久经考验的开源 NTFS 实现,Linux 世界的标配。两者都是纯用户态,SIP、系统安全策略统统不用动。
代价也有:因为本质是回环 NFS,Finder 会把这个卷归类成「网络位置」而不是本地磁盘。这是架构决定的,不影响使用。
写 App 容易,稳定才是真功夫
挂载本身不难:调 ntfs-3g,指定卷和挂载点,几行代码的事。真正花时间的是把「插上就能用、拔了再插还能用」做到位。这几个坑记录一下,踩过的都知道多恶心。
坑一:一行解析错误,硬盘被自己反复卸载
FUSE-T 挂载成功后,mount 命令的输出长这样:
fuse-t:/Untitled on /Volumes/Untitled (nfs)
我靠解析这一行来确认挂载状态。第一版代码在截取文件系统类型时,把右括号一起带进了变量——于是类型永远不等于 nfs,App 每 12 秒就误判一次「盘掉了」,重新挂载一次。用户看到的现象就是:插上硬盘,它自己一遍遍卸载重挂。一个字符的 bug,症状完全不搭边。
坑二:僵尸挂载,假成功
USB 短暂断连重连后,系统会给盘分配新的设备号,而旧的 ntfs-3g 进程可能不退出,占着挂载点不撒手。这时 mount 列表里有这个卷,访达里也能看到,但点进去报 Device not configured——一个僵尸卷。
解法是每次挂载后必须做可达性探活:用 statvfs 真的去 stat 一次,通了才算挂载成功,不通就强卸重挂。
坑三:USB 选择性挂起,盘悄悄睡着
macOS 会对闲置的 USB 设备做省电挂起,盘就「掉」了。caffeinate -i -m 能挡住一部分,但文件层的 I/O 命中缓存后挡不住挂起判定。最后用的办法比较硬核:定期以 root 直接读一次裸设备(/dev/disk5 读 512 字节),设备级 I/O 让系统没法把它挂起。配合内存里的「这盘我挂成功过」记忆,盘掉了 5 秒内自动恢复。
坑四:死锁,App 自己把自己锁死
最阴的一个。第一版卸载逻辑是同步等待:主线程等特权助手返回 → 助手的 diskutil unmount 等 DiskArbitration 会话确认 → 而确认恰好需要主线程来应答 → 死锁。表现为 App 偶尔无响应。解法是把所有挂载/卸载操作全部丢到后台队列,再给特权助手加一个 8 秒看门狗,超时就杀进程用 umount 兜底。
怎么用
三步:
- 下载 DMG(约 1.8 MB),拖进「应用程序」
- 打开,输入一次管理员密码——这一步会自动装好免密挂载组件,之后再也不用输密码
- 插上 NTFS 硬盘,等两三秒,访达窗口自己弹出来,直接拖文件

| 项目 | 参数 |
|---|---|
| 当前版本 | 1.4.0 |
| 安装包 | 约 1.8 MB(引擎与运行库全内置) |
| 系统要求 | macOS 13 及以上,Apple Silicon / Intel |
| 引擎 | ntfs-3g 2022.10.3 + FUSE-T(开源引擎) |
| 价格 | 0 元 |
下载地址:
- 产品页(教程 + 常见问题):杨杨.xyz/ntfs
- DMG 直链:NTFSReadWriteHelper-1.4.0.dmg
已知限制
- Finder 里卷显示为「网络位置」样式,这是 FUSE-T 回环 NFS 架构的固有行为
- 写入速度在 USB 机械盘上实测 50 MB/s 左右,够用但别指望媲美原生
- 很老的 NTFS 卷(Windows XP 之前格式化的)没有测试覆盖,遇到问题欢迎反馈
评论 (0)
还没有评论,来说两句吧~
发表评论