
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表示不备份、不检查。挂载参数说明
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 驱动了,我觉得你也不妨尝试一下。
作者简介:一个喜欢瞎鼓捣的医学生
