# Ubuntu_GRUB修复

GRUB 损坏最常见于：
- 双系统重装 Windows 后 GRUB 被覆盖
- 调整分区后 GRUB 找不到配置文件
- 意外断电导致 `/boot/grub/` 文件损坏
- 内核升级后 GRUB 配置未正确更新

## 快速修复流程
下面按场景从轻到重排列。

### 场景一：GRUB 菜单还能进，只是启动失败
开机按 `Shift`（BIOS 模式）或 `Esc`（UEFI 模式）进入 GRUB 菜单，按 `e` 编辑启动项，找到 `linux` 开头的行，在末尾加上 `single` 或 `nomodeset`，按 `Ctrl+X` 启动。进入系统后执行：
```bash
# 重新生成 GRUB 配置
sudo update-grub

# 如果命令不存在（某些发行版）
sudo grub-mkconfig -o /boot/grub/grub.cfg

# 重启试试
sudo reboot
```

### 场景二：GRUB rescue 模式（`grub rescue>` 提示符）

这是最常见的 GRUB 损坏状态 —— 能看到 `grub rescue>` 提示符，但没法启动任何系统。

#### 第一步：找到 `/boot` 分区

```bash
# 列出所有分区
ls

# 依次尝试，找到含有 /boot/grub 的分区
ls (hd0,msdos1)
ls (hd0,msdos2)
# ...	
```

找到对应分区后执行：

```bash
# 设置 root 和 prefix
set root=(hd0,msdos1)
set prefix=(hd0,msdos1)/boot/grub

# 加载 normal 模块
insmod normal
normal
# 如果成功了，应该能看到 GRUB 菜单
```

进入系统后立即修复：

```bash
sudo update-grub
sudo grub-install /dev/sda # /dev/sda 是你的系统盘
```

#### 第二步（如果以上失败）：Live USB 修复

1. 用 Ubuntu 安装 U 盘启动，选择 “Try Ubuntu”

2. 打开终端，挂载系统分区：

```bash
# 找到你的根分区和 boot 分区
sudo fdisk -l

# 假设根分区是 /dev/sda2，boot 分区是 /dev/sda1
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot # 如果有独立 boot 分区

# 挂载虚拟文件系统
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

# chroot 进入系统
sudo chroot /mnt

# 修复 GRUB
grub-install /dev/sda
update-grub

# 退出并重启
exit
sudo reboot
```

### 场景三：UEFI 模式下的 GRUB 修复

UEFI 模式稍有不同，GRUB 安装在 EFI 系统分区（ESP）上：

```bash
# 挂载 EFI 分区（通常是 /dev/sda1 或 /dev/nvme0n1p1，类型为 EFI System）
sudo mount /dev/sda1 /mnt/boot/efi

# chroot 之后执行
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Ubuntu --recheck
update-grub
```

### 场景四：双系统重装 Windows 后 GRUB 被覆盖

Windows 会用自己的启动管理器覆盖 MBR/EFI。最省事的修复：

```bash
# Live USB 启动 → chroot → 重装 GRUB
sudo grub-install /dev/sda
sudo update-grub # 会自动检测 Windows Boot Manager

# 重启后 GRUB 菜单就会出现 Ubuntu 和 Windows 的选项。
```

### 常用命令速查

```bash
# 重新生成 GRUB 配置（最常用）
sudo update-grub
# 或
sudo grub-mkconfig -o /boot/grub/grub.cfg

# 安装 GRUB 到磁盘
sudo grub-install /dev/sda

# 查看 GRUB 版本
grub-install --version

# 备份/恢复 GRUB 配置
sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak
sudo cp /boot/grub/grub.cfg.bak /boot/grub/grub.cfg
```

