[LINUX]mount与umount

关于mount和unmount:

①mount:mount的过程涉及到3个部分的内容,一个是原来的那个目录的索引节点,对于他来说,mount和不mount唯一的区别就是是否设置了一个“安装点”的标志,由于一个目录只能够mount一个设备,所以这个标志位只有一个。在mount的时候置上,umount的时候,解除就可以了。

②安装表:安装表中记录的是一张map,里面有原来的被安装的目录的索引节点,安装的文件系统的根索引节点,以及安装的文件系统的超级块在内存中的缓存的指针等,就是一张全局的映射表,记录了linux当前有哪些目录下,分别挂载了哪些虚拟出来的设备节点,相当于和前面的被安装目录的索引节点对应起来了,如果我知道了安装目录的索引节点,通过查找这张表,就能找到对应的设备文件系统的根索引节点,对于这张表处理逻辑也比较清晰,在mount的时候,往这张表中加入一条记录,在umount的时候(一般都是清理完毕之后),清除这条记录就行了,实际上这张表的主要作用是供iname函数进行从文件路径到对应的文件索引节点的转换操作,当mount了设备文件系统之后,所有的对于原来的目录相关的造作,不管是访问目录下的文件,还是在目录下尝试创建新的目录,都会通过这张安装表,映射到新挂载的设备文件系统上,换言之,当一个目录索引节点被打上安装点的标记之后,他不会再做任何的更改操作了,所有的对于该安装点的操作,都会映射到对应的挂载的文件系统上去。与此同时,该目录虽然处于“不使用”的状态,但是,该索引节点也不应该被删除,如果被删除,就找不到这个安装节点了,变成了一个悬空的挂载,而实现这个条件的简单的办法,就是将这个原来目录的索引节点的引用计数置为1,直到umount的时候,才置为0。这样,所有试图删除该目录的操作,都会被延后执行,并且该索引节点也将一直存在于内存中,不会被释放,中间访问起来也更加的高效。

③根索引节点与超级块,如果通过映射表已经映射到了新的设备文件的根索引节点,后面的读写操作都是和普通的文件读写逻辑类似的了,仅仅只是在iname的时候,通过映射表,做了一次路由操作,需要注意的是,一个虚拟出来的设备文件的根索引节点只可能有一个,理论上一个设备文件的根索引节点可以被多次的挂载,但是这样会引发一个问题,就是在映射表中可能会存在多条记录,这样会对../../../这种反向目录路由的操作带来麻烦,因为内核操作的都是索引节点,如果一个设备文件的根索引节点,对应了多个源节点,内核就不知道到底选择哪一个了,所以linux只能够一对一的mount,如果其他地方要mount同一个设备文件,那么可以用mount --bind的方式,即软mount,类似于建立了一个快捷方式。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值