当然,系统会阻止在一个目录上安装两个东西。
但是,如果在顶层目录中挂载一个 FUSE 程序,在子目录中挂载另一个 FUSE 程序,会怎样呢?
当你调用子目录的操作时到底会发生什么?
我的假设是,它最初会经历与从顶部 FUSE 挂载相关的操作,然后转到您在子 FUSE 中调用的实际操作。
那是对的吗?
编辑:事实证明我错误地无法在一个目录中安装两个东西。那么当两个不同的FUSE程序挂载在同一个目录下时,哪个FUSE程序优先呢?
答案1
当然,系统会阻止在一个目录上安装两个东西。
不需要。您可以根据需要多次挂载同一目录:
mkdir /tmp/foo /tmp/bar /tmp/baz
mount --bind /tmp/foo /tmp/baz
mount --bind /tmp/bar /tmp/baz # <-- no error
但是,如果在顶层目录中挂载一个 FUSE 程序,在子目录中挂载另一个 FUSE 程序,会怎样呢?
如果安装座不受 FUSE 程序控制,也会发生同样的情况。位于新挂载“下方”的顶部目录树部分不再可访问(除非通过先前打开的文件句柄)。
我的假设是,它最初会经历与从顶部 FUSE 挂载相关的操作,然后转到您在子 FUSE 中调用的实际操作。
有点,是的。 Linux 内核有一个“dentry”缓存,因此如果目录已经在内核缓存中,“顶级”FUSE 程序不一定会从安装操作或子 FUSE 中发生的操作中获取任何事件。
答案2
任何文件系统都可以安装在任何位置。对该挂载点内的文件的所有访问只能被该位置挂载的文件系统看到,而不能被任何周围的文件系统看到。这与您所做的任何其他安装没有什么不同,它(必然)位于根文件系统内。
据外部文件系统所知,该挂载点只是一个目录。从它的角度来看,它不知道如何处理不在该目录内的文件的请求,因此您的假设不正确。 FUSE 在这方面与其他文件系统没有区别。
首先从根到达挂载点将要需要遍历外部文件系统。这是访问这些内容的唯一点,并且他们不知道路径的其余部分是什么。