【问题标题】:libmount equivalent for FUSE filesystemsFUSE 文件系统的 libmount 等效项
【发布时间】:2017-09-19 16:31:52
【问题描述】:
挂载 FUSE 文件系统的 libmount 等效函数是什么。我知道 FUSE 不是真正的文件系统,我的 mount.fuse 显示打开 /dev/fuse 文件并进行一些复杂的操作。
我尝试通过阅读 it's source code 来了解 mount.fuse 的工作原理,但它不仅因为 C 中的字符串操作而变得不必要地复杂,它还是一个 GPL 程序。
我的问题是,我是否缺少挂载 fuse 文件系统的明显 API?
【问题讨论】:
标签:
linux
filesystems
mount
fuse
【解决方案1】:
用于挂载 FUSE 文件系统的内核接口在“linux/Documentation/filesystems/fuse.txt”中描述(例如,参见here)。
简而言之,您调用mount(2) 就像挂载任何文件系统一样。但是,关键区别在于您必须提供一个挂载选项fd=n,其中n 是您通过打开/dev/fuse 获得的文件描述符,实现文件系统的用户空间进程将使用它来响应内核请求.
具体来说,这意味着挂载实际上是由实现文件系统的用户空间程序执行的。具体来说,大多数 FUSE 文件系统使用libfuse 并调用函数fuse_main 或@987654328 @ 执行挂载(最终在包含实际 mount(2) 系统调用的 mount.c 中调用内部函数 fuse_mount_sys)。
因此,如果您想以编程方式挂载 FUSE 文件系统,正确的做法是派生并执行相应的 FUSE 可执行文件(例如 sshfs)并让它代表您处理挂载。
请注意,/sbin/mount.fuse 本身实际上并没有挂载任何东西。它只是一个包装器,允许您通过“/etc/fstab”中的条目通过mount 命令行实用程序或在启动时挂载FUSE 文件系统。这就是为什么你在那里找不到任何安装代码的原因。它以我上面描述的相同方式挂载 FUSE 文件系统,通过运行相关文件系统的 FUSE 可执行文件来执行实际挂载。