Debian 系统启动流程详解(从按电源键到登录提示符)

当你按下电源键的那一刻,Debian 系统其实还没有开始运行。整个启动过程是一个严格的分阶段接力,每一棒都必须顺利交接,否则系统就会卡在某个阶段(黑屏、grub> 提示符、emergency mode 等)。

Debian 13 默认使用 GRUB2(UEFI 或 Legacy 模式)作为引导加载器 + systemd 作为 init 系统。下面按时间顺序拆解每个阶段的核心逻辑和关键点。

阶段 1:固件阶段(Firmware → BIOS 或 UEFI)

  • 电源接通 → 主板上的固件(Firmware)首先获得 CPU 执行权。
  • UEFI(现代主流)或 BIOS(老机器)执行 POST(Power-On Self-Test):检查 CPU、内存、显卡、主板等硬件基本可用性。
  • 固件扫描存储设备,寻找可引导介质(通常是 EFI 系统分区 ESP 或 MBR)。
  • 找到引导记录后,把控制权交给引导加载器(Bootloader)。

关键认知:这一阶段完全不涉及 Linux 或 Debian,一切由主板厂商决定。Debian 只是“被动等待被加载”。

阶段 2:引导加载器阶段(Bootloader → GRUB2)

Debian 默认使用 GRUB2(Grand Unified Bootloader)。

  • GRUB 第一阶段(stage 1):很小的一段代码(通常在 MBR 或 EFI 分区的 bootx64.efi),负责加载 GRUB 的核心部分。
  • GRUB 核心加载后,读取配置文件:/boot/grub/grub.cfg(由 update-grub 自动生成)。
  • 显示引导菜单(如果你有多个内核或多系统),允许你选择内核版本、进入 rescue mode、编辑内核参数等。
  • 用户确认后,GRUB 加载两个关键文件:
    • vmlinuz-xxxx(压缩的 Linux 内核映像)
    • initrd.img-xxxxinitramfs-xxxx(初始 RAM 文件系统)

为什么需要 initramfs? 现代内核模块化极强(驱动、文件系统、LVM、加密等),但内核本身不可能内置所有驱动。initramfs 是一个小型临时根文件系统,包含启动所需的最小模块和脚本,帮助内核“找到真正的根分区”。

Debian 特色:GRUB 配置高度自动化,/etc/default/grub + update-grub 就能生成 grub.cfg。新手最常踩的坑是手动改了 grub.cfg,却被下次 update-grub 覆盖。

阶段 3:内核启动阶段(Kernel + initramfs)

  • 内核解压并加载到内存。
  • 内核使用 initramfs 作为临时根(/),执行里面的 init 脚本(通常是 /init)。
  • initramfs 里的脚本主要做这些事:
    • 加载必要的内核模块(存储控制器、文件系统、RAID、LUKS 加密等)
    • 挂载真实的根文件系统(/)
    • 如果有加密盘,提示输入密码
    • 切换根(switch_root)到真实 /,丢弃 initramfs
  • 内核完成硬件初始化(CPU、内存、中断、时钟等),然后启动第一个用户空间进程:systemd(PID 1)。

关键认知:内核阶段是“从无到有”的过程,initramfs 相当于“助产士”,帮内核接生出完整的根文件系统。内核启动失败常见表现:kernel panic、无法挂载根、initramfs shell。

阶段 4:用户空间初始化(systemd 接管)

systemd 作为 PID 1,负责整个用户空间的启动。

  • systemd 读取目标(target)配置,默认是 multi-user.target(服务器)或 graphical.target(桌面)。
  • 按依赖顺序并行启动单元(unit):
    • 挂载所有在 /etc/fstab 里定义的文件系统
    • 启动 udev(设备管理)
    • 加载模块、设置主机名、网络
    • 启动 cron、ssh、数据库等服务
    • 如果是桌面,启动 display-manager(如 gdm、sddm、lightdm)
  • 所有服务启动完成后,systemd 进入 idle 状态,显示登录提示符(console)或图形登录界面。

systemd 的哲学:并行启动 + 依赖声明 + socket activation,大幅缩短启动时间(相比传统 SysV init 的串行启动)。

阶段 5:用户登录

  • console:getty 进程等待输入用户名/密码 → 启动 shell(bash/zsh 等)
  • 图形:display manager 启动 X/Wayland → 显示登录界面 → 启动桌面会话(plasma、gnome、xfce 等)

Debian 启动流程总结图(文字版)

text
电源键按下
  ↓
Firmware (UEFI/BIOS) → POST → 找引导记录
  ↓
GRUB2 加载 → 显示菜单 → 读取 grub.cfg
  ↓
加载 kernel (vmlinuz) + initramfs
  ↓
内核启动 → 执行 initramfs 中的 /init
  ↓
加载模块 → 挂载真实根 → switch_root
  ↓
systemd (PID 1) 启动 → 按 target 并行激活服务
  ↓
文件系统、网络、服务就绪
  ↓
登录提示符 / 图形桌面

新手常见卡点与认知提示

  • 卡在 grub> → GRUB 配置文件损坏或 /boot 分区找不到 → 用 live USB 修复
  • 卡在 initramfs shell → 根分区找不到、加密没解开、文件系统损坏
  • emergency mode → systemd 无法挂载根或关键文件系统 → journalctl -xb 查看原因
  • 启动很慢 → 检查 systemd-analyze blame / critical-chain,看哪个单元最耗时

理解启动流程后,你会发现:Debian 的启动其实非常模块化、可诊断。每个阶段都有清晰的交接点,出问题时基本都能定位到具体环节。

THE END