liunx mnt命名空间

Mount namespace的作用是隔离mount point,每个mnt namespace内的文件结构可以单独修改,互不影响。

当前进程所在的mnt namespace的所有挂载点信息记录在以下三个文件中

为接下来的操作准备两个目录,每个目录下一个文件

启一个终端

[root@k8s-nginx1 ~]# ll /proc/$$/mount*
-r--r--r-- 1 root root 0 Nov 26 13:45 /proc/4433/mountinfo
-r--r--r-- 1 root root 0 Nov 26 13:45 /proc/4433/mounts
-r-------- 1 root root 0 Nov 26 13:45 /proc/4433/mountstats

创建新的mount namespace和uts namespace并运行bash ###

[root@k8s-nginx1 ~]# unshare --mount --uts bash
### 设置hostname以便于观察 ### [root@k8s
-nginx1 ~]# hostname namespace-01 && exec bash
### 查看对应namespace的inode number ### [root@namespace
-01 ~]# readlink /proc/$$/ns/{uts,mnt} uts:[4026532431] mnt:[4026532430]
### 将上面创建的namespace01目录挂在到/mnt ###
[root@namespace-01 ~]# mount --bind namespace01/ /mnt/

1

### 查看/mnt目录下的文件 ###
[root@namespace-01 ~]# ll /mnt/
total 0
-rw-r--r-- 1 root root 0 Nov 26 13:46 namespace01.txt

另启动一个终端

创建新的mount namespace和uts namespace,执行bash ###

[root@k8s-nginx1 ~]# unshare --mount --uts bash
[root@k8s-nginx1 ~]# hostname namespace-02 && exec bash
[root@namespace-02 ~]# readlink /proc/$$/ns/{uts,mnt}
uts:[4026532433]
mnt:[4026532432]
[root@namespace-02 ~]# ll /mnt/
total 0
drwxr-xr-x. 2 root root 6 Nov  6 13:52 cdrom
[root@namespace-02 ~]# mount --bind namespace02/ /mnt/
[root@namespace-02 ~]# ll /mnt/
total 0
-rw-r--r-- 1 root root 0 Nov 26 13:46 namespace02.txt

当新的mount namespace创建时,会从创建进程所在的namespace复制挂载点信息,所以namespace01和namespace02都可以看到相同的文件视图

[root@namespace-01 ~]# unshare --mount --uts bash
[root@namespace-01 ~]# hostname namespace-03 && exec bash
[root@namespace-03 ~]# readlink /proc/$$/ns/{uts,mnt}
uts:[4026532435]
mnt:[4026532434]
[root@namespace-03 ~]# ll /mnt/
total 0
-rw-r--r-- 1 root root 0 Nov 26 13:46 namespace01.txt
posted @ 2019-11-26 14:15  caonw  阅读(618)  评论(0编辑  收藏  举报