Linux 系统启动过程详解

概述

Linux系统的启动不是魔法,而是模块化的设计:每个环节独立、可调试。理解这个过程,能帮助我们更好地诊断启动问题、优化系统性能,甚至在定制系统时游刃有余。这意味着如果遇到“开机黑屏”或“引导失败”,我们能快速定位问题。比如,优化 GRUB 可以加速 20% 的启动时间;精简 systemd 服务,能让服务器停止运行不必要的服务。

这里可以给出一个形象的比喻,Linux 的启动过程就像一辆老式汽车从熄火到轰鸣前进:从“钥匙转动”(开机)到“引擎点火”(内核加载),再到“油门踩下”(系统就绪)。整个过程高效、有序,通常只需几秒到几十秒。

Linux 的启动过程通常分为几个关键阶段,从硬件初始化到用户空间的运行。需要注意的是,不同的 Linux 发行版(如 Ubuntu、CentOS)可能在细节上略有差异,但核心流程是相似的,尤其是现代系统多采用 systemd 作为初始化系统。

Linux 系统启动过程

linux启动过程
图1 Linux系统启动过程 来自bytebytego.com

  1. 当我们打开电源时,BIOS(基本输入/输出系统)或 UEFI(统一可扩展固件接口)固件会从非易失性存储器加载并执行POST(开机自检)。
  2. BIOS/UEFI 检测连接到系统的设备,包括 CPU、RAM 和存储。
  3. 选择要从中启动作系统的启动设备。这可以是硬盘驱动器、网络服务器或 CD ROM。
  4. BIOS/UEFI 运行引导加载程序(GRUB),它提供了一个菜单来选择作系统或内核功能。
  5. 内核准备就绪后,我们现在切换到用户空间。内核启动 systemd作为第一个用户空间进程,它管理进程和服务,探测所有剩余硬件,挂载文件系统,并运行桌面环境。
  6. systemd激活默认值。默认情况下,系统启动时目标单元。其他分析单元也会执行。
  7. 系统运行一组启动脚本并配置环境。
  8. 用户将看到一个登录窗口。系统现已准备就绪。

1. BIOS/UEFI 阶段:硬件初始化

包含图1中的阶段①、阶段②和阶段③
一切从按下电源按钮(Power On)开始。当计算机通电后,主板上的固件(Firmware)会首先运行,固件会从非易失性存储器加载并执行 POST(Power On Self Test,开机自检 )。这取决于你的系统是使用传统的 BIOS(Basic Input/Output System,基本输入/输出系统)还是现代的 UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)

  • BIOS 的作用:BIOS 加载自非易失性内存(如 ROM),它会执行 POST(Power-On Self-Test)自检,检查硬件是否正常,包括 CPU、内存、硬盘等。然后,它会搜索可引导设备(如硬盘、USB),并加载第一个扇区(通常是MBR - Master Boot Record)。
  • UEFI 的优势:UEFI 是 BIOS 的升级版,支持更大的硬盘(超过 2TB)、更快的启动速度和图形界面。它使用 EFI 系统分区(ESP)来存储引导程序,而不是 MBR。UEFI 还会验证引导文件的签名,以增强安全性。

图1阶段①、阶段②和阶段③是硬件层面的,Linux 系统本身还未介入。如果这里出问题,你可能看到黑屏或硬件错误提示。

2. Bootloader 阶段:引导加载器

包含图1中的阶段④
一旦 BIOS/UEFI 找到引导设备,它会将控制权交给 Bootloader。常见的 Bootloader 是 GRUB(Grand Unified Bootloader,大一统引导程序),尤其是 GRUB2。

  • GRUB 会读取配置文件(如 /etc/grub2.cfg/boot/grub/grub.cfg),显示引导菜单,让用户选择内核版本或恢复模式。
  • 然后,GRUB 加载 Linux 内核(通常是 /boot/vmlinuz-*)和初始 RAM 磁盘(initrd 或 initramfs),这是一个临时文件系统,用于加载必要的驱动(如磁盘驱动),以便内核能访问根文件系统。

Bootloader 是连接硬件和操作系统的桥梁。如果 GRUB 配置错误,系统可能无法启动。

3. Kernel 阶段:内核加载与初始化

包含图1中的阶段④
内核是 Linux 的核心,它被加载到内存中后开始执行。

内核首先解压自己,初始化硬件(如 CPU、内存管理)、加载模块,并挂载initramfs
然后,它会切换到根文件系统(rootfs),挂载 /sys、/proc 等虚拟文件系统,并启动第一个用户空间进程(PID 1)

在这个阶段,你可能会看到内核消息滚动在屏幕上(如 dmesg 输出)。内核版本可以通过 uname -r 查看。

4. Init 阶段:系统初始化

包含图1中的阶段⑤⑥
现代 Linux 发行版多使用 systemd 作为 init 系统(传统的是 SysVinit 或 Upstart)。
Init 进程(/sbin/init 或 /lib/systemd/systemd)读取配置文件(如 /etc/inittab 或 systemd 的 unit 文件),并根据 runlevel(运行级别)或 target(目标)启动服务。
Runlevel 是 SysVinit 的概念,从 0(关机)到 6(重启),但在 systemd 中被 targets 取代,如 multi-user.target(多用户模式)或 graphical.target(图形界面)。
Systemd 会并行启动服务,如网络、文件系统检查、用户登录等,提高启动效率。它还会运行启动脚本,如 /etc/rc.d/* 或 systemd 的服务文件。

如果使用图形界面,这里会启动显示管理器(如 GDM、LightDM),引导到登录界面。

5. 用户空间:系统就绪

包含图1中的阶段⑦⑧
最后,系统进入用户空间,用户可以登录。Shell(如 bash)会加载配置文件(如 /etc/profile、~/.bashrc),设置环境变量。此时,系统完全可用,你可以运行命令、启动应用等。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值