mount namespace稍微简单点,因为PID namesapce需要用到所以就先简单介绍一下。
mount namespace是用来隔离文件系统的挂载点,这样进程就只能看到自己的文件系统挂载点。新mount namespace中的挂载点是从调用者所在的mount namespace中拷贝的,但是新mount namespace创建后和原mount namespace就没啥关系了(除了shared subtree的情况),下面通过iso文件的挂载来演示。
1.创建所需的路径
1 | $ sudo mkdir /demo |
再准备两个目录当挂载点:
1 | $ sudo mkdir /mnt/iso1 /mnt/iso2 |
2.在当前shell执行挂载操作:
1 | $ sudo mount 1.iso /mnt/iso1 |
3.打开一个新shell,新shell和旧shell在同一个mount namesapce中,在新shell中执行unshare命令,新建mount namespace:
1 | $ sudo unshare -m |
在两个shell中分别执行readlink命令查看当前进程所在的mount namespace:
1 | $ readlink /proc/$$/ns/mnt |
可以看到两个shell的mount namespace是不同的。此时查看两个shell的挂载点信息是相同的:
1 | $ mount | grep 1.iso |
4.在新shell中执行一些mount和umount操作:
1 | # mount 2.iso /mnt/iso2 |
再查看两个shell中的挂载点信息就不一样了:
1 | $ mount | grep iso |
这里就先介绍命令使用的方法,代码实现比较简单,和PID namespace合在一起了。