文章目录
- 第一阶段:固件初始化 (BIOS/UEFI)
- 第二阶段:引导加载程序 (Boot Loader)
- 第三阶段:内核初始化
- 第四阶段:用户空间初始化 (由 init/systemd 主导)
- 故障排查
- 总结

第一阶段:固件初始化 (BIOS/UEFI)
当你按下电源键,CPU从主板上预定义的地址开始执行代码,这个代码就是固件(Firmware)。
核心任务:
- POST 上电自检:检查关键硬件(CPU、内存、显卡、键盘)是否正常工作。听到的"滴"声就是POST码提示。
- 初始化硬件:枚举和初始化总线、磁盘控制器等设备。
- 确定引导设备:按照预设顺序(如:U盘->硬盘->网络)查找可引导的设备。
- 读取并执行主引导记录:对于传统 BIOS,它会读取硬盘的第一个扇区(512字节),即 MBR,并执行其中的第一阶段引导加载程序。对于现代
UEFI,它直接从硬盘上独立的 FAT 格式 ESP 分区 中加载 .efi 应用程序(如 bootx64.efi),这更快速、更安全。
第二阶段:引导加载程序 (Boot Loader)
此阶段的任务是定位并加载操作系统内核。
以经典的 GRUB2 为例:
- MBR 中的代码(第一阶段)非常小(仅446字节),其作用只是加载位于 MBR 之后、磁盘第一个分区之前 的 GRUB
核心镜像(core.img,即第1.5阶段)。 - GRUB 核心镜像 包含了必要的文件系统驱动,从而能读取 /boot/grub 目录下的模块和配置文件(grub.cfg)。
- GRUB 第二阶段 会解析 grub.cfg,在屏幕上显示引导菜单,让你可以选择不同的内核或操作系统。
- 选择后,GRUB 会将选定的 Linux
内核(vmlinuz-xxx)和初始内存磁盘镜像(initramfs-xxx.img)加载到内存中,然后将控制权交给内核。
initramfs 的关键作用:它是一个临时的根文件系统,包含了内核启动初期必需的驱动(如真正的磁盘驱动、LVM、加密模块)和工具。内核用它来挂载真实的根文件系统。没有它,内核可能无法识别硬盘。
第三阶段:内核初始化
内核被加载到内存并取得控制权后,开始"自举"。
- 解压与自解压:内核通常是压缩的,先进行自解压。
- 初始化核心子系统:依次初始化调度器、内存管理、中断处理,并最终启动空闲进程(swapper 或 idle)。
- 探测硬件与加载驱动:内核基于从固件获取的信息和 initramfs 中的模块,探测硬件并加载驱动。
- 挂载根文件系统:内核使用 initramfs 中的工具和驱动,挂载真正的根文件系统(/)。之后,它会卸载 initramfs
并释放其内存。 - 启动第一个用户空间进程:内核从根文件系统上寻找并执行 第一个用户空间进程。对于绝大多数现代Linux系统,这就是
systemd(其PID为1)。至此,内核引导完成,重心转向用户空间。
第四阶段:用户空间初始化 (由 init/systemd 主导)
systemd(或传统的 sysvinit)作为所有进程的父进程,负责启动整个用户空间环境。
-
初始化基本系统:systemd 首先执行 default.target 所指向的一系列基础单元。
-
解析运行级别/目标:传统的 sysvinit 会读取 /etc/inittab
确定运行级别(如3为多用户文本,5为图形)。systemd 则有对应的 multi-user.target 或
graphical.target。
-
执行系统初始化脚本:
sysvinit:顺序执行 /etc/rc.d/rcX.d/ (X为运行级别)目录下以 S 开头的启动脚本。
systemd:并行启动各个 .service 单元,效率更高。
-
启动关键服务:依次启动文件系统挂载、网络配置、日志服务、计划任务等。
-
启动图形界面:如果目标为图形界面,则会启动 显示管理器(如 gdm、lightdm),显示登录窗口。
-
用户登录:用户输入凭证后,显示管理器启动桌面环境会话(如GNOME、KDE)或窗口管理器。
故障排查
了解引导过程有助于定位启动失败的问题:
- 查看日志:使用 journalctl -b 或查看 /var/log/boot.log。
- GRUB 阶段失败:通常与 MBR 损坏、/boot 分区丢失或 grub.cfg 错误有关。可使用 Live CD 修复。
- 内核 panic:常见于驱动问题、根文件系统挂载失败。观察 initramfs 是否包含正确驱动。
- systemd 阶段失败:使用 systemctl --failed 查看失败的服务。
总结
这是一个标准流程,具体的发行版(如Ubuntu、CentOS)或初始化系统(如systemd、upstart)会有细微差别。