欢迎光临
我们一直在努力

Linux运维入门第五章(5-1):Linux启动流程与运行级别——从开机到登录,一篇掌握!

前言

你好,欢迎来到 Linux 运维第五章(5-1)!

前面四章我们学习了文件管理、用户权限、进程管理和存储管理,你已经能够熟练地操作一个正在运行的 Linux 系统了。但有一个问题可能一直悬而未决——系统是怎么启动起来的?

当你按下电源键,屏幕上一串串字符飞速滚动,直到出现登录提示符。这中间发生了什么?如果系统启动卡住了,怎么排查?如果忘记了 root 密码,怎么重置?这些问题的答案,都藏在 Linux 的启动流程中。

今天我们将系统学习:

  • Linux 启动流程全景:从 BIOS/UEFI 到用户空间的完整链路
  • GRUB2 引导配置:启动菜单、内核参数、配置文件修改
  • 运行级别与 systemd target:SysVinit 与 systemd 的对比与切换
  • 单用户模式与救援模式:重置 root 密码、修复启动故障
  • 启动故障排查:查看日志、定位问题
  • Rocky vs Ubuntu 启动流程差异

学完今天的内容,你将能理解 Linux 启动的"黑盒",并在系统无法启动时从容应对。

好,让我们正式开始今天的旅程 🚀

一、Linux 启动流程全景

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

Linux 的启动过程可以分为五个主要阶段:

① 硬件初始化 → ② 引导程序 → ③ 内核初始化 → ④ 临时根文件系统 → ⑤ 系统初始化
BIOS/UEFI GRUB2 Kernel initramfs systemd
硬件自检、 加载内核和 解压内核、 加载关键驱动、 挂载根文件系统、
选择引导设备 initramfs 初始化硬件 提供临时根环境 启动所有服务

阶段组件职责关键动作
① 硬件初始化 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 为临时根文件系统
  • 启动 initramfs 中的第一个进程(在 systemd 系统中即为 systemd)

4. initramfs(临时根文件系统)

initramfs 是一个小型的临时根文件系统,包含:

  • 存储设备驱动(SATA、SCSI、NVMe)
  • 文件系统模块(ext4、xfs、btrfs)
  • LVM、RAID、加密卷等工具

其作用是在真正的根文件系统挂载前,加载必需的驱动,确保内核能够访问真实的根文件系统。

5. systemd(PID 1)

  • 挂载真正的根文件系统(/)
  • 启动所有系统服务(并行启动,加快速度)
  • 进入默认的运行目标(target)
1.3 启动流程中的关键文件
文件/目录Rocky 10Ubuntu 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 核心参数
参数含义示例
GRUB_TIMEOUT 启动菜单等待时间(秒) 5(5秒),-1(无限等待)
GRUB_DEFAULT 默认启动项(0 表示第一个) 0(第一个),saved(记住上次选择)
GRUB_CMDLINE_LINUX 内核启动参数 rhgb quiet(图形启动+减少日志)

常用内核启动参数:

参数作用适用场景
rhgb Red Hat Graphical Boot(图形化启动,显示进度条) RHEL 默认
quiet 减少内核启动日志输出(静默模式) 生产环境,减少干扰
splash Ubuntu 启动画面 Ubuntu 默认
2.3 修改 GRUB 配置(实战案例)

案例一:调整启动菜单等待时间

场景:服务器开机时 GRUB 菜单等待时间太短(5 秒),来不及选择其他内核版本,需要调整为 30 秒。

Rocky 10:

# 1. 查看当前配置
cat /etc/default/grub | grep TIMEOUT

输出示例:

GRUB_TIMEOUT=5

# 2. 修改等待时间为 30 秒
vim /etc/default/grub

将 GRUB_TIMEOUT=5 改为:

GRUB_TIMEOUT=30

# 3. 重新生成 GRUB 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

输出示例:

Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done

# 4. 重启系统
reboot

Ubuntu 26.04:

# 1. 查看当前配置
cat /etc/default/grub | grep TIMEOUT

输出示例:

GRUB_TIMEOUT=5

# 2. 修改等待时间为 30 秒
sudo vim /etc/default/grub

将 GRUB_TIMEOUT=5 改为:

GRUB_TIMEOUT=30

# 3. 重新生成 GRUB 配置文件
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. 重启系统
sudo reboot

💡 提示:GRUB_TIMEOUT=-1 表示无限等待,直到用户手动选择。

💡 提示 2:新版 GRUB 2.04+ 引入了 GRUB_TIMEOUT_STYLE 参数,默认值为 hidden,表示启动时不显示菜单,按 ESC 键才会显示,倒计时结束后直接启动默认系统。

案例二:添加内核启动参数(禁用图形启动)

场景:系统启动时卡在图形进度条界面,看不到详细报错信息,需要去掉 rhgb quiet 参数显示详细启动日志,便于排查问题。

Rocky 10:

# 1. 查看当前内核参数
cat /etc/default/grub | grep CMDLINE_LINUX

输出示例:

GRUB_CMDLINE_LINUX="rhgb quiet"

# 2. 删除 rhgb quiet(显示详细启动日志)
vim /etc/default/grub

将:

GRUB_CMDLINE_LINUX="rhgb quiet"

改为:

GRUB_CMDLINE_LINUX=""

# 3. 重新生成 GRUB 配置
grub2-mkconfig -o /boot/grub2/grub.cfg

# 4. 重启系统
reboot

Ubuntu 26.04:

# 1. 查看当前内核参数
cat /etc/default/grub | grep CMDLINE_LINUX

输出示例:

GRUB_CMDLINE_LINUX="quiet splash"

# 2. 删除 quiet splash(显示详细启动日志)
sudo vim /etc/default/grub

将:

GRUB_CMDLINE_LINUX="quiet splash"

改为:

GRUB_CMDLINE_LINUX=""

# 3. 重新生成 GRUB 配置
sudo update-grub

# 4. 重启系统
sudo reboot

2.4 修改 GRUB 配置流程总结
操作Rocky 10Ubuntu 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 多用户模式(Multi-user) 多用户模式,不启动网络服务(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 对比
对比项SysVinitsystemd
启动方式 顺序启动(串行) 并行启动
启动速度
依赖管理 手动设置依赖顺序 自动解析依赖关系
配置复杂度 简单但僵化 灵活但学习曲线陡峭
当前状态 已被取代 主流(RHEL 7+/Ubuntu 15.04+)
3.4 查看和切换运行级别/target

查看当前 target:

systemctl get-default

输出示例:

multi-user.target

# 或查看链接
ls -l /etc/systemd/system/default.target

切换 target(临时):

# 切换到救援模式
systemctl rescue

# 切换到紧急模式
systemctl emergency

# 重启系统
systemctl reboot

# 关机
systemctl poweroff

设置默认 target(永久):

# 设置为命令行模式
systemctl set-default multi-user.target

# 设置为图形界面模式
systemctl set-default graphical.target

3.5 查看 target 的依赖关系

# 查看 multi-user.target 依赖的服务
systemctl list-dependencies multi-user.target

# 查看 graphical.target 依赖的服务
systemctl list-dependencies graphical.target

四、单用户模式与救援模式

4.1 什么是单用户模式?

单用户模式是一种维护模式,用于:

  • 重置 root 密码(忘记 root 密码时)
  • 修复文件系统错误
  • 排查启动故障
  • 移除损坏的软件包
4.2 进入单用户模式(通过 GRUB)

Rocky 10:

# 1. 重启系统,在 GRUB 菜单中按 e 键编辑启动项
# 2. 找到 linux 开头的行(内核启动参数行)
# 3. 在行末添加 rd.break(中断启动进入 initramfs)
# 4. 按 Ctrl+x 启动

进入后:

# 根文件系统挂载在 /sysroot,需要重新挂载为读写
mount -o remount,rw /sysroot
chroot /sysroot

# 执行维护操作…

exit
reboot

Ubuntu 26.04:

# 1. 重启系统,在 GRUB 菜单中按 e 键编辑启动项
# 2. 找到 linux 开头的行(内核启动参数行)
# 3. 在行末添加 single 或 1
# 4. 按 Ctrl+x 启动

4.3 重置 root 密码(实战场景)

方法一:使用 rd.break(Rocky 10)

# 1. 在 GRUB 界面按 e 键编辑
# 2. 在 linux 开头的行末尾添加 rd.break
# 3. 按 Ctrl+x 启动

mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel # SELinux 重新标记(Rocky 需要)
exit
reboot

方法二:使用 single 参数(Ubuntu 26.04 / 通用)

# 1. 在 GRUB 界面按 e 键编辑
# 2. 在 linux 开头的行末尾添加 single
# 3. 按 Ctrl+x 启动

mount -o remount,rw /
passwd root
reboot

4.4 rescue.target vs emergency.target
对比项rescue.targetemergency.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 查看启动日志

# 查看本次启动日志
journalctl -b

# 查看上次启动的日志(排查重启原因)
journalctl -b -1

# 查看启动过程中失败的服务
systemctl –failed

# 查看特定服务的启动状态
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菜单 黑屏/卡死/服务失败
│ │
▼ ▼
检查GRUB配置 进入单用户模式
尝试旧内核启动 查看 journalctl -b
查看失败服务 systemctl –failed
修复完成 → reboot

六、Rocky 10 vs Ubuntu 26.04 启动流程差异

对比项Rocky 10Ubuntu 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

七、结语

恭喜你!😊 到这里,你已经完成了 Linux 运维第五章(5-1)的全部学习内容。

今天我们系统学习了:

  • Linux 启动流程全景:BIOS/UEFI → GRUB2 → Kernel → initramfs → systemd
  • GRUB2 引导配置:/etc/default/grub 参数、grub2-mkconfig / update-grub
  • 运行级别与 systemd target:SysVinit 运行级别与 systemd target 的映射关系
  • 单用户模式与救援模式:rd.break、single、rescue.target、emergency.target
  • 重置 root 密码:通过单用户模式修改密码
  • 启动故障排查:journalctl -b、systemctl –failed
  • Rocky vs Ubuntu 启动差异:配置文件位置、单用户进入方式

理解了 Linux 启动流程,你就掌握了系统故障排查的"第一性原理"。当系统无法启动时,你不再束手无策,而是能有条不紊地定位和解决问题。

如果在学习过程中遇到任何问题,欢迎在评论区留言讨论!也别忘了点赞收藏,方便以后查阅~

附录:核心知识点速查表

你想干什么敲什么命令
查看当前 target systemctl get-default
设置默认 target(命令行) systemctl set-default multi-user.target
设置默认 target(图形) systemctl set-default graphical.target
查看 target 依赖 systemctl list-dependencies multi-user.target
查看本次启动日志 journalctl -b
查看上次启动日志 journalctl -b -1
查看失败的服务 systemctl –failed
重启系统 systemctl reboot
关机 systemctl poweroff
修改 GRUB 配置(Rocky) grub2-mkconfig -o /boot/grub2/grub.cfg
修改 GRUB 配置(Ubuntu) update-grub

附录:运行级别与 target 对照表

SysVinit 运行级别systemd target说明
0 poweroff.target 关机
1 rescue.target 单用户/救援模式
2 multi-user.target 多用户模式(无网络)
3 multi-user.target 多用户命令行模式
4 multi-user.target 未使用
5 graphical.target 图形界面模式
6 reboot.target 重启

附录:GRUB 启动参数速查

参数作用
rhgb 图形化启动(RHEL)
quiet 减少启动日志
splash 启动画面(Ubuntu)
single 或 1 单用户模式
rd.break initramfs 阶段中断(RHEL)
systemd.unit=rescue.target 救援模式
systemd.unit=emergency.target 紧急模式
init=/bin/bash 直接启动 bash

附录:Rocky vs Ubuntu 快速对照表

操作Rocky 10Ubuntu 26.04
生成 GRUB 配置 grub2-mkconfig -o /boot/grub2/grub.cfg update-grub
GRUB 配置文件 /boot/grub2/grub.cfg /boot/grub/grub.cfg
单用户模式入口 rd.break single
默认 target multi-user.target graphical.target
重置密码后 SELinux touch /.autorelabel 不需要
赞(0)
未经允许不得转载:171主机测评 » Linux运维入门第五章(5-1):Linux启动流程与运行级别——从开机到登录,一篇掌握!
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址