122 lines
2.7 KiB
Markdown
122 lines
2.7 KiB
Markdown
## 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` 是分析启动耗时的高频工具
|
||
- 明确系统卡在哪个阶段,是启动排障的第一步
|