背景

之前在用的NTFS读写工具失效了,想着用AI搓一个能用的和自己去找一个好用的可能耗费的精力差不多

于是花了2小时基于claude Code和 GLM 5 搓了一个NTFS可读写的mac程序

项目地址:NTFS4Mac

技术方案

核心原理

NTFS4Mac 的核心原理很简单:利用开源的 ntfs-3g 驱动通过 fuse-t 框架将NTFS分区以读写模式重新挂载。

  • fuse-t: 一个现代化的开源FUSE框架,不需要内核扩展,完美支持Apple Silicon
  • ntfs-3g: 成熟稳定的开源NTFS驱动

相比传统的 macFUSE 方案,fuse-t 不需要加载内核扩展,在安全性和稳定性上更有优势。

项目架构

项目提供两种使用方式:

  1. GUI 应用 - 使用 SwiftUI 开发的原生 macOS 应用
  2. CLI 工具 - 纯 Bash 脚本实现的命令行工具
NTFS4Mac/
├── NTFS4Mac/           # SwiftUI GUI应用
│   ├── Models/         # 数据模型
│   ├── Services/       # 核心服务(挂载、设备检测)
│   └── Views/          # SwiftUI视图
├── lib/                # CLI脚本库
│   ├── mount.sh        # 挂载逻辑
│   ├── devices.sh      # 设备列表
│   └── detect.sh       # 自动检测
└── ntfs-cli.sh         # CLI入口

功能特性

GUI 界面

截图

  • 一键挂载: 点击按钮即可将只读NTFS分区重新挂载为读写模式
  • 状态指示:
    • 绿色 “RW” = 已通过 fuse-t 以读写模式挂载
    • 橙色 “RO” = 只读模式(macOS原生)
    • 灰色 “–” = 未挂载
  • 自动检测: 每3秒自动检测设备变化
  • 在Finder中打开: 快速访问已挂载的卷

CLI 命令

ntfs-cli list               # 列出所有NTFS设备
ntfs-cli mount disk4s1      # 以读写模式挂载
ntfs-cli unmount disk4s1    # 卸载
ntfs-cli eject disk4s1      # 弹出设备
ntfs-cli restore disk4s1    # 恢复为macOS只读模式
ntfs-cli watch              # 自动挂载新插入的NTFS设备
ntfs-cli status             # 显示挂载状态

安装

一键安装

curl -fsSL https://raw.githubusercontent.com/zhouyeyu/NTFS4Mac/main/setup.sh | bash

手动安装

  1. 安装 fuse-t(从 GitHub Releases 下载)
  2. 给 fuse-t.app 授予完全磁盘访问权限
  3. 安装 ntfs-3g:
    brew tap gromgit/fuse
    brew install ntfs-3g-mac
    
  4. 链接 fuse-t 库:
    sudo mv /usr/local/lib/libfuse.2.dylib /usr/local/lib/libfuse.2.dylib.bak
    sudo ln -sf libfuse-t.dylib /usr/local/lib/libfuse.2.dylib
    

技术实现细节

设备检测

通过解析 diskutil list external physical 的输出来识别外接NTFS设备,并检查 /sbin/mount 输出来判断挂载状态。

挂载流程

  1. 先卸载现有的挂载点
  2. 在 /Volumes/ 下创建挂载目录
  3. 调用 ntfs-3g 进行挂载:
    ntfs-3g /dev/disk4s1 /Volumes/VolumeName -o auto_xattr,volname=VolumeName,local
    

权限提升

使用 AppleScript 的 do shell script ... with administrator privileges 来实现友好的GUI权限请求,而非直接使用 sudo。

欢迎在 GitHub 上 Star 和提 Issue!