Linux系统启动是固件、引导程序、内核和用户空间服务层层接力的过程:BIOS/UEFI完成硬件自检与启动设备选择;GRUB加载内核与initramfs;内核初始化后通过initramfs挂载真实根文件系统;systemd作为PID 1启动服务树,最终呈现登录界面。

Linux系统启动不是一蹴而就的过程,而是由固件、引导程序、内核和用户空间服务层层接力完成的。整个流程环环相扣,任一环节出错都可能导致卡在黑屏、grub菜单、或登录界面之前。
BIOS/UEFI固件阶段:硬件自检与启动设备选择
加电后,CPU跳转到ROM中执行固件代码(BIOS或UEFI)。它先做POST(上电自检),检测CPU、内存、主板等关键硬件;再按启动顺序(Boot Order)查找可启动设备——如硬盘、UEFI分区中的EFI/boot/bootx64.efi文件。UEFI相比传统BIOS支持GPT分区、安全启动、更丰富的驱动加载能力,且不依赖MBR结构。
引导加载程序阶段:GRUB接管并加载内核
一旦选定启动设备,控制权交给引导程序。在传统BIOS+MBR模式下,MBR前446字节的Boot Loader(通常是GRUB第一阶段)被载入内存,读取分区表,定位/boot所在分区(例如(hd0,1)),再加载GRUB第二阶段(/boot/grub/core.img);该阶段解析/boot/grub/grub.cfg,显示菜单,并根据用户选择或默认项加载指定内核镜像(如vmlinuz-5.15.0-125-generic)和initramfs镜像(initrd.img-5.15.0-125-generic)。
内核初始化与initramfs挂载:为真实根文件系统铺路
内核被解压并执行后,立即初始化中断、调度器、内存管理等核心子系统。它不直接访问磁盘上的完整根文件系统,而是先将initramfs(一个cpio格式压缩的内存文件系统)解压到RAM中运行。initramfs里包含必要的模块(如NVMe、RAID、LVM、加密驱动)和工具(udev、cryptsetup),用于探测硬件、加载驱动、解锁加密卷、激活逻辑卷,最终找到并挂载真正的根文件系统(如/dev/mapper/ubuntu--vg-root)。挂载成功后,内核执行initramfs中的/init脚本,切换到真实根目录(switch_root)。
用户空间初始化:systemd成为PID 1并启动服务树
真实根挂载后,内核启动第一个用户空间进程——/sbin/init。在现代发行版中,这通常就是systemd(而非SysV init或Upstart)。作为PID 1,systemd负责:
- 按依赖关系并行启动unit(服务、socket、timer等)
- 读取
/etc/systemd/system/default.target确定默认目标(如graphical.target或multi-user.target) - 依次激活
sysinit.target → basic.target → multi-user.target等依赖链 - 运行
/etc/rc.local(若启用且兼容)作为传统兜底入口 - 拉起
getty@tty1.service提供字符终端登录,或gdm3.service等显示管理器进入图形界面
整个过程结束时,用户看到登录提示符或图形登录框,意味着从固件到完整用户环境的启动链条已贯通。










