拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

System Design 101 图解 Linux 启动流程:从 BIOS/UEFI 加电到用户登录的 8 个阶段

System Design 101 图解 Linux 启动流程:从 BIOS/UEFI 加电到用户登录的 8 个阶段
  • 后端
  • 文档
  • 教程

【免费下载链接】system-design-101

Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.

项目地址:https://gitcode.com/GitHub_Trending/sy/system-design-101
点击查看免费下载

几乎每一位软件工程师都用过 Linux,但只有少数人真正理解它的启动流程是如何运转的。本文以 system-design-101 仓库中的 linux-boot-process-explained.md 为核心骨架,将开机过程中的固件、引导加载器、内核、systemd 与用户态初始化拆解为 8 个阶段,并结合仓库内相关的 Linux 知识文档,帮助读者建立从硬件加电到登录界面出现的完整心智模型——无论是排查启动故障、阅读内核日志,还是备战系统设计面试,这套流程都是必须掌握的基础功。

整体脉络:一次启动就是一次"接力赛"

Linux 启动流程本质上是一条接力链:固件 → 引导加载器 → 内核 → 用户空间。每一环只负责把控制权交给下一环,自己并不完成全部工作。原文档用 8 个 Step 概括了这一过程:

阶段责任主体核心动作
Step 1BIOS/UEFI 固件从非易失性存储器加载并执行 POST 自检
Step 2BIOS/UEFI探测 CPU、内存、存储等连接设备
Step 3BIOS/UEFI选择启动设备(硬盘 / 网络 / CD ROM)
Step 4引导加载器(GRUB)弹出菜单,选择操作系统或内核
Step 5Linux 内核初始化完成,切换到用户空间,启动 systemd
Step 6systemd激活默认 target 及相关单元
Step 7启动脚本执行启动脚本并配置运行环境
Step 8系统呈现登录窗口,系统就绪

下面逐阶段展开,并补充每一步背后"为什么这样做"的原理。

Step 1:加电与 POST 自检——固件从非易失性存储器中醒来

按下电源键后,**BIOS(Basic Input/Output System,基本输入输出系统)或UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)**固件会从非易失性存储器(如主板上的 NOR Flash / SPI Flash)中被加载,并立即执行POST(Power On Self Test,加电自检)。

POST 的作用是快速验证 CPU、内存控制器、总线、显卡等核心硬件是否处于可工作状态。如果检测到致命故障(例如内存条未插好),系统通常会以蜂鸣声编码或屏幕错误信息的形式停机(halt),而不是继续引导。传统 BIOS 运行在 16 位实模式下,而现代 UEFI 运行在 32/64 位保护模式下,能访问更大的固件存储(如 FAT 分区中的 .efi 文件),这也是 UEFI 逐渐取代 BIOS 的原因之一。

Step 2:设备探测——盘点这台机器"有什么"

POST 通过之后,固件开始检测连接到系统的设备,包括:

  • CPU:读取型号、缓存与特性位,用于后续初始化;
  • RAM:探测内存容量、通道与 ECC 状态;
  • 存储:识别 SATA/NVMe 硬盘、SSD、U 盘;
  • 外设:键盘、鼠标、显卡、网卡等。

UEFI 在此阶段还会初始化其驱动栈(UEFI Driver),并可能通过 ACPI 表(高级配置与电源接口表)向操作系统描述硬件拓扑。这一步的结果会被记录在固件维护的设备列表中,供后续选择启动设备使用。

Step 3:选择启动设备——决定"从哪儿开始"

固件按照可配置的**启动顺序(Boot Order)**选择一个启动设备。原文档明确指出,这个设备可以是:

  • 硬盘(Hard Drive):最常见,从引导扇区或 EFI 系统分区启动;
  • 网络服务器(Network Server):即 PXE(Preboot eXecution Environment)网络引导,常用于无盘工作站、数据中心批量装机;
  • CD ROM:传统安装介质,现在也常被 U 盘取代。

在传统 BIOS 机器上,固件读取硬盘第一个扇区(MBR,主引导记录)或卷引导记录;在 UEFI 机器上,固件则直接扫描 EFI 系统分区(ESP,通常是 FAT32)中的启动项。进入启动顺序设置的常见方式是按 Del / F2 / F12 等按键——不同主板厂商的按键不同。

Step 4:引导加载器接管——GRUB 的菜单与多内核支持

选定启动设备后,BIOS/UEFI 运行引导加载器(Boot Loader)。原文档点名的GRUB(GRand Unified Bootloader)是最主流的实现(当前广泛使用 GRUB 2)。

GRUB 提供了一份菜单,让用户选择:

  • 启动哪个操作系统(多系统共存场景,如 Linux 与 Windows 双启动);
  • 启动哪个内核(同一发行版可安装多个版本内核,回退到旧内核是排障的常用手段);
  • 给内核传递什么启动参数(如single进入单用户维护模式、nomodeset禁用显卡驱动等)。

GRUB 加载内核映像(vmlinuz-*)与初始内存盘(initrd/initramfs)到内存后,把控制权交给内核。initramfs 中包含了挂载真实根文件系统(rootfs)所需的驱动程序与工具,是内核能够"找到根分区"的关键。

Step 5:内核就绪,切换到用户空间——systemd 成为 1 号进程

内核(Kernel)完成初始化(内存管理、调度器、驱动、挂载 initramfs 并切换到真正的根文件系统)之后,系统进入用户空间(User Space)。原文档明确指出:

内核将systemd启动为第一个用户空间进程,由它来管理进程与服务、探测剩余硬件、挂载文件系统并运行桌面环境。

这里有两个关键机制值得展开:

第一,进程编号(PID)的约定。systemd 作为第一个用户空间进程,获得PID 1。PID 1 是所有用户态进程的祖先,承担"收养孤儿进程"和"接收内核转交的信号"的职责——这正是 Linux 上 PID 1 进程被杀死会导致系统崩溃(内核 panic)的原因。

第二,systemd 的职责分工。相比传统 SysVinit 顺序执行脚本的方式,systemd 采用并行启动与按需激活,显著缩短启动时间。它负责:

  • 探测并初始化剩余硬件(配合 udev 设备管理);
  • 按/etc/fstab挂载文件系统(如/、/home、/tmp);
  • 启动各种守护进程(daemon):网络(NetworkManager/systemd-networkd)、日志(journald)、cron、SSH 等;
  • 运行显示管理器(Display Manager)进而启动桌面环境。

与本文配套,仓库中的 5-important-components-of-linux.md 介绍了 Linux 的系统、内存、进程、网络、存储五大核心组件,可作为理解内核职责的背景知识;linux-file-system-explained.md 则讲解了 Filesystem Hierarchy Standard(FHS),可帮助你理解 Step 5 中"挂载文件系统"的对象与布局。

Step 6:systemd 激活默认 target——启动的"终点状态"

原文档指出:

systemd 默认激活default.target单元,同时也会执行其他分析(依赖)单元。

这是理解 systemd 引导模型的核心概念。systemd 不再使用 SysVinit 的"运行级别(runlevel 0–6)",而是用target 单元表示一组状态的集合,并通过**单元依赖图(dependency graph)**组织:

  • default.target:通常符号链接到graphical.target(图形多用户)或multi-user.target(命令行多用户);
  • multi-user.target:非图形化的多用户运行环境,服务器场景最常见;
  • rescue.target与emergency.target:维护与紧急模式,用于系统修复;
  • reboot.target、poweroff.target:对应重启与关机。

systemd 会递归解析default.target依赖的所有单元(服务*.service、挂载*.mount、设备*.device、套接字*.socket等),在满足依赖顺序的同时最大化并行度。启动过程中可以随时用systemctl list-units、systemctl status、journalctl -b查看各单元的状态与日志,这也是排障"卡在启动哪一步"的核心手段。

Step 7:启动脚本与环境配置——把系统"调校"到可用状态

在 target 激活过程中,systemd 会执行一组启动脚本(startup scripts)并配置运行环境,包括但不限于:

  • 设置主机名、时区、locale 等基础系统属性;
  • 应用/etc/sysctl.conf中的内核参数;
  • 初始化安全策略(如 SELinux/AppArmor 标签加载);
  • 配置网络接口、防火墙规则与路由;
  • 启动用户会话管理相关的服务(如 dbus、logind)。

习惯上,管理员自定义的启动逻辑可以放在/etc/rc.local(传统方式,需显式启用),或者更推荐写成独立的 systemd service 单元并声明依赖关系。这一阶段完成后,系统服务已就绪,但还缺少"人"的接入。

Step 8:登录窗口——系统就绪的信号

最后一步,系统向用户呈现登录窗口(Login Window):

  • 图形环境:显示管理器(GDM / SDDM / LightDM 等)呈现图形登录界面,验证通过后启动桌面会话;
  • 纯命令行:终端上呈现login:提示符(由 getty / agetty 提供),通过 TTY 登录;
  • 远程登录:等待 SSH 服务接受连接。

用户认证通过后,PAM(可插拔认证模块)完成身份验证与会话初始化,用户得到 shell。至此,系统完全就绪——从按下电源键到可以交互,整条链路闭环。

总结:一条链路,三类故障排查入口

Linux 启动流程的 8 个阶段可以归结为三句核心结论:

  1. 硬件层(Step 1–3):固件负责自检、探测与选择启动设备,故障多表现为"无显示/蜂鸣/找不到启动介质";
  2. 内核层(Step 4–5):GRUB 加载内核与 initramfs,内核初始化后交出控制权,故障多表现为内核 panic 或挂载根文件系统失败;
  3. 用户空间层(Step 6–8):systemd 按依赖图激活 target、执行脚本、呈现登录界面,故障排查入口是systemctl与journalctl。

结合本仓库的 linux-boot-process-explained.md、5-important-components-of-linux.md 与 linux-file-system-explained.md,你可以把"启动流程"与"内核五大组件""文件系统标准"这三块知识串成完整的 Linux 基础体系——这也是系统设计面试中考察操作系统基本功时最常见的话题组合。

  • 后端
  • 文档
  • 教程

【免费下载链接】system-design-101

Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.

项目地址:https://gitcode.com/GitHub_Trending/sy/system-design-101
点击查看免费下载

相关推荐

上一篇:BabelDOC 快速上手:如何把英文 PDF 翻成中文并保留原版式
下一篇:音乐解锁终极指南:如何用Unlock Music Electron轻松解密所有加密音乐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表