暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Ext2文件系统挂载与卸载流程分析

SunnyZhang的IT世界 2020-09-25
1851

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

    mount.ext2 dev/sdc mnt/ext2_test
    复制

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

    1Ext2文件系统的挂载


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


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

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


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



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

    2解除挂载(umount)


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

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


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

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



    这是一个有温度的公众号



    文章转载自SunnyZhang的IT世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论