Linux 启动过程详解:从开机到用户登录的完整流程
Linux 系统的启动是一个从硬件初始化到用户空间就绪的复杂过程,涉及固件、内核、初始化系统等多个层面。理解启动流程不仅有助于系统故障排查,还能深入掌握 Linux 的底层运行机制。本文将以传统 SysVinit 系统为例,详细解析启动的五个核心阶段,并补充现代 systemd 系统的差异。
内核引导(Boot Loader 阶段)
这是启动的第一个阶段,负责从硬件到内核的交接,分为 BIOS/UEFI 自检 和 引导程序加载 两步。
BIOS/UEFI 自检(硬件初始化)
- BIOS(基本输入输出系统):传统固件接口,开机后首先运行,负责检测 CPU、内存、硬盘等硬件是否正常(即 “POST 自检”)。
- UEFI(统一可扩展固件接口):现代固件接口,功能与 BIOS 类似,但支持更大的硬盘、更快的启动速度和图形化界面。
- 核心任务:确定启动设备(如硬盘、U 盘、光驱),并读取设备的第一个扇区(MBR 主引导记录,传统 BIOS)或 EFI 系统分区(UEFI)。
引导程序(Boot Loader)加载内核
引导程序是位于启动设备第一个扇区的小程序,负责加载 Linux 内核。常见的引导程序有 GRUB(Grand Unified Bootloader)和 LILO(Linux Loader),其中 GRUB 因支持多系统引导而被广泛使用。
GRUB 的工作流程:
- 阶段 1:从 MBR 加载 GRUB 核心代码(占 512 字节,仅够启动下一步)。
- 阶段 1.5:加载位于 MBR 之后的驱动,使 GRUB 能识别内核所在的文件系统(如 ext4、xfs)。
- 阶段 2:读取
/boot/grub/grub.cfg配置文件,显示启动菜单(如选择不同内核版本或操作系统)。 - 加载内核:用户选择后,GRUB 将 Linux 内核(
/boot/vmlinuz-<version>)和初始 RAM 磁盘(/boot/initramfs-<version>.img)加载到内存。- 内核(vmlinuz):Linux 核心程序,负责硬件管理和进程调度。
- 初始 RAM 磁盘(initramfs):临时根文件系统,包含启动阶段必需的驱动(如硬盘驱动),帮助内核挂载实际根分区。
内核初始化(Kernel 阶段)
内核被加载到内存后,接管系统控制权,完成从硬件到用户空间的过渡。