2. 系统启动流程基础
系统救援的第一原则是“先定位启动阶段,再选择恢复模式”。一台 Linux 主机从按下电源到出现登录提示符,并不是一个连续动作,而是由固件、引导加载程序、内核、initramfs、init 系统与用户空间服务逐级接力完成的链条。任何一级失败,表现出的症状都不同:有的黑屏无输出,有的停在 GRUB 提示符,有的报 Kernel panic,有的进入紧急模式。理解这条链,才能在救援时快速判断“该修哪一段”。
一、启动链的四个阶段与责任边界
传统 BIOS 与 UEFI 是两种固件接口。BIOS 通过 MBR 扇区中的引导代码跳转,依赖 512 字节限制,通常需要 GRUB 的 stage1/stage1.5/stage2 多级加载;UEFI 则直接读取 FAT 格式的 ESP 分区(EFI System Partition),执行 .efi 应用程序,支持 GPT 大容量磁盘与安全启动。固件阶段的核心任务是完成硬件自检(POST)、枚举设备,并把控制权交给引导加载程序。
引导加载程序(GRUB2、systemd-boot 等)负责读取 /boot 中的内核与 initramfs,向内核传递命令行参数,例如根文件系统位置、ro/rw、quiet、rd.break。内核初始化阶段会解压自身、探测硬件、挂载 initramfs 作为临时根,加载根文件系统所需驱动,然后切换(switch_root)到真实根。最后用户空间由 init 系统(systemd 或 SysVinit)接管,按 target 拉起服务,直到 multi-user.target 或 graphical.target。
二、方法流程:按阶段定位与恢复
救援时应遵循“由外向内、由早到晚”的顺序。第一步确认固件是否完成自检:若连厂商 Logo 都没有,问题在硬件或固件设置;若能进入固件设置但找不到启动项,检查 ESP 分区与启动顺序。第二步观察是否出现 GRUB 菜单:若直接落入 grub> 或 grub rescue>,说明引导配置或分区定位失败。第三步看内核是否输出日志:卡在 Loading initial ramdisk 或报 VFS: Unable to mount root fs,属于 initramfs 与根设备问题。第四步看 systemd 是否进入紧急模式,通常是 /etc/fstab 或服务单元错误。
常用救援命令清单
# 查看当前内核命令行
cat /proc/cmdline
# 临时以单用户/紧急模式启动(GRUB 编辑内核行)
systemd.unit=rescue.target
systemd.unit=emergency.target
init=/bin/bash
rd.break
# 重新生成 GRUB 配置
grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS
update-grub # Debian/Ubuntu
# 重装引导程序
grub2-install /dev/sda # BIOS
grub-install --target=x86_64-efi --efi-directory=/boot/efi
# 重建 initramfs
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
update-initramfs -u -k all
三、案例场景:一次“根分区 UUID 变更”导致的启动失败
某测试机克隆磁盘后重启,GRUB 菜单正常,但内核很快报 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)。判断为内核命令行中的 root=UUID=... 仍指向旧磁盘 UUID。救援步骤:在 GRUB 菜单按 e 编辑内核行,把 root=UUID=旧值 改为新分区 UUID,按 Ctrl+X 启动;进入系统后执行 blkid 核对,再运行 grub2-mkconfig 与 dracut -f 固化配置。若无法进入系统,则用安装介质进入救援模式,挂载根分区后 chroot 修复。
四、误区与复盘
- 误区一:所有启动失败都重装系统。 多数问题只需修复引导配置或 initramfs,重装会丢失数据且掩盖根因。
- 误区二:只改 GRUB 菜单不更新配置。 临时编辑仅对本次生效,必须执行
grub2-mkconfig或update-grub才能持久化。 - 误区三:忽略 SELinux 与挂载上下文。 在
rd.break中修改文件后未执行touch /.autorelabel,重启可能因标签错误再次失败。 - 误区四:不记录变更。 内核升级、磁盘克隆、分区调整、fstab 修改都是高发诱因,救援后应复盘变更记录并验证重启。
| 阶段 | 关键对象 | 典型症状 | 首选恢复动作 |
|---|---|---|---|
| 固件 | BIOS/UEFI、ESP、MBR | 无显示、找不到启动设备 | 检查启动顺序、修复 ESP/MBR |
| 引导加载程序 | GRUB2、grub.cfg | grub> 或 grub rescue> | 手动指定内核与根分区后重装 GRUB |
| 内核初始化 | vmlinuz、initramfs | Kernel panic、找不到根设备 | 修正 root= 参数、重建 initramfs |
| 用户空间 | systemd、fstab、服务单元 | emergency mode、依赖失败 | 修复 fstab、屏蔽故障服务、重载 daemon |
救援时优先使用“最小改动”原则:先通过内核命令行临时进入系统,确认根因后再持久化修复。每次修改 /etc/fstab、GRUB 配置或 initramfs 后,务必执行一次重启验证,避免把隐患留到下一次故障。