Day 6-1 Linux 启动流程与运行级别【认知】

Day 6-1 Linux 启动流程与运行级别【认知】 理解 Linux 系统从开机到用户空间的完整启动过程,掌握运行级别管理和故障排查技能。 课程目标 理解 Linux 启动流程的完整链路(硬件 → 引导 → 内核 → 系统初始化)。 掌握 GRUB2 引导配置与常见内核启动参数。 理解 SysV

Day 6-1 Linux 启动流程与运行级别【认知】

理解 Linux 系统从开机到用户空间的完整启动过程,掌握运行级别管理和故障排查技能。

Linux 系统管理基础

课程目标

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

一、Linux 启动流程全景

1.1 启动链路(从硬件到用户空间)

BIOS/UEFI → GRUB2 → Kernel → initramfs → systemd

阶段 组件 职责 关键动作
① 硬件初始化 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 配置流程总结

编辑默认配置、重新生成 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)来控制系统状态:

SysVinit 运行级别

运行级别 模式 说明
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

对比项 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 常见启动故障排查

根据 GRUB 菜单、黑屏卡死或服务启动失败,检查配置、进入单用户模式或查看失败服务

六、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

七、课后作业

必做

  1. 查看当前系统的默认 target:systemctl get-default。
  2. 查看当前系统的内核版本:uname -r。
  3. 查看启动日志中最近的错误信息: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 行末添加,通用于所有发行版。

评论