2.7 KiB
2.7 KiB
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 常由以下链接决定:
/etc/systemd/system/default.target
4、启动阶段可能涉及的内容
- 读取内核参数
- 挂载根文件系统
- 处理
/etc/fstab - 启动
rc.local(如果系统启用) - 拉起登录服务
getty - 启动图形相关服务
5、分析启动耗时
5.1 systemd-analyze
systemd-analyze
查看启动耗时概览。
5.2 生成启动时序图
systemd-analyze plot > boot.html
生成 HTML 图,便于分析系统在启动阶段各服务耗时和依赖关系。
6、排障思路
6.1 系统卡在引导阶段
优先判断:
- 是 BIOS/UEFI 阶段问题
- 是 GRUB 问题
- 是内核启动问题
- 还是
systemd/ 服务启动问题
6.2 系统启动慢
优先使用:
systemd-analyze
systemd-analyze blame
6.3 服务没有自动启动
重点检查:
- 默认 target 是否正确
- 服务是否已
enable - 依赖关系是否满足
7、小结
- Linux 启动链路大致是:BIOS/UEFI → 引导程序 → 内核/initramfs → 根文件系统 → systemd → target / 服务
multi-user.target和graphical.target是最常见的启动目标systemd-analyze是分析启动耗时的高频工具- 明确系统卡在哪个阶段,是启动排障的第一步