Linux内核文件系统挂载分析
作者从mount系统调用的实现过程入手,聚焦于Linux 3.2.0内核,拆解文件系统挂载的底层机制。文章首先厘清了两个核心数据结构:每个挂载的文件系统都对应一个vfsmount,它维护着文件系统在哈希表、父子关系链表以及名字空间中的位置;path结构则封装了目标挂载点与父文件系统的关联。 核心分析围绕一连串的函数调用展开:系统调用服务例程将参数复制进内核后,便交由do_mount处理。它通过kern_path定位挂载点,随后分发至do_new_mount进行常规挂载。后者的关键步骤是通过do_kern_mount获取源文件系统的vfsmount,并经由do_add_mount执行合法性检查,最终调用graft_tree进行装载。 装载的精髓体现在attach_recursive_mnt中。该函数建立父子映射:让子文件系统的vfsmount指向父vfsmount,并链接到父系统中的挂载点dentry。最后的commit_tree则将这一切“落地”:把新vfsmount置入正确的名字空间链表、全局哈希表以及父文件系统的子文件系统列表中。整个过程清晰地揭示,挂载在内核层面的本质,正是将源文件系统的vfsmount结构以严格的层级关系,嫁接到目标文件系统的目录树之中。