Linux 系统启动过程解析

摘要:本文深入解析现代 Linux 发行版(基于 GRUB2 + systemd)从按下电源键到登录界面的完整启动流程,涵盖 BIOS/UEFI、引导加载程序、内核初始化及 systemd 启动四个核心阶段。

一、启动流程总览

现代 Linux 系统的启动过程可分为四个连贯阶段,各阶段环环相扣,任何一环出错都会导致启动失败。


二、第一阶段:BIOS/UEFI 初始化与 POST 自检

2.1 触发条件

启动流程由以下两种操作触发:

  • 冷启动:用户按下机箱电源按钮(系统处于关机状态)
  • 热启动 :通过 GUI 界面或 reboot 命令重新启动系统

2.2 POST(Power-On Self Test)硬件自检

系统通电后,BIOS(Basic Input/Output System)或 UEFI(Unified Extensible Firmware Interface)固件首先接管控制权,执行全面的硬件完整性检查。

POST 检测的核心硬件包括

检测项目 说明
CPU 处理器状态及基本功能验证
RAM 内存模块存在性与读写测试
HDD/SSD 硬盘/固态硬盘连接状态与可访问性
键盘/USB 控制器 输入设备响应检测
显卡 显示输出能力验证

自检结果处理

  • 硬件故障:屏幕显示错误信息(如 "Hard Disk Error"),或在严重故障(如内存缺失)时通过蜂鸣器发出告警音
  • 硬件正常 :自检通过,BIOS/UEFI 根据预设的 Boot Sequence(启动顺序) 查找可引导设备

2.3 定位引导程序

BIOS/UEFI 发现可引导设备后,读取该设备的启动扇区:

  • 传统 BIOS :读取磁盘第一个扇区的 MBR(Master Boot Record,主引导记录,512 字节)
  • UEFI 模式 :读取 GPT(GUID Partition Table) 分区表中的 EFI 系统分区

随后从中定位并加载 Bootloader(引导加载程序,如 GRUB2)


三、第二阶段:GRUB2 引导加载程序

3.1 引导程序演进

Linux 生态中主要出现过三代引导程序:

引导程序 状态 说明
LILO 已淘汰 Linux Loader,早期简单引导程序
GRUB (Legacy) 已淘汰 Grand Unified Bootloader 第一代
GRUB2 当前主流 现代发行版标准配置,功能完善

3.2 GRUB2 核心功能

GRUB2 被加载到主内存(RAM)后,提供两大核心能力:

1. 操作系统/内核选择菜单

  • 列出系统中已安装的多个操作系统(双系统场景)
  • 展示不同版本的 Linux 内核(系统升级后会保留历史内核)
  • 支持通过键盘快捷键(如 e 键)临时编辑内核启动参数

2. 加载内核与临时文件系统
选择内核版本

用户选定启动项后,GRUB2 执行以下操作:

  1. 将压缩的 Linux 内核镜像加载到内存并解压
  2. 加载 initrd(Initial RAM Disk)initramfs(Initial RAM Filesystem)
    • 两者均为临时的内存文件系统
    • initramfs 是 initrd 的现代化继任者,效率更高
    • 包含启动必需的驱动模块和工具(如磁盘控制器驱动、文件系统驱动)
  3. 执行 linuxrc 脚本,探测硬盘及大容量存储设备,加载相应内核模块

配置文件路径/boot/grub2/grub.cfg(由 grub2-mkconfig 工具自动生成,不建议手动编辑)


四、第三阶段:内核初始化

内核初始化过程

4.1 内核解压与接管

内核是 Linux 系统的核心枢纽,负责硬件资源管理与进程调度。GRUB2 加载内核后:

  1. 内核从压缩状态(通常为 bzImage 格式)自解压
  2. 初始化内存管理、进程调度等核心子系统

4.2 挂载根文件系统与启动 init

内核阶段的关键任务链条如下:

复制代码
┌─────────────────┐     ┌─────────────────────┐     ┌──────────────────┐
│  基于 initrd/   │ --> │  挂载真实根文件系统   │ --> │  启动 init 进程   │
│  initramfs 中的 │     │  (挂载点 "/" )        │     │  (PID = 1)       │
│  linuxrc 探测结果│     │                       │     │                  │
└─────────────────┘     └─────────────────────┘     └──────────────────┘

关键概念说明

  • 根文件系统(/):用户可见的所有目录与文件的顶层挂载点,是系统运行的基础
  • init 进程 :内核启动的第一个用户空间进程,进程标识符固定为 PID 1
  • 派生关系:系统中所有其他守护进程均由 init 进程直接或间接派生

4.3 补充:/etc/fstab 与分区挂载

init 进程启动后,会根据 /etc/fstab 文件配置,自动挂载系统中定义的其他磁盘分区(如 /home/var 等)。


五、第四阶段:systemd 系统初始化

5.1 systemd 的定位

systemd 是现代 Linux 发行版中 SysVinit 的替代方案,作为 所有 Linux 进程的父进程(PID 1),承担以下职责:

  • 管理系统服务的启动、停止与依赖关系
  • 控制文件系统挂载点
  • 设置系统运行目标(Target)

5.2 运行目标(Target)详解

systemd 使用 target 概念替代传统 SysVinit 的 runlevel(运行级别) ,通过 /etc/systemd/system/default.target 文件定义系统默认启动状态。

systemd Target 对应旧 Runlevel 功能描述
poweroff.target 0 关闭系统电源
rescue.target 1 救援模式(单用户 Shell,最小化系统)
multi-user.target 2, 3, 4 多用户文本模式(无图形界面,服务器默认)
graphical.target 5 图形化多用户模式(桌面工作站默认,含网络服务)
reboot.target 6 重新启动系统

5.3 常用管理命令

bash 复制代码
# 查看当前系统目标
systemctl get-default

# 切换运行目标(示例:切换到多用户文本模式)
sudo systemctl isolate multi-user.target

# 设置默认启动目标(永久生效)
sudo systemctl set-default graphical.target

# 传统 init 命令兼容(仍需 sudo 权限)
sudo init 3      # 切换到文本模式
sudo init 6      # 重启系统
sudo init 0      # 关机

5.4 启动完成

systemd 完成以下工作后,启动流程结束:

  1. 按依赖关系启动所有必要的守护进程(网络服务、日志服务、显示管理器等)
  2. 达到预设的 target 状态
  3. 系统呈现登录界面(图形化桌面或命令行提示符),等待用户认证

六、全流程回顾

复制代码
  用户操作              固件/软件层              核心动作
┌──────────┐         ┌─────────────┐         ┌────────────────────┐
│ 按下电源  │  ---->  │  BIOS/UEFI  │  ---->  │ POST 硬件自检       │
└──────────┘         └─────────────┘         │ 定位启动设备        │
                                              └─────────┬──────────┘
                                                        │
                                              ┌─────────▼──────────┐
                                              │  读取 MBR/GPT        │
                                              │  加载 GRUB2          │
                                              └─────────┬──────────┘
                                                        │
                                              ┌─────────▼──────────┐
                                              │  GRUB2 菜单          │
                                              │  加载内核 + initramfs │
                                              └─────────┬──────────┘
                                                        │
                                              ┌─────────▼──────────┐
                                              │  内核自解压          │
                                              │  挂载真实根文件系统   │
                                              │  启动 init (PID 1)   │
                                              └─────────┬──────────┘
                                                        │
                                              ┌─────────▼──────────┐
                                              │  systemd 接管        │
                                              │  启动守护进程        │
                                              │  进入 target 目标    │
                                              └─────────┬──────────┘
                                                        │
                                              ┌─────────▼──────────┐
                                              │  登录界面/Shell 提示符 │
                                              │  系统就绪            │
                                              └────────────────────┘

七、常见问题排查速查

故障现象 可能原因 排查阶段
开机黑屏无反应,风扇不转 电源故障或主板短路 第一阶段前
开机蜂鸣报警 内存条松动或损坏 POST 阶段
提示 "No bootable device" 硬盘故障或启动顺序错误 BIOS/UEFI 阶段
进入 GRUB Rescue 命令行 MBR 损坏或分区表错误 GRUB2 阶段
内核 Panic(内核恐慌) 根文件系统损坏或内核缺失 内核初始化阶段
启动卡在某一服务 systemd 服务依赖死锁 systemd 阶段

参考资料

  1. GRUB2 官方文档 - GNU GRUB Manual 2.12 - GNU 项目官方维护的 GRUB2 完整手册,涵盖安装配置与故障排查

  2. UEFI 规范 - Unified Extensible Firmware Interface Specification - UEFI 论坛发布的固件接口标准规范(当前版本 2.10)

  3. 《鸟哥的 Linux 私房菜》基础学习篇 - 台湾资深 Linux 教育者鸟哥编写的经典中文教程,第 19 章详细讲解开机流程与引导加载程序

版本说明:本文基于 GRUB2 + systemd 架构编写,适用于 RHEL/CentOS 7+、Ubuntu 15.04+、Debian 8+、Fedora 等现代发行版。传统 SysVinit 或 GRUB Legacy 系统的启动流程略有差异。

相关推荐
小此方2 分钟前
Re:Linux系统篇(五)指令篇 ·四:shell外壳程序及其工作原理
linux·运维·服务器
其实防守也摸鱼23 分钟前
sqlmap下载和安装保姆级教程(附安装包)
linux·运维·服务器·测试工具·渗透测试·攻防·护网行动
焦糖玛奇朵婷28 分钟前
解锁扭蛋机小程序的五大优势
java·大数据·服务器·前端·小程序
jingyu飞鸟1 小时前
Linux系统发送邮件,解决信誉等级低问题 docker compose修改启动一键使用
linux·运维·docker
Lumos_7771 小时前
Linux -- exec 进程替换
linux·运维·chrome
李白客1 小时前
国产数据库选型指南:从技术路线到实战要点
运维·数据库·数据库架构·迁移学习
数智化精益手记局1 小时前
人员排班管理软件的自动化功能解析:解决传统手工人员进行排班管理耗时长的难题
运维·数据结构·人工智能·信息可视化·自动化·制造·精益工程
jy41932171 小时前
VPS 网络质量怎么测?一篇讲清楚多节点 ping、tcping 和回程路由
运维
爱吃芹菜炒肉2 小时前
Chapter 16: Power Management
服务器·c语言·网络·tcp/ip·pcie
wicb91wJ62 小时前
Nginx反向代理与负载均衡配置详解
运维·nginx·负载均衡