启动过程与细节
-
按下电源键,开机自检。
- 这个过程中的主导程序来自系统固件,传统的 BIOS 和后来的 UEFI
- 该过程无论是Windows系统还是LInux系统均一致
- 无法完成自检一般是硬件问题
-
自检完成后会通过 BIOS/UEFI 的配置按顺序搜索所有磁盘上的主启动记录(MBR),并从MBR中读取启动加载器
- 在Windows下可能为 Windows Boot Loader,Linux下一般为 GRUB
- 此时系统固件将主导权转交给启动加载器
-
启动加载器从磁盘加载配置,向用户显示用于启动的菜单
- 配置文件位于:/etc/grub.d/, 、/etc/default/grub 和 /boot/grub2/grub.cfg
- 看到启动菜单,说明前面的步骤均正常
-
启动加载器根据用户选择或系统默认的选项,加载内核和initramfs到内存中。
- initramfs 是经过 gzip 的 cpio 归档,包含启动时所有必要硬件的内核模块,初始化脚本
- 配置文件为:/etc/dracut.conf
- 此时启动加载器将系统控制权转交给内核
-
对内核可以在 initramfs 中找到驱动的所有硬件,内核会初始化这些硬件。然后使用 PID 1 从 initramfs 执行 /sbin/init
- 在RHEL7之后的版本中 /sbin/init 指向 /sbin/lib/systemd/systemd
- 此时的启动还会包含 udevd 守护进程
- initramfs 中的 systemd 实例会执行 initrd.target 目标的所有单元。包括在 /sysroot 上挂载的实际 root 文件系统
-
内核 root 文件系统从 initramfs root 文件系统切换到之前挂载到 /sysroot 上的系统 root 文件系统
- systemd 会使用系统中安装的 systemd 副本自动重新执行
-
systemd 从系统中配置的默认目标(图形界面或多用户),启动对应的单元
- 默认目标可以通过 /etc/systemd/system/default.target , /etc/systemd/system 来配置
上面的过程,简单通俗一点概述就是: 开机自检 –> 读MBR加载启动加载器Grub –> 启动一个包含基本驱动的临时文件系统initramfs,主要是为了驱动基本硬件,为真正的根文件系统启动作准备 –> 准备好之后切换根文件系统 –> 切换后重新加载 systemd,然后启动后续的服务单元 –> 登录界面
可以手动干预的阶段:
- 自检过程中 F2 或 Del (根据硬件厂商的定义)进入 BIOS/UEFI 配置硬件选项
- 正常加载 Grub 后通过 grub-shell 执行 grub 命令,启动菜单界面按 ‘c’ 进入
- 后续要么启动配置不正确被卡住,要么能正常执行到 login 界面
PS:(重要)不自己一条一条认真过脑理解和实践是真记不住。
|