直到现在我还没有仔细考虑过这个词fuse
,但是后来我发现它确实存在nofuse
。
根据我在互联网上搜索的结果,他们没有清楚地解释两者的区别。fuse
和之间有什么区别nofuse
?
例如,在性能和优势方面,它与此fuse
相比有什么不同?允许您在启动时启动闪存驱动器,而不允许?这就是我感兴趣的。nofuse
nofuse
fuse
答案1
它们是两个不同的驱动程序。其中一个是使用 FUSE 创建的,另一个是内核模块。
FUSE 是一个框架,允许在“用户空间”中编写文件系统驱动程序,即作为独立服务而不是内核模块。这使得开发很多更容易,但代价是性能较低。
基于 FUSE 的文件系统可能比内核文件系统慢一些,因为每个操作都要经过多次上下文切换 - 从程序到内核再到相应的 FUSE 服务(该服务必须从设备读取数据,因此返回内核并再次退出),然后内核再次处理回复并传递给您的进程。与同样作为服务运行的数据库相比,这没什么特别的,但与直接作为内核的一部分运行的文件系统相比,它确实会变慢。
但是,基于 FUSE 的驱动程序(如 exfat-fuse)可以不受当前正在运行的内核影响而安装(该接口专门设计为稳定的),而基于内核的驱动程序(如 ZFS)则必须适应每个新的主要内核版本和该模块必须针对每个小版本单独重新编译(通常在用户的机器上)。
因此,对于尚未成为 Linux 内核一部分的文件系统(无论出于何种原因),使用 FUSE 是一种常见的选择,因为它使驱动程序更容易编写和更易于部署 – 这就是 exfat-fuse 被广泛使用的原因。(由于驱动程序是普通程序,因此 FUSE 还可以轻松构建自定义文件系统,如 sshfs、ftpfs 或 wikipediafs。)
不过,目前,“exfat-nofuse”包已经过时了(嗯,两个都其中有些已经过时了),因为当前的内核版本有一个内置exFAT 驱动程序,因此不再需要任何外部驱动程序。
类似地,“ntfs-3g”NTFS 驱动程序也是基于 FUSE 的,但它很可能在某个时候被新的内核“ntfs3”驱动程序取代。
答案2
从fuse(8)
:
FUSE(用户空间文件系统)是一个简单的接口,供用户空间程序将虚拟文件系统导出到 Linux 内核。FUSE 还旨在为非特权用户提供一种安全的方法来创建和挂载他们自己的文件系统实现。
, 表示它nofuse
纯粹由内核模块处理。
答案3
您的内核有一种与硬件通信的方法。此方法(以及内核本身)在 Ring 0 中运行,这意味着它具有特权。文件系统代码可以包含 rootkit。此外,您必须是 root 才能安装实现文件系统驱动程序的内核模块。您还必须是 root 才能设置挂载点。
FUSE 意味着文件系统驱动程序在用户空间中运行。内核中的模块桥接以普通用户身份执行的代码。这意味着漏洞的足迹更小,而且更普遍。FUSE 驱动程序的新手实现将依赖于与其他所有 FUSE 驱动程序相同的内核桥接。
这里您的发行版为 exfat 提供了两种方法,一种是基于内核的,一种是在 FUSE 中。