解决Linux启动失败问题:GRUB、initramfs 与 Rescue 模式详解

解决Linux启动失败问题:GRUB、initramfs 与 Rescue 模式详解

在Linux系统中,启动失败是较为常见的现象,尤其是在系统更新、内核更改、硬件调整或配置误操作后。本文将详细讲解Linux启动失败的常见原因,聚焦 GRUB (GNU GRand Unified Bootloader)、initramfs 和 Rescue 模式,并提供实用的解决方法,帮助您快速恢复系统正常运行。

一、Linux 启动流程概述

理解Linux启动流程有助于快速定位和解决启动失败的问题。其基本流程如下:

1. BIOS/UEFI 阶段:硬件自检 (POST) 并引导启动设备。

2. GRUB 阶段:引导加载器负责引导内核 (kernel)。

3. 内核加载 阶段:内核初始化硬件并启动 `init`(或 `systemd`)。

4. initramfs/initrd:初始化根文件系统。

5. 系统初始化 阶段:启动各个服务并加载用户环境。

启动失败通常发生在GRUB阶段、initramfs阶段或 `init` 启动过程。

二、GRUB 启动失败的排查与解决

GRUB 出现故障时,系统可能停留在 GRUB 命令行 (grub>) 或 GRUB 救援模式 (grub rescue>)。以下是几种常见错误及解决方法:

1. 错误 1:GRUB 命令行 (grub>)

可能原因:

  • 引导配置文件 (`/boot/grub/grub.cfg`) 损坏或丢失。
  • GRUB 记录的根分区位置发生变化(如硬盘 UUID 变更)。

解决方法:

1)查看可用分区

ls

2)查找 `/boot` 目录所在分区

ls (hd0,1)/

逐个检查,找到类似 `/boot/grub` 目录的分区。

3)手动加载 Linux 内核

set root=(hd0,1)
linux /vmlinuz root=/dev/sdX ro
initrd /initramfs.img
boot

4)重建 GRUB 配置文件(启动成功后)

grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/sdX

2. 错误 2:进入 GRUB Rescue 模式 (grub rescue>)

可能原因:

  • GRUB 的核心模块丢失。
  • 硬盘或分区信息改变。

解决方法:

1)识别根分区

ls

2)设置根分区并加载 GRUB 模块

set root=(hd0,1)
set prefix=(hd0,1)/boot/grub
insmod normal
normal

3)若 GRUB 成功启动,重建配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/sdX

三、initramfs 启动失败的排查与解决

`initramfs`(initial RAM filesystem)是启动时加载的临时根文件系统,负责在 Linux 内核加载前提供必要的驱动、模块及工具。启动失败时可能出现以下问题:

1. 错误 1:提示 “dracut: Warning: /dev/root does not exist”

可能原因:

  • 根文件系统设备号或 UUID 发生变化。
  • `initramfs` 缺少必要的驱动程序或模块。

解决方法:

1). 启动 Rescue 模式

引导过程中按下 `e` 键编辑 GRUB 启动项。

在 `linux` 内核行的末尾添加以下参数:

rd.break

按 `Ctrl + X` 启动。

2). 重新生成 `initramfs`

dracut -f /boot/initramfs-$(uname -r).img $(uname -r)

3). 重新引导系统

reboot

2. 错误 2:提示 “Kernel Panic not syncing: VFS”

可能原因:

  • `initramfs` 丢失或损坏。
  • `/etc/fstab` 配置错误。

解决方法:

1)进入 Rescue 模式并检查 `initramfs`

ls /boot/initramfs-*.img

2)如果 `initramfs` 不存在,重新生成

dracut -f /boot/initramfs-$(uname -r).img $(uname -r)

3)检查 `/etc/fstab` 配置

确保分区 UUID 正确:

blkid

若 UUID 不匹配,使用正确的 UUID 更新 `/etc/fstab` 文件。

四、Rescue 模式 (救援模式) 详解

Rescue 模式用于在系统无法正常启动时修复问题。

1. 进入 Rescue 模式

在启动时选择 “Rescue mode”(若可用)。

若 Rescue 模式不可用,可通过以下方式手动进入:

1)使用 Linux 安装光盘/USB 启动。

2)在启动菜单中选择 *”Troubleshooting” → “Rescue a CentOS system”*(或其他系统的类似选项)。

2. 授权挂载根文件系统

在 Rescue 模式命令行中:

chroot /mnt/sysimage

3. 常用修复操作

重建 GRUB

grub2-install /dev/sdX
grub2-mkconfig -o /boot/grub2/grub.cfg

检查并修复文件系统

fsck /dev/sdX

重新生成 `initramfs`

dracut -f

更改 root 密码(若遗忘)

passwd root

更新 `SELinux` 标签

touch /.autorelabel
reboot

五、实战案例

案例①:更新内核后启动失败,提示 “Kernel Panic”

解决步骤:

1. 在 GRUB 启动菜单中选择较旧的内核。

2. 使用 Rescue 模式启动系统。

3. 检查 `/boot` 目录,确认 `initramfs` 文件存在。

4. 若 `initramfs` 丢失,重新生成:

dracut -f /boot/initramfs-$(uname -r).img $(uname -r)

5. 检查 `/etc/fstab` 文件,确保分区 UUID 无误。

6. 重新启动系统。

案例②:系统升级后 GRUB 进入 rescue 模式

解决步骤:

1. 在 `grub rescue>` 模式中,执行以下命令:

set root=(hd0,1)
set prefix=(hd0,1)/boot/grub
insmod normal
normal

2. 引导系统后,使用以下命令修复 GRUB:

grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/sdX

Linux启动失败往往涉及 GRUB、initramfs 和根文件系统。掌握启动流程、常见错误及修复方法有助于快速恢复系统。通过GRUB命令行、Rescue 模式及文件系统修复工具,您可以在复杂的启动失败场景下迅速定位并解决问题。面对启动失败,保持冷静,按照步骤排查,往往能快速找到症结所在并恢复系统的正常运行。

未经允许不得转载:A5数据 » 解决Linux启动失败问题:GRUB、initramfs 与 Rescue 模式详解

相关文章

contact