Linux系统启动是从硬件上电到用户可正常操作系统的完整流程,整个过程由多个阶段依次衔接完成,每个阶段都有明确的职责和对应的执行程序。

Linux系统启动的核心阶段
1. BIOS/UEFI硬件自检阶段
按下电源键后,主板上的BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口)首先运行,完成硬件检测工作。这个阶段会检查CPU、内存、硬盘、显卡等硬件是否正常,同时根据预设的启动顺序查找可引导设备,比如硬盘、U盘、光盘等。找到引导设备后,会读取设备第一个扇区的内容,也就是主引导记录(MBR)或者GPT分区表的引导信息,将后续引导权交给引导加载程序。
2. 引导加载程序(Bootloader)阶段
最常见的Linux引导加载程序是GRUB2,它会被BIOS/UEFI加载到内存中运行。这个阶段的主要作用是为用户展示启动选项,比如选择不同内核版本、进入救援模式等。用户选择启动项后,GRUB2会从硬盘中加载Linux内核文件和初始内存文件系统(initramfs)到内存,然后将控制权交给内核。
如果是GRUB2的配置场景,相关配置文件内容示例如下:
# GRUB2配置文件示例 /etc/default/grub GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet" GRUB_DISABLE_RECOVERY="true"
3. 内核初始化阶段
内核被加载到内存后,首先会进行自身解压和初始化,检测所有硬件设备,加载对应的硬件驱动。之后内核会挂载initramfs作为临时根文件系统,initramfs中包含了挂载真实根文件系统所需的驱动和工具。内核完成临时文件系统挂载后,会切换到真实的系统根目录,然后启动第一个用户空间进程,也就是PID为1的进程,传统系统中是init进程,现代多数发行版中是systemd进程。
4. 用户空间初始化阶段
PID为1的进程会负责后续的系统初始化工作。如果是init进程,会根据/etc/inittab文件的配置,依次启动不同运行级别对应的系统服务。如果是systemd进程,会读取对应的target单元文件,按照依赖关系依次启动系统服务、挂载文件系统、配置网络等。这个阶段会完成系统基础服务的启动,比如日志服务、网络服务、定时任务服务等。
查看当前systemd默认启动target的命令示例如下:
# 查看当前系统默认启动的target systemctl get-default # 查看multi-user.target包含的所有服务单元 systemctl list-dependencies multi-user.target
5. 用户登录阶段
系统服务启动完成后,会启动终端程序或者显示管理器。如果是命令行模式,会展示登录提示符,用户输入用户名和密码后,系统验证通过会加载用户对应的shell环境,比如bash。如果是图形界面模式,显示管理器会展示图形化登录界面,用户登录后进入桌面环境,此时整个启动流程完成,用户可以正常操作系统。
不同启动阶段的故障排查方向
如果系统启动失败,可以根据卡住的阶段定位问题:如果是硬件自检阶段卡住,通常是硬件故障或者启动顺序配置错误;如果是引导加载程序阶段卡住,可能是GRUB2配置损坏或者内核文件丢失;如果是内核初始化阶段卡住,可能是硬件驱动不兼容或者initramfs文件损坏;如果是用户空间初始化阶段卡住,可能是某个系统服务启动失败导致。
| 启动阶段 | 核心执行程序 | 常见故障原因 |
|---|---|---|
| 硬件自检 | BIOS/UEFI | 硬件损坏、启动顺序错误 |
| 引导加载 | GRUB2 | 引导配置损坏、内核文件丢失 |
| 内核初始化 | Linux内核 | 驱动不兼容、initramfs损坏 |
| 用户空间初始化 | init/systemd | 服务启动失败、配置文件错误 |
| 用户登录 | 终端/显示管理器 | 用户密码错误、shell配置损坏 |
注意:不同Linux发行版的启动细节可能存在差异,比如部分嵌入式Linux系统可能使用简化的init程序,没有systemd和GRUB2,但是核心的硬件检测、内核加载、服务初始化的逻辑是一致的。
理解Linux系统启动的每个阶段,不仅能帮助用户快速定位启动类故障,也能更深入理解Linux系统的运行原理,为后续的运维和开发工作打下基础。
Linux启动过程init进程systemdbootloader修改时间:2026-07-05 11:36:23