![Linux 内核如何处理 Windows NTFS 文件系统?](https://linux22.com/image/36021/Linux%20%E5%86%85%E6%A0%B8%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%20Windows%20NTFS%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%9F.png)
我正在阅读一篇文章(RW Smith LPIC_1学习指南),内容如下:
Linux 可以可靠地读取 NTFS 并可以覆盖现有文件,但 Linux 内核无法将新文件写入 NTFS 分区。
“内核”无法将新文件写入 NFTS 分区是什么意思?
在另一个地方说:
NTFS-3G 是一个读/写 NTFS 驱动程序,驻留在用户空间而不是内核空间。它被某些 Linux 发行版用作默认的 NTFS 驱动程序。
内核空间与用户空间有何不同?
另外,由于我们可以在双引导系统中访问 Windows 驱动器,为什么我们不能使用诸如 之类的命令查看 Windows 文件系统的类型df -T
?
答案1
在 NTFS-3G 之前没有适当的读/写 NTFS 支持。最初,在双启动系统上,可以在 NTFS 分区上写入文件,但在 Windows NT/XP 下重新启动时,您必须执行文件系统检查以更正光盘上的(元)数据。因此,使用 VFAT 分区用于 Windows NT/XP 和 Linux 之间的数据交换是很常见的,因为该文件系统类型的驱动程序没有此限制/问题。
自从引入 NFTS-3G (2006) 以来,这不再是必要的,您可以编写新文件并更新现有文件,在 Windows 下重新启动并使用这些文件,而无需执行文件系统检查。 (到那时,我基本上不再需要重新启动,而是在虚拟机中使用 Windows)。
NTFS-3G 在用户空间中运行,这意味着它无法直接访问内核数据和例程,但必须像任何普通程序一样通过系统调用(与内核空间(设备)驱动程序相反)。
至于df -T
,它似乎与 Fuse 一起运行,并且(正确地)将文件系统类型标识为fuseblk
。 Fuse 对 NTFS 一无所知,因此它不提供任何更深入的探测。也不df -T
探测光盘,它只是询问文件系统驱动程序,它正在处理什么类型(如果可以,您不必安装文件系统即可使其显示在 中df -T
,在这种情况下,它可以直接探测设备块并做一个猜想)。