编程 Linux 挂 NTFS:ntfs3 和 ntfs-3g 怎么选,dirty/休眠/unknown filesystem type 怎么排

2026-10-02 00:03:46

Linux 挂 NTFS:ntfs3 和 ntfs-3g 怎么选,dirty/休眠/unknown filesystem type 怎么排

Linux 上挂 NTFS 现在主要有两条路:内核态的 ntfs3 和用户态 FUSE 的 ntfs-3g。两者挂载类型名不同,参数和报错也不一样。下面按驱动、挂载方式、参数、报错对照和选型整理。

三代驱动

  • 2001 年起 Linux 内核有原生 NTFS 支持,但只读、写入极有限、无日志。
  • Tuxera 的 NTFS-3G 长期是事实标准:基于 FUSE 用户空间文件系统,读写完整,支持创建、删除、重命名、硬链接、数据流、稀疏文件、透明压缩、符号链接、设备文件、FIFO、POSIX ACL。代价是 FUSE 层有性能损耗。
  • 2020 年 Paragon 把商业 NTFS3 驱动贡献给主线,Linux 内核 5.15 合并,挂载类型名为 ntfs3。它是内核态实现,支持读写、压缩、稀疏文件、日志重放、NFS 导出、文件权限,性能与资源占用优于 FUSE 版。
  • Paragon 另有商业版 NTFS for Linux(UGM 等),开源 ntfs3 为 GPL。
  • 注意:ntfs3 内核驱动没有配套用户态工具;格式化、维护用 ntfs-3g 包里的 ntfsprogs,或者用 Windows。

挂载方式

ntfs3:

mount -t ntfs3 /dev/sdxY /mnt

带参数:

mount -t ntfs3 -o iocharset=utf8,umask=22,prealloc /dev/sdxY /mnt

fstab:

UUID=**** /data ntfs3 iocharset=utf8,umask=0,prealloc 0 0

ntfs-3g:

mount -t ntfs-3g /dev/sda1 /mnt/windows
ntfs-3g /dev/sda1 /mnt/windows

ntfs-3g 有变体:ntfs-3g 与 lowntfs-3g。lowntfs-3g 支持 ignore_case,不支持 streams_interface=windows。

设备路径用 lsblk 查。

ntfs3 挂载参数

  • iocharset=name:默认代码页,常用 utf8。
  • uid= / gid=:指定属主、属组。
  • umask=:同时管文件和目录。
  • fmask:只管文件。
  • dmask:只管目录。
  • noacsrules:把权限设成 777、属主 root,吸收其它权限。此时 chmod/chown 会报成功但实际不变。
  • discard:支持 TRIM,SSD 建议开。
  • force:卷标脏也强制挂载,不建议。
  • showmeta:显示所有元文件,默认隐藏。
  • prealloc:写入增大时预分配,减少碎片。
  • acl:支持 POSIX ACL,注意与 NTFS ACL 不同。
  • windows_names:严格保持 Windows 兼容。

常见报错对照

1. unknown filesystem type 'ntfs'

mount: /mnt: unknown filesystem type 'ntfs'

内核启用了 CONFIG_NTFS_FS 兼容选项。用 ntfs 类型挂载会走旧驱动,只读。改用 -t ntfs3。

可以写 udev 规则把 ID_FS_TYPE 由 ntfs 改成 ntfs3,但不推荐,可能干扰第三方工具。

2. 文件系统以只读方式挂载

同样是因为用了 ntfs 类型。换成 ntfs3 类型即可读写。

3. 分区 dirty,无法用 ntfs3 挂载

mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error.

dmesg:

sdb1: volume is dirty and "force" flag is not set!

ntfs3 默认不挂载被标记 dirty 的卷。用 ntfsfix --clear-dirty 清理,或者 force,但不建议。

4. Windows 休眠 / 快速启动导致拒绝挂载

Windows 用休眠代替真正关机。hiberfil.sys 存在时,NTFS 分区无法挂载。

处理方式:

  • 恢复 Windows 正常关机。
  • 或者 ntfs-3g -o remove_hiberfile。这会删除休眠文件,保存的 Windows 会话全部丢失。
  • 或者 ntfsfix 删除休眠元数据。

5. 挂载失败排查

fstab 里改用 UUID,而不是 /dev/sdX。BIOS 改存储顺序或者重新拔插,设备名会变。

即使 ntfs3 已加载,不带 -t ntfs3 也可能失败,因为 ntfs3 未列在 /etc/filesystems。

6. ntfs-3g 权限

默认行为像设了 silent、allow_other、nonempty。no_def_opts 取消这些默认。

挂块设备需要 root。即便 fstab 有 user 选项,ntfs-3g 对 setuid 有硬编码限制。卸载可用 fusermount -u 免 root。

streams_interface=none|windows|xattr 控制命名数据流 ADS 访问,默认 xattr。

7. NTFS 有错时

ntfs-3g 只读挂载。修复优先用 Windows chkdsk,ntfsfix 只能修部分错误。

选型

  • 内核 ≥5.15,且要性能、权限管理:选 ntfs3。
  • 老内核,或者需要 ntfsprogs 工具链、更保守的成熟度:选 ntfs-3g。
  • 常读写同一分区,尤其双系统:注意 Windows 快速启动 / 休眠,务必干净关机。

参考链接

推荐文章

程序员茄子在线接单