Linux 系统从按下电源到出现登录提示符(或图形界面),中间经历了非常清晰且分层的启动过程。理解这个流程,能帮助你:
以下是 2025–2026 年主流 Linux 发行版(使用 systemd + GRUB2 / systemd-boot)的完整启动流程,按阶段拆解。
| 阶段 | 执行主体 | 主要任务 | 关键输出 / 可观察现象 |
|---|---|---|---|
| Power-On Self-Test (POST) | 主板固件(BIOS 或 UEFI) | 检查硬件(CPU、内存、显卡、存储等) | 主板蜂鸣声、LOGO画面、硬件错误提示 |
| 查找可引导设备 | BIOS / UEFI | 按 Boot Order 顺序找第一个可引导介质 | — |
| 读取引导记录 | — | 读取磁盘第一个扇区(MBR 512 字节)或 EFI 分区中的 .efi 文件 | 进入引导加载器 |
现代服务器与大多数新电脑都使用 UEFI 模式:
目前主流有两种引导加载器:
| 引导加载器 | 主要发行版支持 | 配置文件位置 | 配置文件格式 | 2026 年趋势 |
|---|---|---|---|---|
| GRUB2 | Ubuntu、Debian、Fedora、Rocky/Alma 等几乎全部 | /boot/grub/grub.cfg(自动生成) | grub 脚本语言 | 仍然占主导 |
| systemd-boot | Fedora Silverblue、Ubuntu Core、Arch(可选) | /boot/loader/entries/*.conf | 纯文本 .conf | 不可变系统越来越流行 |
GRUB2 典型启动流程:
内核被加载到内存后,第一件事是解压自己,然后挂载 initramfs(initial ram filesystem)作为根文件系统。
initramfs 的核心作用:
initramfs 常见卡住场景:
现代发行版多使用 dracut(Fedora/RHEL 系)或 mkinitcpio(Arch)生成 initramfs。
initramfs 完成任务后执行 switch_root,把控制权交给真实根分区里的 /sbin/init(符号链接到 systemd)。
systemd 成为 PID 1(所有进程之父),从此刻开始才是我们熟悉的“系统启动”。
systemd 把启动过程分为多个 target(类似旧 SysV 的 runlevel),主流流程如下:
| 阶段 / Target | 主要工作内容 | 可观察现象 / 日志关键词 | 常见卡住原因 |
|---|---|---|---|
| initrd → sysinit.target | 挂载 /sys、/proc、/dev、设置主机名、加载模块 | journalctl -b -u systemd-udevd | 设备驱动加载失败 |
| basic.target | 设置时间、日志、tmpfs 挂载、基本服务 | journalctl -b -u systemd-tmpfiles-setup | — |
| multi-user.target | 启动大多数系统服务(网络、ssh、cron、docker 等) | journalctl -b -u NetworkManager | 服务启动超时、依赖循环、配置文件错误 |
| graphical.target(桌面版) | 启动显示管理器(gdm、sddm、lightdm) | journalctl -b -u gdm | 显卡驱动问题、Wayland/Xorg 冲突 |
systemd 的启动顺序由单元文件(.service / .target / .mount 等)之间的 Wants、Requires、After、Before 关系决定。
systemd-analyze 系列命令是分析启动速度与瓶颈的神器:
电源 → 固件(BIOS/UEFI) → 引导加载器(GRUB / systemd-boot) → 内核 + initramfs(加载驱动、找根分区) → switch_root → 真实根文件系统 → systemd(PID 1)启动 → sysinit → basic → multi-user / graphical → 登录提示符 / 桌面
理解了这个流程,你就拥有了“系统启动时发生了什么”的完整地图,后续无论是修复引导、优化启动速度、分析卡死、制作自定义 initramfs,都会变得有迹可循。