NTFS 是 Windows NT 系列操作系统支持的磁盘文件系统格式,它是一个特别为网络和磁盘配额、文件加密等管理安全特性设计的文件系统。而 Linux 内核中新进入主线支持的 NTFS3 驱动是一个功能齐全的 NTFS 驱动程序,该驱动程序适用于最高的 NTFS 3.1 版本。
简介
最初,Linux 内核没有 NTFS 的原生支持,后来对 NTFS 的支持也仅提供了只读功能。来自 Tuxera 的 NTFS-3G 是之前主流的解决方案,但在实际使用中也存在一些问题。NTFS-3G 是借助 Linux 的用户空间文件系统(FUSE)模块在用户层实现的一个对 NTFS 支持的文件系统,其对 NTFS 的访问逻辑代码都是在用户层代码实现的。
在 NTFS3 出现之前,Linux 上使用 NTFS 主要问题还是缺乏稳定且功能齐全的读/写支持。
2020 年,Paragon 软件公司做出了一个惊人的决定:尝试将之前只提供给商业客户的 NTFS3 驱动程序贡献到 Linux 主线。最终,在经过多轮审核和修改之后,Linux 内核 5.15 合并了 Paragon 提供的 NTFS3 内核驱动,它拥有更高的性能和更多的特性。
- 该驱动程序实现了对 NTFS 文件系统中的正常、稀疏和压缩文件的读/写支持。
- 支持本地日志回放。
- 支持已挂载的 NTFS 卷的 NFS 导出。
- 支持文件和文件夹的权限管理。
如何使用 NTFS3 驱动挂载 NTFS 卷
使用 NTFS3 驱动挂载时使用的文件系统类型是 ntfs3
。
手动挂载
以前使用 NTFS-3g 驱动的挂载方式是:
# mount -t ntfs-3g /dev/sdxY /mnt
现在只需要将 ntfs-3g
替换为 ntfs3
即可:
# mount -t ntfs3 /dev/sdxY /mnt
-t
指出文件系统类型,/dev/sdxY
是你的 NTFS 卷(分区)的路径,可以使用 lsblk
命令查看。/mnt
是挂载的目标文件夹。
如果需要指定挂载参数,可使用 -o
指定参数,如:
# mount -t ntfs3 -o iocharset=utf8,umask=22,prealloc /dev/sdxY /mnt
这里的 iocharset=utf8,umask=22,prealloc
挂载参数,详见后文解释。
开机自动挂载
如需在开机时自动挂载,可编辑 /etc/fstab
文件,添加如下行:
UUID=**** /data ntfs3 iocharset=utf8,umask=0,prealloc 0 0
其中 UUID=****
是指定卷(分区)的 UUID。使用 UUID
的好处在于它们与磁盘挂载顺序无关。如果你在 BIOS 中改变了你的存储设备顺序,或是重新拔插了存储设备,或是一些 BIOS 可能会随机地改变存储设备的顺序,那么用 UUID
来表示指定卷(分区)会更有效。可以使用 blkid
命令查看 UUID
。
/data
是挂载位置。本示例的位置是 /data
,你需要提前创建这个文件夹。
后面的选项都是挂载参数,参见后文介绍。
最后两个 0 0
,表示是否备份和是否检查。0 0
表示不备份、不检查。
挂载参数说明
参数 解释 iocharset=name
此选项告知驱动程序如何解释路径字符串,并将其转换为 Unicode 或返回。如果未设置此选项,将使用默认代码页。示例:iocharset=utf8
uid=
挂载用户 ID gid=
挂载组 ID umask=
控制装载 NTFS 卷后创建的文件/目录的默认权限。 dmask=
fmask
只适用于文件,dmask
只适用于目录,而不是指定同时适用于文件和目录的 umask
。 fmask= 见上 noacsrules
“无访问规则”装载选项将文件/文件夹的访问权限设置为 777,所有者/组设置为 root。此装载选项吸收所有其他权限。文件/文件夹的权限更改将报告为成功,但仍将保持 777。所有者/组更改将报告为成功,但他们将保留为 root 用户。 nohidden
Linux 下不会显示具有 Windows 特定隐藏(FILE_ATTRIBUTE_HIDDEN
)属性的文件。 sys_immutable
具有 Windows 特定系统(FILE_ATTRIBUTE_SYSTEM
)属性的文件将标记为系统不可变文件。 discard
支持 TRIM 命令以提高删除操作的性能,建议将其用于固态驱动器(SSD)。 force
即使卷被标记为脏,也强制驱动程序装载分区。不建议使用。 sparse
创建稀疏的新文件。 showmeta
使用此参数可显示已装入 NTFS 分区上的所有元文件(系统文件)。默认情况下,所有元文件都是隐藏的。 prealloc
当写入时文件大小增加时,为文件过度预分配空间。减少对不同文件执行并行写入操作时的碎片。 acl
支持 POSIX ACL(访问控制列表)。如果内核支持,则有效。不要与 NTFS ACL 混淆。指定为 acl 的选项支持 POSIX acl。 NTFS3 的优点
NTFS3 是内核态的驱动,ntfs3 比 ntfs-3g 无论是速度还是负载都要好上不少。
已经有诸多网友做过测试:
除了性能更好以外,NTFS3 还支持挂载用户和文件权限管理等功能。具体使用方法可以自行学习 gid
、uid
以及 umask
的用法。
另外 NTFS3 还支持 NTFS 的 prealloc
特性,可以大幅减少文件碎片的产生。
关于 NTFS3 驱动无人维护的问题
Paragon 于 2020 年在 GNU 通用许可证下发布了 NTFS3 驱动程序,在开源后的一年里,NTFS3 的驱动经过了多轮审查和修改,用来提高代码质量。直到 2021 年合并进入内核主线。
但是自从该驱动 2021 年在 Linux 5.15 中最终被主线化以来,至今为止,在接近一年的时间里,还没有任何重大的错误修复被送入驱动。
有人推测是该驱动的维护者 Konstantin Komarov 身处俄罗斯,受到俄乌战争影响的原因。
随后包括 Linus Torvalds 在内的诸多程序员都对此事表达了关切,并且愿意参与到贡献中来。
现在,我们看到 Paragon 软件公司的 Konstantin Komarov 在因休息和其他事务而离开后,又重新活跃在内核邮件列表中。Komarov 在 2022 年 6 月 3 日为 Linux 5.19 的合并窗口提交了一批 NTFS3 的修正。
我相信 ntfs3 未来会越来越好。并且目前,ntfs3 已经是 Linux 中最好用 NTFS 驱动了,我觉得你也不妨尝试一下。
作者简介:一个喜欢瞎鼓捣的医学生