将挂载源绑定到自身

Mar*_*ark 5 filesystems mount bind-mount

有什么作用mount --bind /dir1 /dir1?我已经阅读了https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt但它没有给出明确的解释。看起来它不仅对目录有效,对文件也有效。

sou*_*edi 5

这与一般情况完全相同mount --bind /dir1 /dir2。关于这种特殊情况,您只需要知道它是明确定义的并且不会无限递归。

(例如,文件可以被自绑定挂载,因为文件可以被绑定挂载)。

出于两个原因,这种特殊情况并没有听起来那么毫无意义。

1.您可以设置绑定挂载选项,例如限制可能的操作

在此调用之后,可以在两个地方访问相同的内容。还可以重新挂载单个文件(在单个文件上)。也可以使用绑定挂载从常规目录创建挂载点,例如:

      mount --bind foo foo
Run Code Online (Sandbox Code Playgroud)

绑定挂载调用仅附加(部分)单个文件系统,而不是可能的子挂载。包括子挂载在内的整个文件层次结构通过使用以下命令附加到第二位:

      mount --rbind olddir newdir
Run Code Online (Sandbox Code Playgroud)

请注意,文件系统挂载选项将与原始挂载点上的相同。

mount(8) 从 v2.27 开始允许通过传递相关选项和 --bind 来更改挂载选项。例如:

      mount -o bind,ro foo foo
Run Code Online (Sandbox Code Playgroud)

Linux 内核不支持此功能;它通过附加的 mount(2) 重新挂载系统调用在用户空间中实现。这个解决方案不是原子的。

创建只读绑定挂载的另一种(经典)方法是使用重新挂载操作,例如:

      mount --bind olddir newdir
      mount -o remount,bind,ro olddir newdir
Run Code Online (Sandbox Code Playgroud)

请注意,只读绑定将创建只读挂载点(VFS 条目),但原始文件系统超级块仍将是可写的,这意味着 olddir 将是可写的,但 newdir 将是只读的。

也可以通过“重新挂载,绑定”操作更改 nosuid、nodev、noexec、noatime、nodiratime 和 relatime VFS 条目标志。不可能递归地更改挂载选项(例如使用 -o rbind,ro)。

安装选项的另一个用途是设置“传播标志”。这些是具体的sharedsubtree.txt解释。他们肯定会令人困惑。它们也在man mount.

我只有一个提示:该文档声称需要共享子树才能将可移动设备的安装传播到“从”安装命名空间。然而,更重要的动机是在“从”挂载命名空间中启动沙盒进程后,能够卸载可移动设备。

2. 它创建了一个文件不能移动或链接的边界

显然,这是需要的,部分是为了避免绕过上面强加的限制,部分是因为硬链接对于安全性来说真的很可怕,对它们进行一些限制可能会很有用