Chinaunix

标题: 绑定挂接 mount --bind [打印本页]

作者: lyhabc    时间: 2016-03-03 21:02
标题: 绑定挂接 mount --bind
绑定挂接 mount --bind


什么是绑定挂接呢?我无法用一句话清晰明了地概括出来,不过我可以用一个它的行为来描述一下。
就是可以通过mount命令的一个参数,将一个已经挂接的文件系统全部或部分挂接到另外一个挂接点上。这里有一个特性(注意,开始挖坑了),
任何挂接在绑定挂接文件系统内部的挂接点的文件系统都不会随之挂接。是不是很绕口(显然“坑”很深)?

那么我举一个例子说明一下。
我自己的目录是/home/jagen,使用命令“ mount --bind / /home/jagen ”将系统根目录绑定挂接到了我自己的目录。
现在访问我自己的目录跟访问根目录没有任何区别。
注意,我自己的目录的访问权限已经跟根目录是相同的了,千万不要自作多情的拿权限开涮,这是没有任何意义的。
一般对于根目录的划分是/boot采用一个分区,/usr采用一个分区,/home采用一个分区,/var采用一个分区,其他的采用一个分区。
如果是这么分配的磁盘分区,那么在进行绑定挂接后,我的目录中/home/jagen/usr这个目录就是空的,其他类推(因为任何挂接在绑定挂接文件系统内部的挂接点的文件系统都不会随之挂接)。
只有分配给“/”根的这个分区内容被真正挂接到了我的目录(这回应该能从“坑”里爬出来了吧?)。
绑定挂接tmpfs的实例是这样操作的,见下面命令:

#mkdir /dev/shm/tmp
# chmod 1777 /dev/shm/tmp
# mount --bind   /dev/shm/tmp   /tmp

注意要修改权限使得所有用户都能访问(chmod 1777),因为这是业界针对/tmp目录的强制规范。
最后使用绑定挂接,将/dev/shm/tmp这个tmpfs绑定挂接到/tmp上,这样所有使用/tmp目录作为临时目录的程序都会受益于tmpfs所提供的超高性能。

另外,这样操作有一个好处就是,/dev/shm是由发行版本厂商所提供的标准tmpfs,它的最大容量限制一般可以被认为是最为优秀的,直接拿来用总比自己动手分析要容易得多。
再针对绑定挂接多说几句。绑定挂接对于程序员来说,是非常实用的一个小帮手。我们假设这样一个场景。在一些特定开发场景,
为了测试一些新功能,必须修改某个系统文件。但是这个系统文件又是放在只读文件系统上(只读只是相对的,只是修改这个文件非常麻烦罢了),
或者这个文件虽然可写,但是对自己没什么把握,不敢直接修改。那么就可以利用mount --bind绑定挂接一个新的文件系统,你所有的修改都只是操作这个新的文件系统,

老的是不会被改动的。当操作完毕,umount一下,就完全恢复了。
即便弄出问题,重新启动一下,就没有任何问题了。


注意:绑定挂接和软链接的区别

软链接的目标不能是已存在的
#mkdir /dev/shm/tmp
# chmod 1777 /dev/shm/tmp
#ln -s    /tmp  /dev/shm/tmp   
这时候会报错,因为已经存在/dev/shm/tmp 目录







欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2