Day 6-1 Linux 启动流程与运行级别【认知】
理解 Linux 系统从开机到用户空间的完整启动过程,掌握运行级别管理和故障排查技能。

课程目标
- 理解 Linux 启动流程的完整链路(硬件 → 引导 → 内核 → 系统初始化)。
- 掌握 GRUB2 引导配置与常见内核启动参数。
- 理解 SysVinit 运行级别与 systemd target 的映射关系。
- 掌握单用户模式和救援模式的进入方法与适用场景。
- 了解 Rocky 10 和 Ubuntu 26.04 在启动流程上的差异。
一、Linux 启动流程全景
1.1 启动链路(从硬件到用户空间)

| 阶段 | 组件 | 职责 | 关键动作 |
|---|---|---|---|
| ① 硬件初始化 | BIOS/UEFI | 硬件自检(POST)、选择引导设备 | 检测 CPU、内存、硬盘、键盘 |
| ② 引导程序 | GRUB2 | 加载内核和 initramfs 到内存 | 显示启动菜单、加载内核 |
| ③ 内核初始化 | Kernel | 解压内核、加载驱动 | 初始化硬件、调度器、内存管理 |
| ④ 临时根文件系统 | initramfs | 提供临时根环境,加载关键驱动 | 加载 LVM/RAID/文件系统模块 |
| ⑤ 系统初始化 | systemd(PID 1) | 启动所有系统服务、进入默认 target | 并行启动服务、挂载文件系统 |
1.2 各阶段详解
1. BIOS/UEFI(固件层)
- BIOS(传统)或 UEFI(现代)执行硬件自检(POST,Power-On Self-Test)。
- 检测 CPU、内存、硬盘、键盘等硬件是否正常。
- 根据启动顺序(Boot Order)选择引导设备(硬盘、U 盘、网络等)。
2. GRUB2(引导加载程序)
GRUB2(GRand Unified Bootloader version 2)负责加载内核和 initramfs:
- 显示启动菜单(可选)。
- 加载选中的内核(vmlinuz)到内存。
- 加载 initramfs(初始内存文件系统)到内存。
- 将控制权移交给内核。
3. Kernel(内核初始化)
- 内核解压缩并初始化。
- 检测并加载硬件驱动(CPU、内存、PCI 设备等)。
- 挂载 initramfs 为临时根文件系统。
- 启动 init 进程(PID 1)——在 systemd 系统中即为 systemd。
4. initramfs(临时根文件系统)
initramfs 是一个小型的临时根文件系统,包含:
- 存储设备驱动(SATA、SCSI、NVMe)。
- 文件系统模块(ext4、xfs、btrfs)。
- LVM、RAID、加密卷等工具。
- 其作用是在真正的根文件系统挂载前,加载必需的驱动。
5. systemd(PID 1)
- 挂载真正的根文件系统(
/)。 - 启动所有系统服务(并行启动,加快速度)。
- 进入默认的运行目标(target)。
1.3 启动流程中的关键文件
| 文件/目录 | Rocky 10 | Ubuntu 26.04 |
|---|---|---|
| 内核文件 | /boot/vmlinuz-* |
/boot/vmlinuz-* |
| initramfs 镜像 | /boot/initramfs-*.img |
/boot/initrd.img-* |
| GRUB 配置文件 | /boot/grub2/grub.cfg |
/boot/grub/grub.cfg |
| GRUB 默认配置 | /etc/default/grub |
/etc/default/grub |
| 默认 target 链接 | /etc/systemd/system/default.target |
/etc/systemd/system/default.target |
二、GRUB2 引导配置
2.1 GRUB2 是什么?
GRUB2 是 Linux 系统最常用的引导加载程序(Boot Loader)。它的核心职责:
- 允许用户选择启动哪个操作系统或内核版本。
- 向内核传递启动参数(如调整运行级别、启用调试模式)。
- 提供救援模式入口。
2.2 /etc/default/grub 核心参数
# /etc/default/grub
GRUB_TIMEOUT=5 # 启动菜单等待时间(秒)
GRUB_DEFAULT=0 # 默认启动项(0 表示第一个)
GRUB_CMDLINE_LINUX="rhgb quiet" # 内核启动参数
| 参数 | 含义 | 示例 |
|---|---|---|
| GRUB_TIMEOUT | 菜单等待时间(秒) | 5(5 秒)、-1(无限等待) |
| GRUB_DEFAULT | 默认启动项编号(从 0 开始) | 0(第一个)、saved(记住上次选择) |
| GRUB_CMDLINE_LINUX | 传递给内核的启动参数 | rhgb quiet(图形启动 + 减少日志输出) |
2.3 常见内核启动参数
| 参数 | 作用 | 适用场景 |
|---|---|---|
| rhgb | Red Hat Graphical Boot(图形化启动,显示进度条) | RHEL 系默认 |
| quiet | 减少内核启动日志输出(静默模式) | 生产环境,减少干扰 |
| single 或 1 | 进入单用户模式 | 重置密码、修复系统 |
| systemd.unit=rescue.target | 进入救援模式(根文件系统只读) | 文件系统损坏修复 |
| systemd.unit=emergency.target | 进入紧急模式(不挂载文件系统) | 无法挂载根文件系统 |
| rd.break | 在 initramfs 阶段中断启动 | RHEL 系重置 root 密码 |
2.4 修改 GRUB 配置(实战案例)
案例一:调整启动菜单等待时间
场景:服务器开机时 GRUB 菜单等待时间太短(5 秒),来不及选择其他内核版本,需要调整为 30 秒。
Rocky 10:
# 1. 查看当前配置
[root@magedu ~]# cat /etc/default/grub | grep TIMEOUT
GRUB_TIMEOUT=5
# 2. 修改等待时间为 30 秒
[root@magedu ~]# vim /etc/default/grub
GRUB_TIMEOUT=30
# 3. 重新生成 GRUB 配置文件
[root@magedu ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
# 4. 重启验证
[root@magedu ~]# reboot
Ubuntu 26.04:
# 1. 查看当前配置
[root@magedu ~]# cat /etc/default/grub | grep TIMEOUT
GRUB_TIMEOUT=5
# 2. 修改等待时间为 30 秒
[root@magedu ~]# sudo vim /etc/default/grub
GRUB_TIMEOUT=30
# 3. 重新生成 GRUB 配置文件
[root@magedu ~]# sudo update-grub
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.0-31-generic
Found initrd image: /boot/initrd.img-6.8.0-31-generic
done
# 4. 重启验证
[root@magedu ~]# sudo reboot
提示 1:GRUB_TIMEOUT=-1 表示无限等待,直到用户手动选择。
提示 2:新版 GRUB 2.04+ 引入了 GRUB_TIMEOUT_STYLE 参数,默认值为 hidden,表示:
- 启动时不显示菜单。
- 按 ESC 键才会显示。
- 倒计时结束后直接启动默认系统。
案例二:添加内核启动参数(禁用图形启动)
场景:系统启动时卡在图形进度条界面,看不到详细报错信息,需要去掉 rhgb quiet 参数显示详细启动日志,便于排查问题。
Rocky 10:
# 1. 查看当前内核参数
[root@magedu ~]# cat /etc/default/grub | grep CMDLINE_LINUX
GRUB_CMDLINE_LINUX="rhgb quiet"
# 2. 删除 rhgb quiet(显示详细启动日志)
[root@magedu ~]# vim /etc/default/grub
GRUB_CMDLINE_LINUX=""
# 3. 重新生成 GRUB 配置
[root@magedu ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
# 4. 重启查看详细启动日志
[root@magedu ~]# reboot
Ubuntu 26.04:
# 1. 查看当前内核参数
[root@magedu ~]# cat /etc/default/grub | grep CMDLINE_LINUX
GRUB_CMDLINE_LINUX="quiet splash"
# 2. 删除 quiet splash(显示详细启动日志)
[root@magedu ~]# sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX=""
# 3. 重新生成 GRUB 配置
[root@magedu ~]# sudo update-grub
# 4. 重启查看详细启动日志
[root@magedu ~]# sudo reboot
2.5 修改 GRUB 配置流程总结

| 操作 | Rocky 10 | Ubuntu 26.04 |
|---|---|---|
| 编辑默认配置 | vim /etc/default/grub |
vim /etc/default/grub |
| 生成配置文件 | grub2-mkconfig -o /boot/grub2/grub.cfg |
update-grub |
| GRUB 配置文件位置 | /boot/grub2/grub.cfg |
/boot/grub/grub.cfg |
三、运行级别与 systemd target
3.1 SysVinit 运行级别(传统)
SysVinit 是 Linux 早期使用的初始化系统,使用运行级别(Runlevel)来控制系统状态:

| 运行级别 | 模式 | 说明 |
|---|---|---|
| 0 | 关机(Halt) | 关闭系统 |
| 1 | 单用户模式(Single-user) | 维护模式,仅 root 可登录,不启动网络 |
| 2 | 多用户无网络 | 多用户模式,不启动网络服务(Debian 系默认) |
| 3 | 多用户(命令行) | 完整的多用户命令行模式(RHEL 系默认) |
| 4 | 未使用(自定义) | 用户可以自定义 |
| 5 | 图形界面(X11) | 多用户 + 图形界面(GUI) |
| 6 | 重启(Reboot) | 重启系统 |
3.2 systemd target(现代)
systemd 使用 target 替代了传统的运行级别:
| 传统运行级别 | systemd target | 说明 |
|---|---|---|
| 0 | poweroff.target | 关机 |
| 1 | rescue.target | 单用户/救援模式 |
| 2 | multi-user.target | 多用户模式(无网络,Debian 系) |
| 3 | multi-user.target | 多用户命令行模式(RHEL 系) |
| 4 | multi-user.target | 未使用 |
| 5 | graphical.target | 图形界面模式 |
| 6 | reboot.target | 重启 |
3.3 systemd vs SysVinit 对比
| 对比项 | SysVinit | systemd |
|---|---|---|
| 启动方式 | 顺序启动(串行) | 并行启动 |
| 启动速度 | 慢 | 快 |
| 依赖管理 | 手动设置依赖顺序 | 自动解析依赖关系 |
| 配置复杂度 | 简单但僵化 | 灵活但学习曲线陡峭 |
| 当前状态 | 已被取代 | 主流(RHEL 7+/Ubuntu 15.04+) |
3.4 查看和切换运行级别/target
查看当前 target:
[root@magedu ~]# systemctl get-default
multi-user.target
# 或查看链接
[root@magedu ~]# ls -l /etc/systemd/system/default.target
切换 target(临时):
# 切换到救援模式
[root@magedu ~]# systemctl rescue
# 切换到紧急模式
[root@magedu ~]# systemctl emergency
# 重启系统
[root@magedu ~]# systemctl reboot
# 关机
[root@magedu ~]# systemctl poweroff
设置默认 target(永久):
# 设置为命令行模式
[root@magedu ~]# systemctl set-default multi-user.target
# 设置为图形界面模式
[root@magedu ~]# systemctl set-default graphical.target
3.5 查看 target 的依赖关系
# 查看 multi-user.target 依赖的服务
[root@magedu ~]# systemctl list-dependencies multi-user.target
# 查看 graphical.target 依赖的服务
[root@magedu ~]# systemctl list-dependencies graphical.target
四、单用户模式与救援模式
4.1 什么是单用户模式?
单用户模式是一种维护模式,用于:
- 重置 root 密码(忘记 root 密码时)。
- 修复文件系统错误。
- 排查启动故障。
- 移除损坏的软件包。
4.2 进入单用户模式(通过 GRUB)
Rocky 10(RHEL 系):
# 1. 重启系统,在 GRUB 菜单按 e 键编辑启动项
# 2. 找到 linux 开头的行(内核启动参数行)
# 3. 在行末添加 rd.break(中断启动进入 initramfs)
# 4. 按 Ctrl+x 启动
# 进入后,根文件系统挂载在 /sysroot,需要重新挂载为读写
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
# 执行维护操作后
[root@magedu ~]# exit
switch_root:/# reboot
Ubuntu 26.04(Debian 系):
1. 重启系统,在 GRUB 菜单按 e 键编辑启动项。
2. 找到 linux 开头的行(内核启动参数行)。
3. 在行末添加 single 或 1 或 systemd.unit=rescue.target。
4. 按 Ctrl+x 启动。
4.3 重置 root 密码(实战场景)
方法一:使用 rd.break(Rocky 10):
# 1. 在 GRUB 界面按 e 编辑
# 2. 在 linux 行末尾添加 rd.break
# 3. 按 Ctrl+x 启动
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
[root@magedu ~]# passwd root
[root@magedu ~]# touch /.autorelabel # SELinux 重新标记(Rocky 需要)
[root@magedu ~]# exit
switch_root:/# reboot
方法二:使用 single 参数(Ubuntu 26.04 / 通用):
# 1. 在 GRUB 界面按 e 编辑
# 2. 在 linux 行末尾添加 single
# 3. 按 Ctrl+x 启动
[root@magedu ~]# passwd root
[root@magedu ~]# reboot
4.4 rescue.target vs emergency.target

| 对比项 | rescue.target | emergency.target |
|---|---|---|
| 根文件系统 | 挂载为只读 | 不挂载任何文件系统 |
| 网络 | 通常不启动 | 不启动 |
| 服务 | 启动基础服务 | 只启动 systemd 核心 |
| 适用场景 | 文件系统损坏修复 | 需要完全手动挂载和修复 |
| 进入方式 | systemd.unit=rescue.target | systemd.unit=emergency.target |
| RHEL 系 | rd.break 或 systemd.unit=rescue.target | systemd.unit=emergency.target |
| Debian 系 | single 或 1 | emergency |
五、启动排障常用操作
5.1 查看启动日志
# 查看本次启动日志
[root@magedu ~]# journalctl -b
# 查看上次启动的日志(排查重启原因)
[root@magedu ~]# journalctl -b -1
# 查看启动过程中失败的服务
[root@magedu ~]# systemctl --failed
# 查看特定服务的启动状态
[root@magedu ~]# systemctl status nginx
5.2 常用启动参数速查
| 参数 | 作用 | 适用场景 |
|---|---|---|
| 3 或 multi-user.target | 启动到命令行模式 | 图形界面故障 |
| single 或 1 | 启动到单用户模式 | 重置密码、修复系统 |
| rd.break | 在 initramfs 阶段中断 | RHEL 系重置密码 |
| systemd.unit=emergency.target | 启动到紧急模式 | 无法挂载根文件系统 |
| init=/bin/bash | 直接启动 bash | 系统完全无法启动时 |
5.3 常见启动故障排查

六、Rocky 10 vs Ubuntu 26.04 启动流程差异
| 对比项 | Rocky 10 | Ubuntu 26.04 |
|---|---|---|
| 引导配置生成 | grub2-mkconfig -o /boot/grub2/grub.cfg |
update-grub |
| GRUB 配置文件 | /boot/grub2/grub.cfg |
/boot/grub/grub.cfg |
| initramfs 镜像 | /boot/initramfs-*.img |
/boot/initrd.img-* |
| initramfs 生成工具 | dracut | update-initramfs |
| 进入单用户 | rd.break 或 systemd.unit=rescue.target | single 或 1 |
| 默认运行级别 | multi-user.target(命令行) | graphical.target(图形) |
| 内核包名 | kernel | linux-image |
| SELinux | 默认启用(需 /.autorelabel) | 默认不使用 |
| 包管理器 | dnf | apt |
七、课后作业
必做
- 查看当前系统的默认 target:
systemctl get-default。 - 查看当前系统的内核版本:
uname -r。 - 查看启动日志中最近的错误信息:
journalctl -b -p err。
简答题
1. BIOS/UEFI、GRUB2、Kernel、initramfs、systemd 各自的作用是什么?
| 组件 | 作用 |
|---|---|
| BIOS/UEFI | 位于固件层,负责硬件自检(POST),检测 CPU、内存、硬盘等硬件是否正常;然后根据启动顺序选择引导设备(硬盘、U 盘、网络等),将控制权交给 GRUB2。 |
| GRUB2 | 引导加载程序,负责加载选中的内核(vmlinuz)和 initramfs 到内存,并向内核传递启动参数(如运行级别、调试模式等),最后将控制权交给内核。 |
| Kernel | 操作系统内核,负责硬件初始化、驱动加载、进程调度、内存管理、文件系统管理等核心功能,是系统运行的基础。 |
| initramfs | 临时根文件系统,包含存储设备驱动(SATA、NVMe)、文件系统模块(ext4、xfs)、LVM/RAID 等工具。它的作用是在挂载真正的根文件系统前加载必要驱动,确保内核能够识别并挂载根文件系统。 |
| systemd | PID 1 进程,系统和服务管理器,负责挂载真正的根文件系统、并行启动所有系统服务、进入默认 target,是系统启动的最后阶段。 |
2. 如果忘记 root 密码,应该如何重置?
Rocky 10(使用 rd.break):
重启系统,在 GRUB 菜单按 e 键编辑启动项,找到 linux 开头的行,在行末添加 rd.break,然后按 Ctrl+x 启动。
进入后执行:
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
[root@magedu ~]# passwd root
[root@magedu ~]# touch /.autorelabel # SELinux 重新标记(Rocky 需要)
[root@magedu ~]# exit
switch_root:/# reboot
Ubuntu 26.04(使用 single):
重启系统,在 GRUB 菜单按 e 键编辑启动项,找到 linux 开头的行,在行末添加 single,然后按 Ctrl+x 启动。
进入后直接执行:
[root@magedu ~]# passwd root
[root@magedu ~]# reboot
三种进入方式对比:
- rd.break:在 linux 行末添加,仅适用于 RHEL/Rocky 系。
- single 或 1:在 linux 行末添加,通用于所有发行版。
- systemd.unit=rescue.target:在 linux 行末添加,通用于所有发行版。
评论