# [搬运] Linux 启动流程


> [!IMPORTANT]
> 本文整理的所有内容都来自 YouTube 频道“Bit Byte Talks”发布的视频《Linux boot process Explained - Animated》。
> Link: [Linux boot process Explained - Animated](https://www.youtube.com/watch?v=lLg0dp9Pic8)

---

# Linux 启动流程

你按下过 Linux 机器的电源键，然后等着吗？屏幕闪烁，滚过一些文字，然后“砰”的一声，桌面出现了。那几秒钟里究竟发生了什么？本文从按下电源键的那一刻，一路讲到眼前这个漂亮的桌面。

## BIOS/UEFI 与 POST

最开始，CPU 醒了过来——但它还不知道该做什么。它不认识 Linux，也不认识你的硬盘，它只知道一件事：去内存中某个特定地址取第一批指令。而这些指令来自主板上的一枚特殊芯片，叫 BIOS；在现代系统上则是它更酷的表亲 UEFI。

BIOS 全称 Basic Input Output System（基本输入输出系统），自个人计算早期就存在。你可以把它想成做晨间检查的人：一旦电流通过主板，BIOS 就醒来，运行一个叫 POST（Power On Self Test，加电自检）的测试——检查 RAM 是否正常、CPU 是否工作、有没有键盘、显示器是否连接。如果一切通过，BIOS 就点头放行，说“好，去找点能启动的东西”；如果失败，你可能会听到蜂鸣码或看到错误信息。BIOS 就是电脑在做其他任何事之前的健康检查。

现代系统用 UEFI 取代了老式 BIOS。UEFI 全称 Unified Extensible Firmware Interface（统一可扩展固件接口），像打了强心剂的 BIOS：有图形界面、支持更大的硬盘、启动更快，还加入了 Secure Boot 之类的安全特性。如果 BIOS 是纸质的旧式清单，UEFI 就是带触摸屏的数字平板。两者做的是同一件根本的事——初始化硬件、找到从哪里启动，只是 UEFI 的方式强大灵活得多。

## 寻找引导程序（MBR / EFI）

POST 之后，BIOS 或 UEFI 需要找到操作系统。它会检视启动设备列表：也许你的 SSD、U 盘，或者网络设备。在传统 BIOS 系统上，它读取存储设备的头 512 字节——这片极小区域叫 MBR（Master Boot Record，主引导记录），就像书前面的索引，只够说明“真正的启动内容在那边”。而在 UEFI 系统上，它会寻找一个特殊的 EFI 分区。无论哪种方式，目标都一样：找到引导程序（bootloader）。

## GRUB

在多数 Linux 系统上，引导程序叫 GRUB（Grand Unified Bootloader，大一统引导程序）。就是你开机时见过的那个熟悉界面——一个菜单，列着 Ubuntu、Advanced options，双系统时还有 Windows Boot Manager。

GRUB 的全部职责，就是把 Linux 内核加载进内存。它知道内核在磁盘上的位置，加载它、把配置交给它，然后说“好，内核，你上”。GRUB 就像接力赛里传递接力棒的跑者，把棒子交给 Linux 本身。

## 内核初始化

接下来 Linux 内核登场，它是整个操作系统的心脏——管理 CPU 时间、内存、存储、网络，一切。

GRUB 加载内核后，内核开始搭建自己的营地。它先解压自身，因为内核为了节省空间是压缩存放的，就像一个会自动解压的 zip 文件。然后它初始化 CPU、检测硬件、建立内存管理。这就像一个新任经理走进办公室，立刻盘点手头可用的每一项资源。

内核早期会遇到一个棘手的问题：它需要访问硬盘来加载更多文件，但和硬盘对话的驱动可能就在硬盘上。鸡生蛋的问题，对吧？Linux 用一个叫 initramfs（initial RAM file system，初始 RAM 文件系统）的东西漂亮地解决它——一个住在 RAM 里的、临时的迷你 Linux。内核先加载这个小系统，用它加载存储设备的正确驱动，再挂载真正的文件系统。这就像钱包里带一把备用钥匙，去打开存放真正钥匙的那扇门。

## 挂载根文件系统

一旦内核用 initramfs 设置好硬件、加载了正确的驱动，就该挂载根文件系统了。这是你真正的 Linux 文件系统，位于 SSD 或硬盘上，装着你的所有文件、程序和系统数据。内核读取磁盘，找到根分区（通常标记为斜杠 `/`），把它挂载起来。挂载，就是把这个存储设备接上、让它可被访问。至此，Linux 可以访问运行整场演出所需的全部系统文件了。

## systemd（PID 1）

这里有一个非常重要的里程碑：内核启动第一个、也是唯一一个进程——进程号 1。在现代 Linux 上它叫 systemd，在更老的系统上叫 init，再早还有其他 init 系统。但今天，systemd 统治着大多数主流 Linux 发行版。

这个单一的进程 PID 1，是系统上所有其他进程的父进程。Linux 上运行的任何东西，要么由 systemd 启动，要么是 systemd 启动之物衍生出来的后代。它是最高的管理者，是把所有其他人唤醒的那一个。

那么 systemd 到底做什么？它读取一批叫 unit 文件的配置文件，这些文件描述服务、挂载、套接字和 target。systemd 里的 target 就像一个里程碑式的目标，例如到达 multi-user.target，意味着所有基础服务都在运行、多个用户可以登录。

systemd 并行启动服务，而不是一个一个来，这是现代 Linux 启动如此之快的原因之一。网络、日志、音频、蓝牙，systemd 同时把它们拉起来，同时检查依赖，确保没有任何东西先于它所需要的前提启动。

## 关键服务

systemd 拉起的关键服务里有几个值得一说。

首先是 udev，设备管理器：它检测连接到你系统的所有硬件设备——U 盘、显卡、键盘，并为每一个加载正确的驱动。

然后是网络管理器，它负责确定你的 IP 地址、连接 Wi-Fi 或建立有线连接。

还有日志守护进程 journald，它记录下发生的一切，像系统的一部黑匣子记录仪。

这些服务几乎同时启动，省下宝贵的启动时间。

## target 检查点

systemd 逐个走完它的 target，你可以把它们想成比赛中的检查点。先是 basic.target——核心系统在运行；然后是 multi-user.target——所有服务就绪，系统可供多用户通过命令行使用；最后，如果你跑的是桌面，就奔向 graphical.target。这是启动显示服务器的检查点，显示服务器要么是经典的 X11，要么是更新的 Wayland 合成器。显示服务器让你的 GPU 与屏幕对话、显示图形窗口，没有它，你就只能对着一个文本终端。

## 显示管理器与桌面

有了显示服务器，下一块拼图是显示管理器，有时也叫登录管理器。这是你在桌面加载前看到的图形登录界面。在 Ubuntu 上你会看到 GDM（GNOME Display Manager），其他发行版上可能是 LightDM、SDDM 等。

显示管理器的职责简单却重要：认证你。它接收你的用户名和密码，对照系统的用户数据库验证，通过后就启动你的桌面会话。把它想成桌面环境前门的保安。你输入密码、回车，桌面环境就启动了。

什么是桌面环境？它是你交互的整个图形层：任务栏、文件管理器、窗口装饰、系统设置、应用启动器。在 Ubuntu 上是 GNOME，在 Linux Mint 上是 Cinnamon，在 KDE 系发行版上是 Plasma。每个桌面环境都有自己的一套组件需要加载——窗口管理器、负责视觉特效的合成器、面板、通知系统，所有这些都在你登录时启动。

## D-Bus 与个人会话

在幕后，随着桌面加载，一个叫 D-Bus 的关键服务正在运行。D-Bus 是消息总线系统，让不同进程互相通信。当你插入 U 盘，udev 检测到它，通过 D-Bus 发一条消息，你的文件管理器就弹出对话框问你想做什么；当你调节音量，音频系统通过 D-Bus 发消息来更新界面。它是 Linux 桌面的神经系统，悄悄地在各个组件之间路由消息，让它们无缝协作。

桌面启动时同样加载的，还有你的个人会话。Linux 读取你的用户配置，比如 `.bashrc`、`.profile`，以及桌面环境里设置的自启动应用——你的聊天客户端、剪贴板管理器，也许还有个系统监视器。壁纸被应用，键盘快捷键被配置，主题被加载，你做的所有个性化设置都在此刻生效。这是你的 Linux 系统在穿上你的衣服，准备专门为你服务，而不只是为随便什么人。

## 全链路回顾

从按下电源键到可用的桌面，整条链条是这样的：BIOS/UEFI 运行 POST、找到引导程序；GRUB 加载内核；内核初始化硬件；initramfs 加载驱动；根文件系统挂载；systemd 启动，服务并行拉起；显示服务器启动；显示管理器显示登录界面；你完成认证；桌面环境加载。每一步都像编排精密的接力赛，逐棒交接。整个过程在现代硬件上通常需要 10 到 30 秒。

## 自己动手

有一件很酷的事，你可以在自己的 Linux 上试试。打开终端，输入：

```
systemd-analyze
```

这条命令会准确告诉你启动的每个阶段花了多久。你会看到固件时间、引导程序时间、内核时间和用户空间时间。再输入：

```
systemd-analyze blame
```

你会得到一份按启动耗时排序的所有服务列表。Linux 爱好者就是这样从启动时间里一点点抠出几秒的——找出慢服务，禁用不需要的。这就像为整个启动过程准备了一份性能报告。

Linux 之所以美，是因为整个过程透明且可定制：你可以换引导程序、换 init 系统、换桌面环境，选择权在你。这就是 Linux 哲学——开放、可理解、可折腾。下次按下电源键时，你会清楚地知道那几秒钟里究竟发生了什么。

