linux开机流程

Linux 开机启动流程是一个复杂的过程,涉及从硬件初始化到用户登录的多个阶段。以下是详细的流程解析:

image-20260210230920249

POST(加电自检)–>加载BIOS(Basic Input/Outpu System)–>确定启动设备(Boot sequence)、加载Boot Loader–>加载内核(kernel)初始化initrd–>运行/sbin/init初始化系统–>打印用户登录提示符

1. 硬件阶段(BIOS/UEFI)

阶段 说明
BIOS/UEFI 自检 开机后首先执行固件程序,进行硬件初始化(POST)
硬件检测 检测 CPU、内存、硬盘、键盘等关键硬件
启动顺序选择 根据设置的启动顺序,选择从硬盘、光驱或网络启动

2. 引导加载阶段(Bootloader)

Legacy BIOS 模式

  • MBR(主引导记录):硬盘前 512 字节,包含引导代码和分区表
  • Bootloader:常见的有 GRUB、LILO
    • GRUB 分为 Stage 1(MBR 中)和 Stage 2(/boot 分区)
    • 加载内核(vmlinuz)和 initramfs

UEFI 模式

  • 使用 GPT 分区表
  • EFI 系统分区(ESP)存放引导文件
  • 直接加载 .efi 格式的引导程序

3. 内核启动阶段

Bootloader → 加载 vmlinuz(压缩内核)→ 解压并执行

关键步骤:

  1. 内核自解压:将压缩的内核镜像解压到内存
  2. 初始化内核:设置内存管理、进程调度等核心子系统
  3. 挂载 initramfs:作为临时根文件系统,包含必要的驱动模块
  4. 加载驱动:识别硬盘控制器、文件系统等硬件
  5. 切换根文件系统:从 initramfs 切换到真正的根分区(/

4. init 进程阶段(系统初始化)

SysVinit(传统方式)

/sbin/init → 读取 /etc/inittab → 运行 /etc/rc.d/rc.sysinit

运行级别(Runlevels):

级别 含义
0 关机
1 单用户模式(救援模式)
3 多用户模式(命令行)
5 图形界面模式
6 重启

systemd(现代主流)

/lib/systemd/systemd → 并行启动服务 → 达到 target

systemd 目标(替代 runlevels):

  • graphical.target → 对应运行级别 5
  • multi-user.target → 对应运行级别 3
  • rescue.target → 救援模式

启动流程:

  1. 执行 default.target 的依赖
  2. 并行启动服务(相比 SysVinit 的串行启动更快)
  3. 关键服务
    • 网络配置(NetworkManager/networkd)
    • 文件系统挂载(fstab 处理)
    • 系统日志(rsyslog/systemd-journald)
    • 定时任务(cron)等

5. 用户登录阶段

getty → 显示登录提示符 → 用户输入用户名密码 → 启动用户 Shell
  • 虚拟终端:tty1-tty6(命令行),tty7+(图形界面)
  • 登录验证:PAM(可插拔认证模块)验证用户凭据
  • 启动环境:执行 /etc/profile~/.bash_profile 等配置文件

总结:

  1. 从底层到高层,控制权逐步移交: 固件 → 引导程序 → 内核 → init/systemd → 用户。
  2. 两个核心难题
    • 如何找到内核? -> 由 引导加载程序 (GRUB) 解决。
    • 如何挂载真正的根? -> 由 initramfs 解决。
  3. 分水岭:PID 1: 内核初始化和用户空间初始化的界限。systemd 是现代的、主流的 PID 1。
  4. 并行化systemd 取代传统的串行 SysV init 脚本,大幅提升启动效率。
  5. 关键日志: 启动出问题时,查看:
    • journalctl -b: 本次启动的 systemd 日志。
    • journalctl -kdmesg: 内核启动日志。
    • /var/log/boot.log: 一些系统的启动日志。
posted @ 2026-02-10 23:10  桂洛克船长  阅读(22)  评论(1)    收藏  举报