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就没用了,目前不知道是什么原理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值