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