mount 简介
mount用来显示挂载信息或者进行文件系统挂载。mount并非只能挂载文件系统,也可以将目录挂载到另一个目录下,其实它实现的是目录【硬链接】,默认情况下,是无法对目录建立硬链接的,但是通过mount可以完成绑定,绑定后两个目录的inode号是完全相同的,但尽管建立的是目录的【硬链接】,但其实也仅是拿来当软链接用。
mount 常用命令
mount
1 | mount [-t vfstype ] [-o options] device directory |
umount
1 | umount device/directory |
mount bind 命令
mount bind可为当前挂载点绑定一个新的挂载点。
执行如下命令,可创建foo目录的一个镜像目录bar,它们已经绑定在一起:
1 | mkdir foo bar |
mount bind绑定后的两个目录类似于硬链接,无论读写bar还是读写foo,都会反应在另一方,内核在底层所操作的都是同一个物理位置。将bar卸载后,bar目录回归原始空目录状态,期间所执行的修改都保留在foo目录下。
1 | [root@centos3 mount]# echo "hello foo" > foo/hello |
mount bind除了可以绑定两个普通目录,还可以绑定挂载点。
1 | mount --bind /mnt/foo /mnt/bar |
shared subtrees
nux的每个挂载点都具有一个决定该挂载点是否共享子挂载点的属性,称为shared subtrees(注:这是挂载点的属性,就像是否只读一样的属性)。该属性用于决定某挂载点之下新增或移除子挂载点时,是否同步影响bind另一端的挂载点。
hared subtrees有四种属性值,它们的设置方式分别为:
1 | # 挂载前直接设置shared subtrees属性 |
对于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操作关联到其它挂载点
/etc/fstab与/etc/mtab和/proc/mounts区别
/etc/fstab
/etc/fstab是用来存放文件系统的静态信息的文件。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。(/etc/fstab 是只读不写的)
/etc/mtab
/etc/mtab是当前的分区挂载情况,记录的是当前系统已挂载的分区。每次挂载/卸载分区时会更新/etc/mtab文件中的信息(执行mount命令会改变/etc/mtab的信息)。
/proc/mounts
/proc/mounts是mount namespace而引入的,功能跟/etc/mtab一样,都是记录当前分区的挂载情况。因为记录 mount 信息的 /etc/mtab 是全局的,也就是说,即使某个进程有自己的 namespace,但只要还和外面共享同一个 /etc/mtab,那么,里面进行umount/mount操作的信息也会被记录到/etc/mtab里,外面也会看到。
参考文档
- /etc/mtab与/proc/mounts //mtab mounts fstab这三个文件的区别
- man Linux manual page //man mount 命令
- mount bind功能详解 // 骏马金龙老师的文章都很不错的