Linux 启动详解
Linux 系统的启动过程是一个复杂而有序的流程,涉及硬件初始化、引导加载、内核加载、系统服务启动等多个阶段,理解这一过程有助于排查启动故障、优化系统性能,以及深入掌握 Linux 系统的运行机制,本文将从开机加电到用户登录界面,详细拆解 Linux 系统的完整启动流程。

开机加电与 BIOS/UEFI 初始化
当计算机按下电源键后,首先执行的是硬件自检(POST),这一阶段由主板上的固件(BIOS 或 UEFI)负责,主要任务是检测硬件设备(如 CPU、内存、硬盘、键盘等)是否正常工作,并初始化最基础的硬件组件。
-
BIOS vs UEFI
传统 BIOS(基本输入输出系统)是 16 位实模式程序,功能较为简单,且仅支持 MBR(主引导记录)分区格式,而 UEFI(统一可扩展固件接口)是 32/64 位程序,支持 GPT(GUID 分区表),具备更快的启动速度、更高的安全性(如 Secure Boot)和更好的硬件兼容性。 -
启动设备选择
BIOS/UEFI 完成自检后,会根据预设的启动顺序(如硬盘、U 盘、网络)查找可引导设备,若从硬盘启动,BIOS/UEFI 会读取硬盘的第一个扇区(MBR 或 GPT 的引导扇区),加载引导加载程序(如 GRUB)。
引导加载程序(GRUB/LILO)
引导加载程序是 Linux 启动过程中的关键环节,其核心任务是加载 Linux 内核并传递启动参数,常见的引导加载程序包括 GRUB(Grand Unified Bootloader)和 LILO(Linux Loader),GRUB 是目前的主流选择。
-
GRUB 的工作流程
- 阶段 1(Stage 1):由 BIOS/UEFI 加载,位于硬盘的第一个扇区,仅包含极少代码,用于加载下一阶段。
- 阶段 1.5(Stage 1.5):加载文件系统驱动,以便读取 GRUB 的核心文件(如
stage2)。 - 阶段 2(Stage 2):加载 GRUB 的核心功能,包括菜单显示、内核加载等。
- 加载内核:根据配置文件(如
/boot/grub/grub.cfg)选择要启动的 Linux 内核,并将内核和初始内存盘(initrd)加载到内存中。
-
GRUB 配置文件
/boot/grub/grub.cfg是 GRUB 的核心配置文件,定义了启动菜单项、内核路径、启动参数等。menuentry "Ubuntu Linux" { linux /boot/vmlinuz-5.15.0-52-generic root=/dev/sda1 ro initrd /boot/initrd.img-5.15.0-52-generic }linux行指定内核路径和根文件系统,initrd行提供临时根文件系统,用于加载驱动模块。
Linux 内核初始化
内核被加载到内存后,开始接管系统控制权,完成硬件初始化和根文件系统挂载。
-
内核解压与启动
内核镜像(如vmlinuz)是经过压缩的,启动时会先解压自身,随后,内核初始化进程(init进程,通常为 PID 1)被创建,负责后续的系统服务启动。 -
设备探测与驱动加载
内核通过 Device Tree 或 ACPI 探测硬件设备,并加载对应的驱动程序,对于 SATA 硬盘,内核会加载ahci模块;对于 NVIDIA 显卡,则加载nouveau模块。 -
根文件系统挂载
内核通过启动参数(如root=/dev/sda1)定位根文件系统,并将其挂载为只读模式(ro),随后,内核会运行第一个用户空间程序,通常是/sbin/init、/bin/systemd或/sbin/upstart,具体取决于发行版。
系统初始化(Systemd/Init)
现代 Linux 发行版多采用 systemd 作为系统初始化系统,取代了传统的 SysVinit。systemd 并行启动服务,提高了启动效率,并提供了依赖管理、日志记录等功能。
-
systemd 的工作流程
- 挂载基本文件系统:
systemd首先挂载/sys、/proc、/dev等虚拟文件系统。 - 启动目标(Target):
systemd通过“目标”定义系统运行状态,如default.target(多用户模式)、rescue.target(救援模式)。 - 激活服务:根据目标,
systemd启动相关服务(如网络服务、日志服务),并处理服务依赖关系。
- 挂载基本文件系统:
-
关键服务与单元(Unit)
systemd通过“单元”管理系统资源,包括服务(.service)、挂载点(.mount)、设备(.device)等。network.service负责网络配置,sshd.service启动 SSH 服务。
用户登录与启动完成
当系统服务启动完成后,systemd 会启动登录管理器(如 gdm、lightdm),显示登录界面,用户输入用户名和密码后,启动 Shell(如 bash),进入交互式环境。
-
运行级别与目标
传统 Linux 使用运行级别(如 3 为多命令行模式,5 为图形模式),而systemd通过目标实现类似功能。multi-user.target对应运行级别 3,graphical.target对应运行级别 5。 -
启动流程总结
以下表格总结了 Linux 启动的主要阶段:阶段 主要任务 关键组件 硬件初始化 POST 自检、引导设备选择 BIOS/UEFI 引导加载 加载内核和 initrd GRUB/LILO 内核启动 初始化硬件、挂载根文件系统 Linux 内核 系统初始化 启动服务、管理依赖 systemd 用户登录 启动登录管理器、进入 Shell gdm/lightdm
常见启动问题与排查
- GRUB 菜单不显示:检查
/boot/grub/grub.cfg是否存在,或运行update-grub重新生成配置。 - 内核 panic:可能是根文件系统挂载失败或驱动不兼容,可通过
dmesg查看内核日志。 - 服务启动失败:使用
systemctl status <service>.service检查服务状态,或查看journalctl日志。
Linux 系统的启动流程从硬件初始化到用户登录,环环相扣,各阶段紧密协作,通过理解这一过程,用户可以更高效地管理系统、排查故障,并根据需求优化启动性能,无论是开发者还是系统管理员,掌握 Linux 启动机制都是必备技能。


















