linux共享挂载和从属挂载

出處:http://www.cloudchou.com/%E4%B8%AA%E4%BA%BA%E6%80%BB%E7%BB%93/post-687.html

本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接

  • 1)共享挂载

    某个目录已经是挂载点了,可以通过下述命令将该目录变成共享的挂载目录:
    1
    
    mount --make-shared /mnt
    再通过bind选项将挂载点绑定到另一个目录,
    1
    
    mount --bind /mnt /tmp
    这样在mnt下的任何文件变化都会反应到tmp目录下,tmp目录下的任何变化也会反映到mnt目录
    1
    2
    3
    4
    
    #ls /mnt
    a b c
    #ls /tmp
    a b c
    甚至在mnt目录的某个子目录挂载新的文件系统,也会反应在tmp子目录下,在tmp某个子目录下挂载新的文件系统也会反应到mnt目录
    1
    2
    3
    4
    5
    
    #mount /dev/sd0  /tmp/a
    #ls /tmp/a
    t1 t2 t3
    #ls /mnt/a
    t1 t2 t3
  • 2)从属挂载

    从属挂载和共享挂载是类似的,只是mount和umount事件知会从主挂载传递到从属挂载,从属挂载的mount事件并不会通知到主挂载。
    另外注意从属挂载是基于共享挂载的,从属挂载的主挂载肯定是一个共享挂载。Android就是利用了从属挂载这个特性,隐藏某些挂载来为不同用户挂载不同的挂载点。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    # mount --make-shared /mnt
    # mount --bind /mnt /tmp
    # mount --make-slave /tmp
    # mount /dev/sd0 /mnt/a
    # ls /mnt/a
      t1 t2 t3
    # mount /dev/sd1 /tmp/b
    #ls /tmp/b
       s1 s2 s3   
    #ls /mnt/b
    由上可知挂载点/mnt的mount事件通知到了挂载点/tmp,但是挂载点/tmp的挂载事件并未通知到/mnt
  • 3)私有挂载

    这是我们平常熟悉的挂载方式,是默认类型
  • 4)不能绑定的挂载是不可绑定的私有挂载

    假设我们一个挂载/mnt,我们将它设置为不可绑定
    1
    
    # mount --make-unbindable /mnt
    我们此时如果再去将它绑定给另一个目录
    1
    
    #mount --bind /mnt /tmp
    此时便会出错,提示:
    1
    
    mount: wrong fs type, bad option, bad superblock on /mnt,or too many mounted file systems

 

未經允許不得轉載:GoMCU » linux共享挂载和从属挂载