栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

mount在namespace中应用的四种不同特性

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mount在namespace中应用的四种不同特性

实验环境

内核版本:3.10.0-957.27.2.el7.x86_64

系统版本:CentOS Linux release 7.6.1810 (Core)

创建新的mnt namespace的命令:unshare -m --propagation unchanged sh

实验内容

--make-shared

    --make-shared:共享挂载,不同namespace的进程对同一个目录进行挂载、卸载等操作时,会相互影响。比如说在主机上新建一个目录/home/mnt_test,这时把一个磁盘分区挂载在这个目录下,然后使用unshare命令进入一个新的namespace,挂载一个新的磁盘分区到这个目录,会发现在主机上这个目录下的内容已经变了。 验证如下:

    1. 在主机上把/dev/sda3 共享挂载到/home/mnt_test下面

    2. 进入新的namespace,并把/dev/sdb1共享挂载到/home/mnt_test下面

    观察两个图片,可以发现在新的namespace挂载新的分区之后,原主机上的/home/mnt_test内容也相应的发生变化,所以说明共享挂载是能够相互影响的。

--make-private

    --make-private:私有挂载,不同namespace的进程对同一个目录进行挂载、卸载等操作时,不会相互影响。和共享挂载不同,不同的namespace对同一个挂载目录进行操作,相互之间没有影响。验证如下:

    1. 在主机上把/dev/sda3 私有挂载到/home/mnt_test下面

    2. 进入新的namespace,并把/dev/sdb1私有挂载到/home/mnt_test下面。然后观察两个不同namespace的/home/mnt_test目录的区别。

    可以看到,当两个namespace都是私有挂载时,在新的namespace下把不同的磁盘分区挂到相同的目录下,并不会影响原主机的挂载内容。

--make-slave

    --make-slave:从属挂载,在新的namespace中把某个目录的挂载改成从属挂载之后,在新的namespace中对这个目录进行挂载,不会对老的namespace造成影响。 但在老的namespace中对这个目录进行操作,新的namespace中会对这些操作进行同步。 也就是主、从挂载,主能够影响从,但从不会影响主。

    试验从属挂载需要有三个目录:

        /home/mnt_test :主机上把/dev/sda3挂载到这个目录上

        /home/mnt_test/test1 :新的namespace中,把/dev/sdb2挂载到上面

        /home/mnt_test/test2 :主机上把/dev/sdb2挂载到上面

    1. 在主机上共享挂载/home/mnt_test

    2. 进入新的namespace,把这个挂载目录改成slave模式

    3. 在新的namespace中,把/dev/sdb2挂载到/home/mnt_test/test1

  

  此时在新的namespace中可以看到test1中有内容,但原有主机中的test1并没有内容,说明从模式下的操作对主挂载点没有影响。

    4. 在主机上,把/dev/sdb2挂载到/home/mnt_test/test2

  

  可以看到,在主的挂载点上挂载新的目录后,在新的namespace,即从节点上也能看到这个挂载点,说明主能对从产生影响。而且在sh-4.2中,把/home/mnt_test/test2卸载后,对原主机的挂载也没有影响。

--make-unbindable

    --make-unbindable:不可绑定挂载,把某个挂载目录改成这个选项,那么当另一个目录用--rbind绑定挂载这个目录的父目录时,这个目录不会被挂载,在新的目录下看不到这个目录的内容。

    例如:在主机上的/home/mnt_test目录,挂载/dev/sda3

         在新的namespace中,/home/mnt_test/mntx目录,不可绑定挂载/dev/sdb1

         在新的namespace中,/home/mnt_test/mnty目录,--rbind绑定挂载/home/mnt_test

         最后的结果是在/home/mnt_test/mnty目录下,/home/mnt_test/mnty/mntx目录没有内容,而且没有挂载。实操如下:

    1. 在主机上进行挂载操作:mount /dev/sda3 /home/mnt_test,挂载完成之后使用mount命令检查

    2. 进入新的namespace:unshare -m --propagation unchanged sh

    3. 在新的namespace中先把/dev/sdb1挂载到/home/mnt_test/mntx目录:mount /dev/sdb1 /home/mnt_test/mntx,然后mount检查

    4. 在新的namespace中把/home/mnt_test目录递归绑定挂载到/home/mnt_test/mnty目录:mount --rbind /home/mnt_test/ /home/mnt_test/mnty,然后mount检查

 

此时会发现/home/mnt_test/mnty/mntx目录竟然也成了一个挂载点,进入/home/mnt_test/mnty/mntx,进入发现里面有内容:

    5. 把第3、4步的挂载点卸载之后,重新使用不可绑定挂载把/dev/sdb1挂载到/home/mnt_test/mntx目录:mount --make-unbindable /dev/sdb1 /home/mnt_test/mntx,然后mount检查:

 

    6. 重复第4步,mount检查:

  发现此时已经没有/home/mnt_test/mnty/mntx目录这个挂载点了,进入/home/mnt_test/mnty/mntx,发现里面没有内容:

以上,是我实验出的不可绑定挂载的特性。注意:实验中,只有在同一个namespace中才能生效,跨namespace就没用了,目前不知道是什么原理。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号