关键词:系统 启动 linux centos7 过程 grub2 内核 初始化 systemd
0. 思维导图概览
1. 系统固件初始化
1.1 加电
- 开机自检
1.2 搜索可启动设备
1.3 从磁盘中加载GRUB2
1.4 转交控制权给GRUB2
2. 启动引导器GRUB2
2.1 启动GRUB2
- 从磁盘加载配置
- 向用户显示GRUB菜单
- 启动项被选择
2.2 加载 kernel 与 initramfs
-
从磁盘加载
-
加载到 ram
-
initramfs 是 cpio 归档文件
- 必要的 kernel 模块
- 初始化脚本
- …
-
转交控制权给 kernel
- 传递 kernel 命令行选项
- initramfs 在 ram 中的位置
3. Linux内核初始化
3.1 从 initramfs 启动 systemd 的工作副本
- /sbin/init
- pid=0
3.2 initramfs 的 systemd 启动 initrd.target
- 所有 units
- 包括依赖的 unit
3.3 kernel 在 initramfs 中查找所有硬件的初始化程序
- 初始化硬件
3.4 initrd-root-fs.target 将系统的root文件系统挂载
- 以只读形式
- 挂载到 /sysroot
3.5 执行 initrd.target 目标的其他相关 unit
3.6 initrd-switch-root.target 切换 root文件系统
- 从 initramfs 的root文件系统
- 到系统实际root文件系统
3.7 将控制权交给实际root文件系统上的 systemd实例
4. 执行本地系统的第一个进程systemd
4.1 systemd 使用系统中安装的 systemd 副本自行重新执行
- systemd 副本(PID=1)
4.2 systemd 查找系统配置或从内核命令行传递的默认目标
4.3 systemd 启动默认目标 default.target 的所有 units
-
自动解决单元间的依赖关系
-
若默认目标为multi-user.target
- 启用文本登录屏幕
-
若默认目标为graphical.target
- 启用图形登录屏幕
参考文档
《Linux 基础及应用教程》- 梁如军等