请教mount命令中--make-shared、--make-slave、--make-private及--make-unbindable标志的功能与差异
嗨,我来给你把这几个mount标志用大白话讲清楚~这些参数都是用来调整挂载点的「共享属性」的,简单说就是这个挂载点的挂载/卸载操作,会不会影响其他关联的挂载点(比如用--bind复制出来的挂载副本)。下面逐个拆解:
--make-shared:双向同步的「共享挂载」
把目标挂载点设为共享模式后,它和所有关联的挂载点(比如绑定挂载的副本)是双向联动的。举个例子:- 先把
/mnt/data设为共享:mount --make-shared /mnt/data - 然后绑定一个副本:
mount --bind /mnt/data /mnt/backup - 这时你在
/mnt/data上挂载一个U盘,/mnt/backup里也会立刻出现U盘内容;反过来在/mnt/backup卸载U盘,/mnt/data里的U盘也会消失。
就像多人协作的共享文档,所有人的修改都会同步给彼此。
- 先把
--make-slave:单向跟随的「从属挂载」
这个是单向同步的模式,从属挂载点只会跟着“主挂载点”的变化走,但自己的操作不会影响主挂载点。比如:- 先把
/mnt/main设为共享,再把/mnt/sub绑定为它的从属:mount --make-slave /mnt/sub - 当
/mnt/main上新挂载了东西,/mnt/sub会同步显示;但你在/mnt/sub上挂载/卸载内容,/mnt/main完全不受影响。
相当于你跟着老板的文档改,但你自己在副本上涂涂画画,老板那边根本看不到。
- 先把
--make-private:完全独立的「私有挂载」
私有挂载点是完全孤立的,它的任何挂载/卸载操作都不会传递给其他挂载点,其他关联挂载点的变化也传不到这里来。比如:
你绑定了/mnt/a到/mnt/b后,把/mnt/b设为私有:mount --make-private /mnt/b
之后两边的挂载操作完全互不干涉,/mnt/a上新挂载的内容不会出现在/mnt/b,/mnt/b的操作也和/mnt/a没关系。
就像你自己的私人笔记本,别人看不到也改不了,你也不会受别人的笔记影响。--make-unbindable:禁止绑定的「终极私有挂载」
这个模式是--make-private的加强版:它不仅拥有私有挂载的独立属性,还禁止被其他挂载点绑定复制。也就是说,你没法用mount --bind来复制这个挂载点了。
比如系统里的/proc或者某些关键分区可能会被设为unbindable,防止被意外绑定后篡改,相当于把你的私人笔记加了锁,连复制都不让别人做。
核心差异总结
从同步方向和权限来看:
- shared:双向同步,允许绑定
- slave:单向同步(主→从),允许绑定
- private:无同步,允许绑定
- unbindable:无同步,禁止绑定
备注:内容来源于stack exchange,提问作者Noah5CE

