## 1、系统引导顺序概览 Linux 系统从开机到进入可登录状态,大致会经历一条固定链路。 理解这条链路后,排查“为什么机器起不来”“为什么服务没有自动启动”“为什么卡在某个阶段”会更有方向。 ## 2、典型启动流程 ### 2.1 固件初始化 - BIOS 或 UEFI 上电初始化 - 执行 POST(开机自检) ### 2.2 选择启动设备 固件根据启动顺序选择硬盘、U 盘、网络等启动介质。 ### 2.3 引导装载程序 常见是 GRUB,负责加载内核和引导参数。 ### 2.4 加载内核与 initramfs - 加载 Linux 内核 - 加载 `initramfs` 中的临时驱动和初始化环境 ### 2.5 内核初始化 内核初始化硬件、内存、驱动、调度器等基础能力。 ### 2.6 切换到真实根文件系统 系统从 `initramfs` 的临时根切换到磁盘上的真实根目录。 ### 2.7 启动 `systemd` 内核启动完成后,交给 PID 1,也就是 `systemd` 继续完成用户空间初始化。 ### 2.8 加载默认 target `systemd` 根据默认 target 启动系统服务、登录服务以及图形服务(如果有)。 ## 3、常见 target 理解 ### 3.1 `multi-user.target` 类似传统的多用户文本模式,适合服务器环境。 ### 3.2 `graphical.target` 在 `multi-user.target` 基础上增加图形界面相关服务。 ### 3.3 默认 target 系统默认 target 常由以下链接决定: ```shell /etc/systemd/system/default.target ``` ## 4、启动阶段可能涉及的内容 - 读取内核参数 - 挂载根文件系统 - 处理 `/etc/fstab` - 启动 `rc.local`(如果系统启用) - 拉起登录服务 `getty` - 启动图形相关服务 ## 5、分析启动耗时 ### 5.1 `systemd-analyze` ```shell systemd-analyze ``` 查看启动耗时概览。 ### 5.2 生成启动时序图 ```shell systemd-analyze plot > boot.html ``` 生成 HTML 图,便于分析系统在启动阶段各服务耗时和依赖关系。 ## 6、排障思路 ### 6.1 系统卡在引导阶段 优先判断: - 是 BIOS/UEFI 阶段问题 - 是 GRUB 问题 - 是内核启动问题 - 还是 `systemd` / 服务启动问题 ### 6.2 系统启动慢 优先使用: ```shell systemd-analyze systemd-analyze blame ``` ### 6.3 服务没有自动启动 重点检查: - 默认 target 是否正确 - 服务是否已 `enable` - 依赖关系是否满足 ## 7、小结 - Linux 启动链路大致是:BIOS/UEFI → 引导程序 → 内核/initramfs → 根文件系统 → systemd → target / 服务 - `multi-user.target` 和 `graphical.target` 是最常见的启动目标 - `systemd-analyze` 是分析启动耗时的高频工具 - 明确系统卡在哪个阶段,是启动排障的第一步