mount: 未知的文件系统类型“vboxsf”_Ext2文件系统挂载与卸载流程分析

任何文件系统在使用之前都需要挂载(mount),所谓挂载就是将一个磁盘的文件系统连接到操作系统目录树的过程。通过下面命令可以实现文件系统的挂载:

mount.ext2 /dev/sdc /mnt/ext2_test

完成文件系统的挂载后,磁盘上文件系统的所有数据就成为原有目录树的一个子树。普通用户就可以访问该磁盘上的数据了。

2ac07120e5d9c6bc7a195d8c824018df.png

1Ext2文件系统的挂载

自然,Ext2文件系统在使用之前也是需要挂载的。我们知道挂载操作是一个命令行的工具,也就是mount命令。该命令需要两个参数,一个是需要挂载的块设备,另外一个是目的路径。也就是这个文件系统挂载到什么位置。

文件系统的挂载流程如图所示,mount命令会触发VFS的挂载函数,而该函数则会调用具体文件系统的挂载函数,以Ext2为例则是调用ext2_mount函数。该函数的主要作用是从磁盘的超级块读取数据,并完成内存超级块数据的填充。

d1a26a334d2f2eef6a67b3aa5c3bbcda.png

该函数执行成功后最终是返回一个dentry指针。这个结构体包含了inode和超级块的信息。后续流程根据该dentry实现当前目录与该dentry的关联。

返回dentry指针后在vfs_kern_mount函数中完成mount结构体的初始化,并以其成员vfsmount类型返回。上述结构体之间的关系如图所示。

b966d5c3682e72a5d845c86855a714c3.png

函数返回后调用do_add_mount函数实现目录树的挂载。目录树的挂载主要是建立上述几个结构体之间的关联,这样在后续使用该路径时就能找到具体的inode,然后进行文件系统的访问。

2解除挂载(umount)

解除挂载就是将某个文件系统从系统目录树移除。解除挂载要比挂载的流程简单很多。同样是用户态通过命令(umount)触发解除挂载的流程。具体流程如图所示。

f85fa094c0b95bb1a6f500278ad8a747.png

解除挂载后目录就会指向挂载前的文件系统。

在Linux操作系统下面有个非常特别的地方。那就是一个目录可以同时挂载多个文件系统,但是只能有一个文件系统处于可用状态。同时,一个块设备也是可以同时挂载到多个路径。这样来看,Linux的挂载关系会非常复杂。

     文章后期可能会进行错误更正和内容更新,关注我们更方便了解内容变化。

f8e09a6f76a33f61049c7f0cabe86ec4.png b3f972ce75f8c9fe998a1a35646d72ef.png这是一个有温度的公众号 94d211b8f34858be105617a134940e79.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值