我使用mount -o bind在chroots中装载目录,这确实很好。问题是我希望其中一些绑定安装的目录只能在chroot中读取。
可能吗?如果不是-是否有其他实现方法?
我曾考虑过将NFS用于本地主机挂载,但是这看起来有些过分。
我使用mount -o bind在chroots中装载目录,这确实很好。问题是我希望其中一些绑定安装的目录只能在chroot中读取。
可能吗?如果不是-是否有其他实现方法?
我曾考虑过将NFS用于本地主机挂载,但是这看起来有些过分。
Answers:
在Squeeze中,它仅适用于:
mount --bind /src /dst
然后
mount -o remount,ro /dst
现在在Debian Wheezy中,您必须执行以下操作:
mount -o remount,ro,bind /dst
摆脱:资源繁忙消息。
编辑:现在在Debian Jessie中,mount尝试变得聪明并装载sub dirs,如果已经用bind装载了,则会递归,并发生不好的事情:)
有一个特殊的选项可以迫使util-linux再次变得“愚蠢”。解决方案是这样的:
mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/
之后,您可以将--bind $ prefix / sbin挂载到另一个目录。
从手册页:
共享子树操作。从Linux 2.6.15开始,可以将安装及其子安装标记为共享,专用,从属或不可绑定。共享的安装提供了创建该安装的镜像的功能,以便任何一个镜像中的安装和卸载都传播到另一个镜像。从安装架从其主接收传播,反之亦然。专用安装架没有传播功能。不可绑定的安装是无法通过绑定操作克隆的专用安装。详细的语义记录在内核源代码树的Documentation / filesystems / sharedsubtree.txt文件中。支持的操作有:
mount --make-shared mountpoint mount --make-slave mountpoint mount --make-private mountpoint mount --make-unbindable mountpoint
以下命令允许递归地更改给定安装点下所有安装的类型。
mount --make-rshared mountpoint mount --make-rslave mountpoint mount --make-rprivate mountpoint mount --make-runbindable mountpoint
请求--make- *操作时,mount(8)不会读取fstab(5)。必须在命令行上指定所有必需的信息。请注意,Linux内核不允许通过单个mount(2)syscall更改多个传播标志,并且这些标志不能与其他安装选项混合使用。
从util-linux 2.23开始,mount命令允许一起使用多个传播标志,也可以与其他安装操作一起使用。此功能是实验性的。当前面的安装操作成功完成时,传播标志将通过附加的mount(2)系统调用来应用。请注意,该用例不是原子的。可以在fstab(5)中将传播标志指定为安装选项(专用,从属,共享,不可绑定,rprivate,rslave,rshared,runbindable)。
挂载--bind / vital_data / untrusted_container / vital_data
挂载-o remount,ro,bind / untrusted_container / vital_data
在第二次安装中,您必须使用“ remount,ro,bind”,否则/ vital_data的所有其他实例也将变为只读。
man 2 mount
表明它bind
是必需的:“自Linux 2.6.26起,该MS_REMOUNT
标志可用于MS_BIND
仅修改每个安装点标志。这对于设置或清除“读取”特别有用。 “在挂载点上使用-only”标志,而不更改基础文件系统。MS_REMOUNT | MS_BIND | MS_RDONLY
将mountflags指定为:将使通过此挂载点的访问为只读,而不会影响其他挂载点。” (来自Ubuntu 19.10,Linux man-pages
版本5.0.2,日期为2019-08-02。)
libmount
的mount()
函数将调用两次/usr/bin/mount
。因此libmount
,将确定是否/usr/bin/mount
需要两次调用,而不是内核版本。
bind
选件的必要性?