飞牛系统FNOS添加NTFS3模块并挂载NTFS分区

本文步骤已经验证,为初版整理,如有遗漏细节,可以和我沟通。

由于飞牛(FNOS)内核使用的是精简版内核,内核中没有NTFS3驱动,导致无法加载NTFS分区。 但是我的文件都是存储于NTFS硬盘分区的,挂载NTFS分区功能还是很有必要的。FNOS社区也有不少反馈的声音,但是官方貌似还没有计划将挂载NTFS分区功能开发例如路线图。

由于迫切的想挂载NTFS,所以自己尝试解决了。下面分享自行编译NTFS3模块并在FNOS使用的过程。

1. 安装必要的依赖

sudo apt update
sudo apt install build-essential linux-headers-$(uname -r)

2. 下载 Linux 内核源码

由于 ntfs3 是 Linux 内核中的 fs/ntfs3 目录下的模块,我们需要获取与 6.6.38-trim 版本匹配的源码。

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.38.tar.xz
tar -xf linux-6.6.38.tar.xz
cd linux-6.6.38

3. 配置内核源码

复制系统的当前内核配置文件,以匹配 6.6.38-trim 内核的配置:

cp /boot/config-$(uname -r) .config
make oldconfig

然后启用 NTFS3 模块:

make menuconfig

进入 File systems -> DOS/FAT/NT Filesystems,确保 NTFS3 选项 (CONFIG_NTFS3_FS) 被选为 m(模块)。

File systems  ---> 
    DOS/FAT/NT Filesystems  --->
        <M> NTFS read/write support

然后执行:

make olddefconfig

4. 仅编译 NTFS3 模块

不需要编译整个内核,只编译 ntfs3 模块:

make M=fs/ntfs3 modules

编译完成后,fs/ntfs3/ 目录下应该会生成 ntfs3.ko 模块文件。

**** 需要注意的是,由于FNOS的内核是精简内核,编译会遇到无法找到链接符号的问题,这时候可以通过编译所有内核模块解决,编译整个内核时间会比较长,需要耐心等待。**

内核完成编译

make modules_prepare
make modules -j$(nproc)

同样在编译完成后可以在 fs/ntfs3/ 目录下应该会生成 ntfs3.ko 模块文件。

5. 安装 NTFS3 模块

将编译好的模块拷贝到 /lib/modules/6.6.38-trim/kernel/fs/ntfs3/ 并更新 depmod

sudo cp fs/ntfs3/ntfs3.ko /lib/modules/6.6.38-trim/kernel/fs/ntfs3/
sudo depmod -a

然后尝试手动加载:

sudo modprobe ntfs3

如果没有报错,检查模块是否成功加载:

lsmod | grep ntfs3

为了保持系统干净,也可以复制ntfs3.ko到FNOS系统。

系统路径为 /lib/modules/6.6.38-trim/kernel/fs/ntfs3/ ,注意权限问题,权限应为 644

6. 挂载 NTFS 分区

假设你的 NTFS 分区在 /dev/sdXn(比如 /dev/sdb1),可以测试挂载:

sudo mount -t ntfs3 /dev/sdb1 /mnt

如果挂载成功,可以将其加入 /etc/fstab,使其在系统启动时自动挂载:

echo "/dev/sdb1 /mnt ntfs3 defaults 0 0" | sudo tee -a /etc/fstab

7. 解决模块丢失问题

如果内核更新后 ntfs3.ko 丢失,你可能需要重新编译并安装它。可以创建一个 dkms 模块,或者将 ntfs3.ko 复制到 /lib/modules/6.6.38-trim/extra/,然后执行:

sudo depmod -a

这样即使系统更新,ntfs3 仍然可用。