绑定装载 – 在CentOS 6和CentOS 7上有不同的结果

我在chroot环境中安装了几个目录(bind mount),但它们在CentOS 6和7上的表现不同 – 完全相同的命令.

例:

我的chroot env / chroot / base.

然后我将它挂载到每个用户

mount –bind / chroot / base / chroot / $user

然后我在同一用户的chroot中挂载/ home / $user:

mount –bind / home / $user / chroot / $user / home / $user

在CentOS 6上它工作正常,它正好安装那些目录,但在CentOS 7上我得到这样的东西:

/dev/mapper/cl_cp-home /chroot/user1/home/user1 xfs rw,relatime,attr2,inode64,usrquota 0 0
/dev/mapper/cl_cp-home /chroot/user2/home/user1 xfs rw,usrquota 0 0
/dev/mapper/cl_cp-home /chroot/user3/home/user1 xfs rw,usrquota 0 0
/dev/mapper/cl_cp-home /chroot/user2/home/user2 xfs rw,usrquota 0 0
/dev/mapper/cl_cp-home /chroot/user3/home/user2 xfs rw,usrquota 0 0
/dev/mapper/cl_cp-home /chroot/user1/home/user2 xfs rw,usrquota 0 0
/dev/mapper/cl_cp-home /chroot/user3/home/user3 xfs rw,usrquota 0 0

每个用户的homedir都安装在其他用户的chroot环境中.

为什么会这样? CentOS6 / 7之间可能导致这种情况发生了什么变化?

编辑:

例如,在user1的文件夹上运行ls(123user1是一个简单的touch / home / user1 / 123user1文件):

root@server:~# ls /chroot/user1/home/user1/
123user1
root@server:~# ls /chroot/user2/home/user1/
123user1
root@server:~# ls /chroot/user3/home/user1/
123user1

更奇怪的是:

root@server:~# ls /chroot/base/home/user1/
123user1

我没有在任何阶段安装这个

行为的来源似乎是共享子树操作的更改认值.内核文档Documentation / sharedsubtree.txt提到private是认值,而实际上它是共享的,可以通过在使用–bind挂载目录后查看/ proc / self / mountinfo来获取.
root@localhost ~]# mount --bind /chroot/base /chroot/test
[root@localhost ~]# grep test /proc/self/mountinfo
234 62 253:1 /chroot/base /chroot/test rw,relatime shared:1 - xfs /dev/vda1 rw,noquota

这会导致/ chroot / test下的挂载传播回/ chroot / base,然后影响从/ chroot / base派生的其他绑定挂载.

要恢复旧的行为,必须在/ etc / fstab中明确指定–make-private作为挂载选项.

[root@localhost ~]# umount /chroot/test
[root@localhost ~]# mount --bind --make-private /chroot/base /chroot/test
[root@localhost ~]# grep test /proc/self/mountinfo
234 62 253:1 /chroot/base /chroot/test rw,relatime - xfs /dev/vda1 rw,noquota

我认为将私有选项应用于您想要旧行为的任何绑定装载都是保存的.

更新

内核认仍然是私有的,但systemd将文件系统重新分配为共享,因为更好的容器支持.从systemd github site

Mark the root directory as shared in regards to mount propagation. The kernel defaults to “private”,but we think it makes more sense to have a default of “shared” so that nspawn and the container tools work out of the Box. If specific setups need other settings they can reset the propagation mode to private if needed. Note that we set this only when we are invoked directly by the kernel. If we are invoked by a container manager we assume the container manager kNows what it is doing (for example,because it set up some directories with different propagation modes).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Centos下搭建性能监控Spotlight
CentOS 6.3下Strongswan搭建IPSec VPN
在CentOS6.5上安装Skype与QQ
阿里云基于centos6.5主机VPN配置
CentOS 6.3下配置multipah
CentOS安装、配置APR和tomcat-native
centos6.5下postgres-XC集群安装与配置
CentOS 6使用openssl搭建根CA
CentOS6.6中安装VNC server
CentOS下更新Python最新版本
Centos安装pycurl
CentOS 7 安装PostGIS
CentOS 7.1PXE网络自动化安装
CentOS下ffmpeg与第三方编码编译安装
CentOS 6.4安装配置squid
CentOS6.5 安装配置drbd
CentOS6.4 安装jenkins
centos安装增强工具
CentOS6.4安装配置redis
CentOS 6上部署OpenVPN Server