一、从按下电源到系统就绪:Linux 引导全流程解析
我们常说的'开机',对 Linux 系统来说是一套精密且有序的协作过程,大致可以分为五个关键阶段。
1. 开机自检(BIOS/UEFI 阶段)
这是整个启动流程的第一步,完全由硬件层面主导。当你按下电源键,主板上的 BIOS 或 UEFI 程序会被首先激活。
它会执行硬件检测,确保 CPU、内存、硬盘、显卡等核心组件都能正常工作。如果检测到硬件故障,系统会通过蜂鸣器报警或屏幕提示中断启动;如果一切正常,BIOS/UEFI 就会读取启动设备的主引导记录(MBR)或 GPT 分区表,把系统的控制权交给下一阶段。
2. MBR 引导与 GRUB 加载
MBR(主引导记录)位于硬盘的第一个扇区,大小仅 512 字节,它包含了硬盘分区表和一小段引导加载程序。
这段程序的核心任务是找到并加载系统的 GRUB 引导器。GRUB 是绝大多数 Linux 发行版的默认引导器,它会读取 /boot/grub2/ 目录下的配置文件,生成启动菜单,让你可以选择要启动的内核版本或进入救援模式。
如果你的系统使用的是 UEFI 模式,这个过程会略有不同,它会从 ESP 分区加载 EFI 文件来启动 GRUB,但核心目的是一致的。
3. 加载内核(Kernel)
当你在 GRUB 菜单中选定一个内核后,GRUB 会将对应的内核文件(通常是 /boot/vmlinuz-xxx)和初始化内存盘(initramfs)加载到内存中。
内核的首要任务是检测和初始化所有硬件设备,包括 CPU、内存、磁盘控制器等。而 initramfs 是一个临时的根文件系统,它包含了启动过程中必需的驱动程序和工具,能够让内核在挂载真正的根文件系统之前,识别并访问你的存储设备。
4. Systemd 初始化进程
内核完成硬件初始化后,会启动系统的第一个进程——Systemd(在 CentOS 7 及以后版本中),它的 PID 永远是 1。
这是整个系统的'总管家',负责启动所有后续的系统服务和用户进程。它会读取 /etc/systemd/system/default.target 配置,确定系统的默认运行级别,然后根据依赖关系,并行启动所有必要的服务,比如网络服务、SSH 服务、日志服务等。
在传统的 SysVinit 系统中,这个角色由 /sbin/init 担任,但 Systemd 通过并行启动和依赖管理,让系统启动速度有了质的飞跃。
二、Systemd:现代 Linux 的服务管理中枢
Systemd 不仅仅是一个初始化进程,它更是一套完整的系统和服务管理框架,彻底改变了我们管理 Linux 服务的方式。
1. 什么是 Systemd 单元?
Systemd 通过'单元(Unit)'来管理系统资源。每个单元都是一个配置文件,定义了一个需要被管理的对象,常见的单元类型有:
.service:最常见的单元类型,代表一个系统服务,比如 sshd.service、firewalld.service。.target:代表一组相关的单元,用于模拟传统的运行级别,比如 multi-user.target 对应字符界面多用户模式,graphical.target 对应图形界面模式。.mount:代表一个文件系统挂载点,/home 目录的挂载就由 home.mount 单元管理。.swap:代表一个交换分区或交换文件,用于管理虚拟内存。.timer:类似 cron 任务,用于定时触发特定操作。
这些单元文件主要存放在 /usr/lib/systemd/system/(系统默认)和 /etc/systemd/system/(用户自定义)目录下。
2. 运行级别与 Target 的对应关系
在传统的 SysVinit 系统中,我们用0-6 的数字表示不同的运行级别,而在 Systemd 中,这些级别被不同的 Target 单元所取代:
- 0 级别 → runlevel0.target,链接到 poweroff.target,用于关机。
- 1 级别 → runlevel1.target,链接到 rescue.target,即单用户模式,用于系统维护。
- 2、3、4 级别 → 都链接到 multi-user.target,即字符界面的多用户模式,这是服务器最常用的模式。
- 5 级别 → runlevel5.target,链接到 graphical.target,即图形界面模式。


