为了能够挂载使用文件系统格式化的 USB 密钥,ntfs
我创建了以下fragment.cfg
文件:
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y
我已经使用以下命令编译了内核:
bitbake -C compile virtual/kernel
通过对内核配置进行修改,我的发行版能够ntfs
通过以下命令执行 USB 的挂载:
> mount /dev/sda /media/sda
其中/dev/sda
是与 USB 密钥关联的设备,/media/sda
是挂载点。
文件系统已安装但为只读。以下命令显示此信息:
# mount | grep media
/dev/sda on /media/sda type ntfs (ro,relatime,uid=0,gid=0,fmask=0177,dmask=077,nls=iso8859-1,errors=continue,mft_zone_multiplier=1)
在我已经设置的片段文件中CONFIG_NTFS_RW=y
,为什么ntfs
USB 密钥的文件系统是以只读方式安装的?
编辑
如果我执行该命令,dmesg
我会收到以下消息:
> dmesg
...
(device sda): load_system_files(): Volume is dirty. Mounting read-only. Run chkdsk and mount in Windows.
我已遵循上一条消息中写的信息:
- 我已将 USB 插入 Windows 系统
- Windows 系统已对 USB 执行了扫描修复
此后,我在 Linux 系统上正确执行了 USB 的挂载 R/W:
> mount -t ntfs /dev/sda /media/sda
> mount | grep media
/dev/sda on /media/sda type ntfs (rw,relatime,uid=0,gid=0,fmask=0177,dmask=077,nls=iso8859-1,errors=continue,mft_zone_multiplier=1)
此时,如果我尝试在 USB 上写入,我会收到以下错误:
> touch /media/sda/write_ntfs.txt
touch: cannot touch '/media/sda/write_ntfs.txt': Permission denied
如果我尝试更改 USB 上文件的权限,也会发生同样的情况:
> chmod 777 /media/sda/filename.csv
chmod: changing permissions of '/media/sda/filename.csv': Operation not supported
因此,尽管命令输出了mount
,但 USB 的挂载似乎仍然是只读的!
NTFS 驱动程序写入支持的限制
正如@Tom Yan 在一条评论中所写,该
ntfs
驱动程序有一些写入限制(见此链接):@Tom Yan 还建议使用 NTFS3 驱动程序,因为它提供对任何 NTFS 映像(最高 NTFS 版本 3.1)的完全读写访问权限(请参阅此链接)。
问题是我的内核版本是 5.4,而新的 NTFS3 驱动程序是由 Paragon Software 在内核版本 5.15 中向社区推出的(有关详细信息,请参阅此链接)。
解决问题的另一种方法
因为现在我不想改变我的内核版本,我做了很多测试和搜索,并且已经在不使用
ntfs
驱动程序的情况下解决了我的问题。我找到了这个链接,它为我的问题提出了不同的解决方案。删除内核模块
ntfs
我已经从内核配置中删除了内核模块
ntfs
;为此,我已从fragment.cfg
用于内核编译的配置文件中删除了问题中显示的文件。添加菜谱包
ntfs-3g-ntfsprogs
之后我使用了以下食谱:
这个配方定义了包
ntfs-3g ntfsprogs libntfs-3g
。通过变量,IMAGE_INSTALL
我将这些包添加到我的图像中:支持新文件系统
通过对内核配置进行这些更改以及添加以前的软件包,如果我执行命令
cat /proc/filesystems
,在支持的可用文件系统列表中,会出现以下 3 个文件系统:最后,文件系统以读写方式挂载密钥
fuseblk
现在 USB 文件系统的挂载已经(真正)可以读写了:
USB 密钥已安装
fuseblk
文件系统(而不是ntfs
如上文我的问题中所示)。这种类型的安装允许在 USB 密钥上写入:
我不知道这是否只是一种解决方法,或者它是否是我所处环境(内核版本)下的最佳解决方案,但我已决定使用此方法来解决我的问题。