插件窝 干货文章 Linux系统启动过程的阶段有哪些

Linux系统启动过程的阶段有哪些

启动 内核 文件 初始化 781    来源:    2025-04-23

Linux系统的启动过程是一个多阶段的复杂流程,涉及硬件初始化、引导加载、内核启动和用户空间初始化等关键步骤。以下是详细的阶段划分及说明:


1. BIOS/UEFI 阶段

  • 硬件自检(POST)
    通电后,主板固件(BIOS或UEFI)执行硬件检测(如内存、CPU、存储设备)。
  • 选择启动设备
    根据配置顺序(如硬盘、USB、网络)查找可启动设备,加载其引导扇区(如MBR或GPT分区中的引导代码)。

2. 引导加载程序(Bootloader)阶段

  • MBR/GPT引导(传统BIOS vs UEFI)
    • BIOS+MBR:加载磁盘前512字节的MBR,运行GRUB Legacy等引导程序。
    • UEFI+GPT:直接从ESP分区加载GRUB2systemd-boot等UEFI应用。
  • GRUB2的主要任务
    1. 加载核心配置文件(如/boot/grub2/grub.cfg)。
    2. 显示启动菜单(可选内核或救援模式)。
    3. 加载选定的内核(vmlinuz)initramfs到内存。

3. 内核(Kernel)初始化阶段

  • 解压与初始化
    内核解压后,初始化CPU、内存管理、设备树(Device Tree)等核心子系统。
  • 挂载根文件系统
    依赖initramfs(临时根文件系统)加载必要的驱动(如磁盘、LVM、加密模块),最终挂载真正的根文件系统(如/dev/sda1)。
  • 启动第一个用户进程
    内核执行/sbin/init(传统SysVinit)或systemd(现代发行版默认)。

4. 用户空间(Userspace)初始化阶段

Systemd 主导的流程(主流发行版)

  1. systemd初始化(PID=1)
    • 解析默认目标(如multi-user.targetgraphical.target)。
    • 并行启动服务单元(unit),依赖关系由systemd管理。
  2. 关键服务启动
    • 挂载文件系统(/etc/fstab)。
    • 启动网络(NetworkManager或systemd-networkd)。
    • 加载用户态服务(SSH、数据库等)。

传统SysVinit流程(旧版系统)

  • /etc/inittab定义的运行级别(如runlevel 35)。
  • 顺序执行/etc/rc.d/中的启动脚本(符号链接到S*K*)。

5. 登录界面/Shell 就绪

  • 终端登录
    启动gettyagetty,显示登录提示(tty1-tty6)。
  • 图形界面(如适用)
    通过显示管理器(如GDM、LightDM)启动X11/Wayland会话。

关键文件与工具

阶段 关键文件/工具 说明
BIOS/UEFI /boot/efi/ (ESP分区) UEFI固件读取的引导文件
GRUB2 /boot/grub2/grub.cfg 引导菜单配置
Kernel /boot/vmlinuz-*, initramfs-* 内核与临时根文件系统
Systemd /etc/systemd/system/default.target 默认启动目标
SysVinit /etc/inittab, /etc/rc.d/ 运行级别和启动脚本

常见问题排查

  1. GRUB损坏:使用Live CD修复或grub-install
  2. 内核崩溃:检查dmesgjournalctl -k
  3. 启动卡住:在GRUB中添加init=/bin/bash进入救援模式。

通过理解这些阶段,可以高效诊断启动问题(如服务依赖失败、文件系统挂载错误)或优化启动速度(如禁用冗余服务)。不同发行版(RHEL、Ubuntu、Arch)细节可能略有差异,但核心流程一致。