# 挂载前直接设置shared subtrees属性 mount --make-private --bind <olddir> <newdir> mount --make-shared --bind <olddir> <newdir> mount --make-slave --bind <olddir> <newdir> mount --make-unbindable --bind <olddir> <newdir>
# 或者挂载后设置挂载点属性 mount --bind <olddir> <newdir> mount --make-private <newdir> mount --make-shared <newdir> mount --make-slave <newdir> mount --make-unbindable <newdir>
对于shared subtrees这几种属性值,以mount --bind foo bar为例:
private属性:表示在foo或bar下新增、移除子挂载点,不会体现在另一方,即foo <-x-> bar
shared属性:表示在foo或bar下新增、移除子挂载点,都会体现在另一方,即foo <--> bar
slave属性:类似shared,但只是单向的,foo下新增或移除子挂载点会体现在bar中,但bar中新增或移除子挂载点不会影响foo,即,即foo --> bar, bar -x-> foo
unbindable属性:表示挂载点bar目录将无法执行bind操作关联到其它挂载点
shared类型
例如,foo bind到bar时,将挂载点bar设置为shared:
1 2 3
sudo mount --bind foo bar sudo mount --make-shared bar # 或者一条命令:mount --make-shared --bind foo bar
/dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY
如果执行:
1 2
# --rbind类似于bind,但会递归bind当前挂载点上已有的子挂载点 mount --rbind / /home/cecilia/
将得到如下挂载信息:
1 2 3 4 5 6
/dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY /dev/sda1 on /home/cecilia /dev/sdb6 on /home/cecilia/mntX /dev/sdb7 on /home/cecilia/mntY
如果再执行:
1
mount --rbind / /home/henry
将得到如下挂载信息:
1 2 3 4 5 6 7 8 9 10 11 12
/dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY /dev/sda1 on /home/cecilia /dev/sdb6 on /home/cecilia/mntX /dev/sdb7 on /home/cecilia/mntY /dev/sda1 on /home/henry /dev/sdb6 on /home/henry/mntX /dev/sdb7 on /home/henry/mntY /dev/sda1 on /home/henry/home/cecilia /dev/sdb6 on /home/henry/home/cecilia/mntX /dev/sdb7 on /home/henry/home/cecilia/mntY
使用--unbindable属性,可避免该问题:
1
$ sudo mount --make-unbindable --bind foo bar
现在foo和bar绑定了,bar作为挂载点,它将不能再bind到其他路径:
1 2
$ sudo mount --bind bar baz mount: /home/longshuai/fs/baz: wrong fs type, bad option, bad superblock on /home/longshuai/fs/bar, missing codepage or helper program, or other error.
如果是--rbind,假如当前有如下挂载点信息:
1 2 3
/dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY
执行如下操作:
1
mount --rbind --make-unbindable / /home/cecilia
将得到如下挂载点信息:
1 2 3 4 5 6
/dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY /dev/sda1 on /home/cecilia /dev/sdb6 on /home/cecilia/mntX /dev/sdb7 on /home/cecilia/mntY
再执行如下操作:
1
mount --rbind --make-unbindable / /home/henry
最终得到如下挂载点信息:
1 2 3 4 5 6 7 8 9
/dev/sda1 on / /dev/sdb6 on /mntX /dev/sdb7 on /mntY /dev/sda1 on /home/cecilia /dev/sdb6 on /home/cecilia/mntX /dev/sdb7 on /home/cecilia/mntY /dev/sda1 on /home/henry /dev/sdb6 on /home/henry/mntX /dev/sdb7 on /home/henry/mntY