有什么mount --bind /dir1 /dir1
作用?我读了https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt但它没有给出明确的解释。看起来它不仅对目录有效,而且对文件也有效。
答案1
这与一般情况完全相同mount --bind /dir1 /dir2
。关于特殊情况,您需要了解的只是它是明确定义的并且不会无限递归。
(例如,文件可以自绑定安装,因为文件可以绑定安装)。
这种特殊情况并不像乍听起来那样毫无意义,原因有二。
1.您可以设置绑定挂载选项,例如限制可能的操作
在此调用之后,可以在两个地方访问相同的内容。还可以重新挂载单个文件(在单个文件上)。还可以使用绑定挂载从常规目录创建挂载点,例如:
mount --bind foo foo
绑定挂载调用仅附加单个文件系统(的一部分),而不是可能的子挂载。包括子安装在内的整个文件层次结构通过使用以下命令附加到第二位置:
mount --rbind olddir newdir
请注意,文件系统挂载选项将与原始挂载点上的选项保持相同。
自 v2.27 起,mount(8) 允许通过将相关选项与 --bind 一起传递来更改挂载选项。例如:
mount -o bind,ro foo foo
Linux 内核不支持此功能;它是通过附加的 mount(2) 重新安装系统调用在用户空间中实现的。这个解决方案不是原子的。
创建只读绑定挂载的替代(经典)方法是使用重新挂载操作,例如:
mount --bind olddir newdir mount -o remount,bind,ro olddir newdir
请注意,只读绑定将创建只读挂载点(VFS 条目),但原始文件系统超级块仍然可写,这意味着 olddir 将是可写的,但 newdir 将是只读的。
还可以通过“remount,bind”操作更改 nosuid、nodev、noexec、noatime、nodiratime 和 relatime VFS 条目标志。不可能递归地更改安装选项(例如使用 -o rbind,ro)。
挂载选项的另一个用途是设置“传播标志”。具体解释的就是这些sharedsubtree.txt
。它们肯定会令人困惑。它们也在 中概述man mount
。
我只有一个提示可以提供:该文档声称需要共享子树才能将可移动设备的安装传播到“从属”安装命名空间中。然而,更重要的动机是能够卸载在“从属”安装命名空间中启动沙盒进程后,您的可移动设备。
2. 它创建了一个文件无法移动或链接的边界
显然这是部分期望的为了避免绕过上面施加的限制,部分原因是硬链接对于安全性来说确实很糟糕,对它们进行一些限制可能会很有用。