linux文件系统初始化过程(1)---概述

术语表:

struct task:进程

struct mnt_namespace:命名空间

struct mount:挂载点

struct vfsmount:挂载项

struct file:文件

struct super_block:超级块

struct dentry:目录

struct inode:索引节点

 

一、目的

    linux文件系统主要分为三个部分:文件系统调用;虚拟文件系统(VFS);挂载到VFS的实际文件系统。

    其中,VFS是核心,linux文件系统的本质就是在内存中创建一棵VFS树。当根目录被创建后,用户就可以使用系统调用在VFS上创建文件、删除文件、挂载各种文件系统等操作。

    该系列文章主要分析linux3.10文件系统初始化过程,分为三个阶段:

    1、挂载根文件系统(rootfs);

    2、加载initrd;

    3、挂载磁盘文件系统;

 

二、常用数据结构

    linux文件系统中重要的数据结构有:文件、挂载点、超级块、目录项、索引节点等。每个数据结构的具体实现请参见源代码,这里不再描述。

    为了直观的表示数据结构之间的关系,请参见图1:图中含有两个文件系统(红色和绿色表示的部分),并且绿色文件系统挂载在红色文件系统tmp目录下。一般来说,每个文件系统在VFS层都是由挂载点、超级块、目录和索引节点组成;当挂载一个文件系统时,实际也就是创建这四个数据结构的过程,因此这四个数据结构的地位很重要,关系也很紧密。由于VFS要求实际的文件系统必须提供以上数据结构,所以不同的文件系统在VFS层可以互相访问。

    如果进程打开了某个文件,还会创建file(文件)数据结构,这样进程就可以通过file来访问VFS的文件系统了。

    另外,该图只给出了主要的关系结构,忽略了部分细节。

                               图1

 

三、函数调用关系

    图2描述了文件系统初始化过程中主要的函数调用关系。linux文件系统初始化过程主要分为三个阶段:

    1、vfs_caches_init()负责挂载rootfs文件系统,并创建了第一个挂载点目录:'/';

    2、rest_init()负责加载initrd文件,扩展VFS树,创建基本的文件系统目录拓扑;

    3、init程序负责挂载磁盘文件系统,并将文件系统的根目录从rootfs切换到磁盘文件系统;

                   图2

 

四、总结

    linux文件系统初始化过程主要分为三个阶段:挂载rootfs,提供第一个挂载点''/;加载initrd,扩展VFS树;执行init程序,完成linux系统的初始化。下面会详细介绍每个阶段的主要内容。

 

时间: 2024-09-16 04:45:44

linux文件系统初始化过程(1)---概述的相关文章

linux文件系统初始化过程(5)---加载initrd(下)

一.目的     linux把文件分为常规文件.目录文件.软链接文件.硬链接文件.特殊文件(设备文件.管道文件.socket文件等)几种类型,分别对应不同的新建函数sys_open().sys_mkdir().sys_symlink().sys_link().sys_mknod().     系统初始化阶段成功加载initrd后,调用这些接口函数创建各种文件,因此这些函数在linux文件系统初始化过程中起到了重要作用,本文将详细描述这些接口函数的实现过程.     这些接口函数主要在fs/nam

linux文件系统初始化过程(3)---加载initrd(上)

一.目的       本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd.     initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可执行程序和驱动程序.在linux初始化的初级阶段,它提供了一个基本的运行环境.当成功加载磁盘文件系统后,系统将切换到磁盘文件系统并卸载initrd.     如果是嵌入式设备,那么最终的文件系统就是initrd.     二.cpio文件格式       initrd常用的的文件格式是cpio,cpio

linux文件系统初始化过程(2)---挂载rootfs文件系统

一.目的     本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统.     rootfs是基于内存的文件系统,所有操作都在内存中完成:也没有实际的存储设备,所以不需要设备驱动程序的参与.基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统.   二.主要函数调用过程     图1描述了挂载rootfs的函数调用关系(图中红色部分),便于后面的分析.  

linux文件系统初始化过程(6)---执行init程序

一.目的     内核加载完initrd文件后,为挂载磁盘文件系统做好了必要的准备工作,包括挂载了sysfs.proc文件系统,加载了磁盘驱动程序驱动程序等.接下来,内核跳转到用户空间的init程序,由init完成创建磁盘设备文件.加载磁盘文件系统.从rootfs切换到磁盘根文件系统等工作.     由于在不同的linux发行版中,init的实现方式差异很大,不能将所有的发行版都分析一遍,因此本文选取ubuntu12.04发行版来描述如何从rootfs切换到磁盘根文件系统.   二.创建磁盘设备

linux文件系统初始化过程(4)---加载initrd(中)

一.目的     上文详细介绍了CPIO格式的initrd文件,本文从源代码角度分析加载并解析initrd文件的过程.     initrd文件和linux内核一般存储在磁盘空间中,在系统启动阶段由bootload负责把磁盘上的内核和initrd加载到指定的内存空间中:然后,再由内核读取和解析initrd文件,在VFS(目前只有rootfs的根目录)中新建目录.常规文件.符号链接文件以及特殊文件:这样VFS就从根目录"/"成长为一棵枝繁叶茂的大树了.   二.函数调用过程      

Linux系统和内核初始化过程简介

全部引导过程是四步 1:boot PROM phase 2:boot Programs phase 3:kernel initialization phase 4:init phase system初始化,检测内存和cpu,检查设备和创建设备树,设置console kernel初始化过程 kernel self -initialization 内核自检 loading of kernel modules 载入内核模块 reading of the kernel configuration fil

图文详解Linux文件系统的目录结构

1. / 文件系统的入口,最高一级目录: 2. /bin 基础系统所需要的命令位于此目录,是最小系统 所需要的命令,如:ls, cp, mkdir等.这个目录中的文件都是可执行的,一般的用户都可以使用. 3. /boot 包含Linux内核及系统引导程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个 目录中.在一般情况下,GRUB或LILO系统引导管理器也位于这个目录: 4. /dev 设备文件存储目录, 比如声卡.磁盘... ... 这是一个非常有趣的目录,是Linu

Linux文件系统及常用命令

Linux文件系统介绍: 一 .Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上.目录提供了管理文件的一个方便而有效的途径. Linux使用树状目录结构,在安装的时候,安装程序已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型.                                                               ┃  /根目录 ┏━━┳━━━┳━━━┳━━━╋━━━┳

linux文件系统(四)——软连接与硬连接

声明:本Linux文件系统博客,共分四节,是根据网上多个相关博客,以及自己的理解加上相关资料总结而成.(作者:lvyilong316) 1. 特点概述 (1)软连接可以 跨文件系统 ,硬连接不可以 .实践的方法就是用共享文件把windows下的 aa.txt文本文档连接到linux下/root目录 下 bb,cc . ln -s aa.txt /root/bb 连接成功 .ln aa.txt /root/bb 失败 . (2)关于 I节点的问题 .硬连接不管有多少个,都指向的是同一个I节点,会把