自编译内核启用NTFS3驱动

NTFS3驱动の折腾

起因

NAS上两块机械盘是从之前台式机上拆过去的,Win10的台式机用了好几年,硬盘也理所当然的是NTFS分区,但是众所周知,NTFS是微软独家的商业格式,debian这些linux发行版是不支持的,好在很早之前就有热心人士通过fuse实现了一个名叫ntfs-3g的程序可以读写NTFS分区,只是速度异常缓慢,属于是能用,但只能用一点点。

当初搭建debian based NAS的时候,考虑到随时可能切回Windows环境,不太好直接格盘换ext4格式,就一直用ntfs-3g凑合。 近期发现,ntfs-3g在某些场景下读写严重掉速,千兆内网smb传输单文件,速度仅有70-80MB/s,刚开始还以为是smb的锅,结果换成系统分区(ext4)后,立马就上到110MB/s跑满带宽了。

联想到之前看的新闻,2020年8月Paragon Software基于它们商用版本的NTFS驱动,移植了一个开源版本 NTFS3 到linux上,并在5.15+版本合入内核,据说这个驱动能提供媲美Windows环境下的NTFS分区读写性能。而我的NAS很早就已经升到6.0.0内核了,正要狂喜,突然发现社区有个讨论贴指出,debian官方认为这个新的NTFS驱动在稳定性上还存在一些问题,所以手动在内核里关掉了CONFIG_NTFS3_FS,甚至在即将发布的debian12中也没有启用,这意味着就算手动升级到最新内核,只要是debian官方的内核,都是无法启用新驱动的。

难受之余,发现其他发行版其实都已经用上了新驱动,难道为了一个驱动还要换系统么? 去debian群小问了一手,结果有个群友说自己已经在debian上用了几年了,自己编译的内核,但是建议我直接用ubuntu官方编译好的upstream内核。最后考虑到我NAS上跑着20多个docker还兼职HTPC播放机,担心upstream内核在debian上的稳定性问题,还是决定以debian官方内核为模板手动开启NTFS3配置后重新编译内核。

说干就干

装好编译工具链之后,通过apt下载6.0.12的bpo版本内核源码(其实我一直不太理解为什么源码也可以打包放在apt仓库里,这也算软件么?),解包之后先把/boot/.config拷到根目录,然后运行make menuconfig,开启NTFS3驱动,保存.config文件,然后make deb-pkg -j8编译内核并打包为deb。 如果一切顺利(出错的话google一下安装下对应工具链应该问题不大),编译完后你会得到一个几十兆大小的linux-image-version.deb内核安装包,一个接近1G的linux-image-version-dbg.deb调试包,一个linux-header-version.deb内核头文件安装包。 手动执行下dpkg -i xxx.deb等待安装完成后reboot即可。

看看成果

验证

怀着激动的心情去/etc/fstab里把ntfs改为ntfs3(因为新驱动被合并进内核前能支持NTFS格式的只有ntfs-3g,所以type这里的ntfs其实是ntfs-3g的别名,新驱动的type和驱动同名,为ntfs3),理论上unmount然后mount一下会更快,但我选择reboot。 重启后两块硬盘的NTFS分区均挂载正常,测试了一下读写速度都能跑满机械硬盘I/O,再用smb拷个大文件试试,果然这次能全程稳定113MB/s。

使用ntfs3挂载 测速结果

插曲

本来已经打完收工了,但是突然发现HA那边的蓝牙适配器识别不到了,大概率是升级内核导致驱动掉了,移步这里一起受苦。

Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计