Linux 系统启动过程
从按下电源键到出现登录界面,Linux 其实完成了一连串精密的启动流程。理解这条链路,遇到开机黑屏、引导损坏、服务起不来等问题时才知道从哪里排查。
启动的五个阶段
Linux 启动大致分为五个阶段:
- 固件自检:BIOS/UEFI 加电自检,找到可引导的启动设备。
- 引导加载程序:GRUB 从磁盘读取内核并加载到内存。
- 内核初始化:内核解压自身,初始化内存、驱动与设备。
- 启动第一个进程:内核挂载根文件系统后,启动 PID 为 1 的进程。
- 系统初始化:由 systemd 等按配置拉起各类服务,进入可用状态。
固件阶段:BIOS 与 UEFI
- BIOS:传统固件,按 MBR 分区表寻找引导程序。
- UEFI:新一代固件,从 ESP 分区读取引导程序,启动更快、支持大磁盘。
查看当前机器是哪一种引导方式:
ls /sys/firmware/efi # 存在该目录说明是 UEFI 引导
# 输出:efivars esrt fw_platform_size
引导加载程序 GRUB
GRUB 是 Linux 最常用的引导程序,负责选择要启动的内核并把控制权交给它。修改内核启动参数、进入单用户模式修密码,都要先到 GRUB 菜单操作:
grub-install --version
# 输出:grub-install (GRUB) 2.06-2ubuntu14
systemd 与启动目标
现代发行版里 PID 1 就是 systemd,之后所有服务都由它管理:
ps -p 1 -o comm= # 查看 1 号进程是谁
# 输出:systemd
systemctl get-default # 查看默认启动目标
# 输出:graphical.target
systemd 用 target 取代了传统的运行级别:
| 运行级别 | 对应 target | 说明 |
|---|---|---|
| 0 | poweroff.target | 关机 |
| 3 | multi-user.target | 纯命令行多用户 |
| 5 | graphical.target | 带图形界面的多用户 |
| 6 | reboot.target | 重启 |
启动排障三件套
开机出问题时,从内核日志、服务状态两个方向入手:
dmesg | tail -20 # 查看最近的内核日志
journalctl -b -p err # 本次启动产生的错误日志
systemctl list-units --failed # 列出启动失败的服务
# 输出:UNIT LOAD ACTIVE SUB DESCRIPTION
小结:Linux 启动就是"固件 → GRUB → 内核 → systemd → 服务"的接力赛。熟练使用 systemctl、journalctl、dmesg 观察启动过程,是系统排障的第一课。