Linux 系统启动过程

从按下电源键到出现登录界面,Linux 其实完成了一连串精密的启动流程。理解这条链路,遇到开机黑屏、引导损坏、服务起不来等问题时才知道从哪里排查。

启动的五个阶段

Linux 启动大致分为五个阶段:

  1. 固件自检:BIOS/UEFI 加电自检,找到可引导的启动设备。
  2. 引导加载程序:GRUB 从磁盘读取内核并加载到内存。
  3. 内核初始化:内核解压自身,初始化内存、驱动与设备。
  4. 启动第一个进程:内核挂载根文件系统后,启动 PID 为 1 的进程。
  5. 系统初始化:由 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说明
0poweroff.target关机
3multi-user.target纯命令行多用户
5graphical.target带图形界面的多用户
6reboot.target重启

启动排障三件套

开机出问题时,从内核日志、服务状态两个方向入手:

dmesg | tail -20                  # 查看最近的内核日志
journalctl -b -p err              # 本次启动产生的错误日志
systemctl list-units --failed     # 列出启动失败的服务
# 输出:UNIT  LOAD   ACTIVE SUB  DESCRIPTION

小结:Linux 启动就是"固件 → GRUB → 内核 → systemd → 服务"的接力赛。熟练使用 systemctl、journalctl、dmesg 观察启动过程,是系统排障的第一课。

笔记加载中…