一文快速看懂 Centos7 系统的启动过程(配思维导图)

1,856 阅读1分钟

文章目录
0.思维导图概览
1.系统固件初始化
2.启动引导器GRUB2
3.Linux内核初始化
4.执行本地系统的第一个进程systemd

关键词:系统 启动 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 基础及应用教程》- 梁如军等