1. 介绍
rootfs翻译过来是根文件系统,内核启动的时候所mount的第一个文件系统就是rootfs,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
在 Linux 系统启动时,首先会加载内核和虚拟的根文件系统(如 initramfs),然后启动 init 进程。在 init 进程运行期间,会进行一些系统初始化的操作,例如加载模块、初始化硬件、挂载真实的根文件系统等。在挂载真实的根文件系统之前,通常会先在虚拟的根文件系统中完成一些初始化工作和根文件系统切换前的准备工作,例如配置网络、加载驱动程序、检查文件系统等。
2. 虚拟根文件系统
Linux的虚拟根文件系统通常由Initramfs、cpio-initrd 和 image-initrd来进行初始化。
Initramfs(Initial RAM File System)是一种新的初始化根文件系统方式,它使用 cpio 压缩工具创建一个内存中的文件系统。在系统启动时,Initramfs 会被挂载为根文件系统,包含了启动 Linux 所需的所有必要文件和程序,例如驱动程序、文件系统、网络配置等。Initramfs 通常用于引导系统、救援模式和升级内核等场景。
cpio-initrd 和 image-initrd 是 Linux 中传统的初始化根文件系统方式。它们使用 cpio 压缩工具将一组文件打包成一个 initrd 镜像文件,然后在系统启动时将这个镜像文件挂载为根文件系统。cpio-initrd 和 image-initrd 的主要区别在于 initrd 镜像文件的格式不同,前者是裸的 cpio 格式,后者是压缩过的 gzip 格式。这种初始化根文件系统方式已经逐渐被 Initramfs 取代。
3. 根文件系统
根分区中包含的东西很多,主要有以下几个:
/bin,/sbin,/usr/bin,/usr/sbin
这些目录是系统中的主要命令和工具程序所在的目录,包含了大部分系统工具、核心命令和脚本文件等。
/dev
这个目录包含了所有硬件设备的设备文件,包括磁盘、串口、USB 设备、网络设备等。在 Linux 中,所有设备都被视为文件,可以通过读写这些设备文件来进行设备访问。
/etc
这个目录包含了系统中的大部分配置文件,包括网络配置、用户配置、服务配置等。
/home
这个目录是普通用户的主目录,每个用户都有一个自己的目录,用于存放自己的文件和数据。
/lib,/usr/lib
这些目录包含了系统所需的共享库文件,是程序执行时所需要的动态链接库。
/proc
这个目录包含了系统中所有运行中进程的信息,包括进程的状态、资源使用情况等。
/root
这个目录是系统管理员的主目录,用于存放管理员的文件和数据。
/tmp
这个目录是系统中的临时目录,用于存放临时文件和数据。
/var
这个目录包含了系统中的可变数据,例如日志文件、邮件文件等。
[参考资料]
https://cloud.tencent.com/developer/article/1791275 Linux根文件系统(rootfs原理详解)
https://blog.51cto.com/u_15169172/2710948 ramdisk配置、解压、创建rootfs、启动简单分析
本文暂时没有评论,来添加一个吧(●'◡'●)