【Linux】Linux 系统启动流程详解

发布于:2025-04-03 ⋅ 阅读:(51) ⋅ 点赞:(0)

在这里插入图片描述

1. BIOS/UEFI 阶段

  • 硬件自检(POST)

    • BIOS/UEFI 执行硬件检查(内存、CPU、外设等)。
    • 若硬件异常,通过蜂鸣码或屏幕提示错误。
  • 选择启动设备

    • 按配置顺序(硬盘、U盘、网络等)寻找可引导设备。
    • BIOS:读取磁盘第一个扇区的 MBR(512字节)
    • UEFI:从 ESP 分区(EFI System Partition)加载 .efi 文件(如 grubx64.efi)。

2. 引导加载程序(Bootloader)

常见工具:GRUB2(GNU GRand Unified Bootloader)

GRUB2 工作流程:
  1. Stage 1(MBR 或 ESP 分区)

    • 加载 Stage 1.5(如 core.img),提供基础文件系统驱动。
  2. Stage 2/boot/grub/

    • 加载配置文件 /boot/grub/grub.cfg,显示启动菜单。
    • 用户可选择内核版本或进入救援模式。
  3. 加载内核与 initramfs

    • 将选定的 内核(vmlinuz)initramfs 镜像加载到内存。

关键文件

  • grub.cfg:由 grub-mkconfig 生成(编辑 /etc/default/grub 后需更新)。
  • initramfs-*.img:包含根文件系统挂载前的必要驱动和工具。

3. 内核初始化

  1. 解压与初始化

    • 内核解压并初始化硬件(CPU、内存、设备树等)。
    • 挂载临时根文件系统(initramfs),加载关键驱动(如磁盘控制器、文件系统驱动)。
  2. 切换至真实根文件系统

    • 通过 initramfs 中的脚本(如 /init)挂载真正的根分区(/)。
    • 卸载 initramfs,释放内存。
  3. 启动第一个用户进程

    • 内核启动 PID=1 的进程:
      • 传统系统:/sbin/init(SysV init)
      • 现代系统:systemd

4. 用户空间初始化

(1)SysV init 流程
  • 读取 /etc/inittab
    • 确定默认运行级别(id:3:initdefault:)。
  • 执行 /etc/rc.d/rc.sysinit
    • 初始化网络、挂载文件系统、加载内核模块等。
  • 按运行级别启动服务
    • 运行级别目录(如 /etc/rc3.d/),按 S##Service 顺序启动服务。
(2)systemd 流程
  • 加载默认 Target
    • 默认目标:graphical.target(图形界面)或 multi-user.target(命令行)。
  • 并行启动服务
    • 根据单元(Unit)依赖关系并发启动服务,加速启动。
  • 关键命令
    systemctl get-default        # 查看默认 Target
    systemctl set-default TARGET# 修改默认 Target
    

5. 运行级别(Runlevel)与 Target 对照

SysV 运行级别 systemd Target 描述
0 poweroff.target 关机
1 rescue.target 单用户模式(救援)
3 multi-user.target 多用户命令行模式
5 graphical.target 图形界面模式
6 reboot.target 重启

6. 用户登录

  • 显示管理器(Display Manager)
    • 图形登录:GDM(GNOME)、LightDM 等。
  • 终端登录
    • 启动 getty 进程,提供 TTY 登录界面。
  • 登录后加载 Shell
    • 执行用户配置(/etc/profile~/.bash_profile 等)。

常见故障排查

  1. GRUB 损坏

    • 使用 Live CD 修复或重装 GRUB:
      grub-install /dev/sda
      update-grub
      
  2. 内核启动失败

    • 在 GRUB 菜单中选择旧版本内核启动。
    • 检查 /var/log/boot.logjournalctl -b(systemd 日志)。
  3. 根文件系统挂载失败

    • 在启动参数中添加 init=/bin/bash 进入救援 Shell。
    • 检查 /etc/fstab 或手动挂载根分区。

四、流程图

BIOS/UEFI → Bootloader → Kernel → Init Process → Target/Runlevel → Login

附录

  • 查看启动时间:systemd-analyze
  • 重建 initramfs:mkinitramfs -o /boot/initrd.img-$(uname -r)
  • 修改内核参数:编辑 /etc/default/grubGRUB_CMDLINE_LINUX → 运行 update-grub

通过理解启动流程,可更高效地诊断系统问题或优化启动速度。


网站公告

今日签到

点亮在社区的每一天
去签到