根文件系统概念
根文件系统是内核中虚拟文件系统(VFS)通过挂载管理的第一个文件系统,它提供了系统运行的基础,而 VFS 则是内核中抽象出的一层,负责统一管理不同的文件系统类型。通过VFS,内核不仅能够挂载和管理根文件系统,还能处理其他虚拟文件系统如 /proc
和 /sys
,这些虚拟文件系统直接与内核和硬件交互。
根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于:它是内核(而不是用户)启动时所挂载(mount)的第一个文件系统,内核代码的部分文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。
根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含:
(1)系统引导和使其他文件系统得以挂载(mount)所必要的文件。
(2)根文件系统包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在 Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,
(3)动态加载的内核模块和内核设备驱动程序对应的ko文件。
(4)根文件系统中还包括了许多的应用程序。
内核中的虚拟文件系统
虚拟文件系统是内核中的一个抽象层,它为不同类型的物理文件系统(如 ext4、XFS、NFS 等)提供了统一的接口。VFS 使得 Linux 能够支持多种不同的文件系统,并在用户和内核之间充当文件操作的中介层。VFS 并不是一个真实的文件系统,它通过提供通用的API来屏蔽底层文件系统的差异,使操作系统能够方便地在不同的存储设备上管理文件。
根文件系统和内核的虚拟文件系的关系?
根文件系统(Root Filesystem)和内核的虚拟文件系统(Virtual Filesystem, VFS)之间有紧密的联系,但它们各自承担不同的角色,提供了不同的功能。
-
挂载点: 根文件系统
/
是整个文件系统层次结构的起点,而虚拟文件系统则负责管理根文件系统及其他挂载的文件系统。内核在启动时通过 VFS 挂载根文件系统,之后再挂载其他子文件系统(如/home
、/usr
等)。 -
抽象与管理: 虚拟文件系统提供了一个抽象层,用于管理各种不同类型的文件系统,包括根文件系统在内。根文件系统是 VFS 管理的一个具体实现,当操作系统需要访问根目录中的文件时,VFS 会负责将这些请求路由到相应的底层文件系统驱动。
用户空间虚拟文件系统
特殊的虚拟文件系统(如 /proc
和 /sys
)虽然与根文件系统一起被内核挂载,但它们并不属于传统的根文件系统范畴。根文件系统是物理存储上的文件系统,包含启动时所需的核心文件和目录,如引导程序、初始化脚本、内核模块等。而虚拟文件系统,如 /proc
和 /sys
,则是内核通过 VFS(虚拟文件系统) 提供的一种特殊接口,用于展示和管理内核与硬件之间的状态和信息。
这些虚拟文件系统的作用是为内核与用户空间应用程序提供一个交互的桥梁。例如,/proc
文件系统提供了系统进程、内存和硬件信息的访问途径,而 /sys
文件系统则用于配置和查看内核设备信息。它们实际上并不存储数据,而是动态生成的,用于实时查看和管理系统状态。
总的来说,虚拟文件系统是内核管理硬件资源和提供系统信息的关键工具,与根文件系统一同运行,但功能不同,根文件系统主要负责加载系统启动所需的基本文件,而虚拟文件系统负责硬件和内核状态的监控与交互。
根文件系统的结构
根文件系统的结构遵循FHS标准(文件系统层次结构标准),采用树形结构,保证系统文件和应用程序的有序管理。以下是常见的嵌入式Linux系统根文件系统中的目录:
/bin: 包含启动过程中所需的基本命令,系统启动后,普通用户也可以使用这些命令。
/sbin: 存放主要供系统管理员使用的管理命令,普通用户通常无法直接访问。
/etc: 系统的配置文件目录,负责管理系统的核心配置。
/root: root用户的主目录,仅供root用户访问。
/lib: 存放系统共享库文件,供运行中的程序使用,确保运行时所需的库可用。
/lib/modules: 存放可加载的内核模块,尤其是系统启动或恢复过程中所需的模块,如网络驱动或文件系统驱动。
/dev: 设备文件目录,包含与系统硬件交互所需的设备节点。
/tmp: 临时文件目录,供系统和程序在运行时存储临时数据文件。
/boot: 存放启动加载器(如LILO、GRUB)和内核映像文件,负责系统的引导启动。
/mnt: 供系统管理员临时挂载文件系统的挂载点,用于连接外部存储设备或其他文件系统。
/proc: 虚拟文件系统,用于显示当前系统进程和内核信息,动态生成内容,不存储于物理磁盘。
/usr: 存放用户应用程序及其库、文档和二进制文件的目录。
/var: 用于存放动态变化的数据,如日志文件、缓存和临时文件等。
/home: 各用户的主目录,存放用户的个人文件和配置。
这些目录和文件共同确保了系统的顺利启动和稳定运行,并为系统的扩展和管理提供了标准化的结构和基础。