< 返回

    Linux 系统启动流程新手理解指南

    2026-02-02 18:03 作者:技术部 阅读量:2

    Linux 系统从按下电源到出现登录提示符(或图形界面),中间经历了非常清晰且分层的启动过程。理解这个流程,能帮助你:

    • 知道系统“卡在哪里”时应该看哪部分日志
    • 明白 initramfs、GRUB、systemd 各自负责什么
    • 知道如何修复“开机黑屏”“进不了系统”“卡在某个服务”等常见问题

    以下是 2025–2026 年主流 Linux 发行版(使用 systemd + GRUB2 / systemd-boot)的完整启动流程,按阶段拆解。

    1. BIOS / UEFI → 固件阶段(开机瞬间)

     
     
    阶段 执行主体 主要任务 关键输出 / 可观察现象
    Power-On Self-Test (POST) 主板固件(BIOS 或 UEFI) 检查硬件(CPU、内存、显卡、存储等) 主板蜂鸣声、LOGO画面、硬件错误提示
    查找可引导设备 BIOS / UEFI 按 Boot Order 顺序找第一个可引导介质
    读取引导记录 读取磁盘第一个扇区(MBR 512 字节)或 EFI 分区中的 .efi 文件 进入引导加载器
     

    现代服务器与大多数新电脑都使用 UEFI 模式:

    • 启动分区是 FAT32 格式的 EFI System Partition(通常挂载在 /boot/efi)
    • 引导文件是 .efi 可执行文件(而非传统 MBR 的 446 字节引导代码)

    2. 引导加载器阶段(Bootloader)

    目前主流有两种引导加载器:

     
     
    引导加载器 主要发行版支持 配置文件位置 配置文件格式 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 典型启动流程

    1. 固件加载 /boot/grub/x86_64-efi/grubx64.efi(或 core.img)
    2. GRUB 读取 /boot/grub/grub.cfg
    3. 显示菜单(或直接倒计时)
    4. 用户选择(或默认)内核版本 + initramfs
    5. 加载内核(vmlinuz-x.x.x)与初始内存盘(initrd.img / initramfs-x.x.x.img)
    6. 把控制权交给内核(exec kernel)

    3. 内核解压 + initramfs 执行阶段

    内核被加载到内存后,第一件事是解压自己,然后挂载 initramfs(initial ram filesystem)作为根文件系统。

    initramfs 的核心作用:

    • 包含最精简的用户空间工具(busybox 或 dracut 生成的微型系统)
    • 加载必要的存储驱动(NVMe、RAID、LVM、加密 dm-crypt)
    • 挂载真实的根文件系统(/)
    • 切换根(switch_root)到真实根分区

    initramfs 常见卡住场景

    • 找不到根分区(UUID 写错、磁盘顺序变了)
    • LUKS 加密分区要密码但键盘驱动没加载
    • RAID 阵列组装失败
    • initramfs 里缺少文件系统驱动(btrfs、zfs、xfs 等)

    现代发行版多使用 dracut(Fedora/RHEL 系)或 mkinitcpio(Arch)生成 initramfs。

    4. 切换到真实根文件系统 → PID 1 启动

    initramfs 完成任务后执行 switch_root,把控制权交给真实根分区里的 /sbin/init(符号链接到 systemd)。

    systemd 成为 PID 1(所有进程之父),从此刻开始才是我们熟悉的“系统启动”。

    5. systemd 启动阶段(最重要、最可观测的部分)

    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 等)之间的 WantsRequiresAfterBefore 关系决定。

    systemd-analyze 系列命令是分析启动速度与瓶颈的神器:

    • systemd-analyze → 显示总启动时间
    • systemd-analyze blame → 列出每个单元耗时(最有用)
    • systemd-analyze critical-chain → 显示最长路径上的瓶颈
    • systemd-analyze plot > boot.svg → 生成启动时间线 SVG 图

    6. 启动完成标志

    • 出现登录提示符(console)或图形登录界面
    • systemd-journald 记录 "Reached target multi-user.target" 或 "graphical.target"
    • systemctl is-system-running 返回 running

    新手快速记忆版启动流程口诀

    电源 → 固件(BIOS/UEFI) → 引导加载器(GRUB / systemd-boot) → 内核 + initramfs(加载驱动、找根分区) → switch_root → 真实根文件系统 → systemd(PID 1)启动 → sysinit → basic → multi-user / graphical → 登录提示符 / 桌面

    常见卡住位置与排查口诀

    • 卡在 GRUB 菜单或 "loading initial ramdisk" → 看 /boot 分区是否损坏、内核文件是否存在
    • 卡在 initramfs(emergency mode) → 键盘输入 root 密码 → journalctl -xb、lsblk、cat /etc/fstab
    • 卡在某个服务启动([ OK ] Started xxx) → Ctrl+C 跳过或进 rescue mode → systemctl status xxx
    • 开机黑屏但能进 rescue → 改内核参数 rd.break=pre-mount / rd.shell(强制进 initramfs 调试)

     

    理解了这个流程,你就拥有了“系统启动时发生了什么”的完整地图,后续无论是修复引导、优化启动速度、分析卡死、制作自定义 initramfs,都会变得有迹可循。

    联系我们
    返回顶部