术语表:
struct mount:挂载点
struct mountpoint挂载点节点
struct vfsmount:挂载项
源文件系统用户将要挂载的文件系统
目的文件系统挂载源文件系统的文件系统
一、目的
本文将介绍linux挂载文件系统的过程,从系统调用mount()函数开始解析,主要分为三个阶段:
1、新建源文件系统;
2、查找目的文件系统的挂载目录;
3、将源文件系统挂载到目的文件系统的挂载目录;
本文以linux
3.10版本为基础进行讲解。
二、函数调用关系
mount系统调用的定义在fs/namespace.c文件中,具体的定义为:SYSCALL_DEFINE5(mount,char
__user *, dev_name, char __user *, dir_name, char __user *,type, unsigned long, flags, void __user *, data)。
其中,dev_name定义了设备路径;di_name定义了挂载目录;type定义了文件系统类型;flags和data定义了一些选项内容。我们重点关注前三个参数,后两个参数目前不关注。
下图描述了主要的函数调用关系,linux挂载文件系统主要分为三个阶段:
1、vfs_kern_mount()负责创建源文件系统;
2、lock_mount()负责在目的文件系统中查找挂载目录;
3、graft_tree()负责将源文件系统挂载到目的文件系统的挂载目录上ÿ