OCI ARM 实例救砖指南——安装 BBR 内核后 GRUB 损坏无法启动
问题背景: 在 OCI(Oracle Cloud)ARM / Ampere A1 实例上 安装 BBR 内核后重启,实例无法再启动——多半是 GRUB 或 EFI 引导被搞坏了。本教程就是在这个大背景下,通过救援实例挂载系统盘、重装 GRUB / 修复 EFI,把砖救回来。适用于 Debian / Ubuntu 及自定义 DD 镜像。
常见症状:
- 实例点击 Start
- 状态变为 Starting → Running
- 几秒后变成 Stopped(反复如此)
通常原因:
- 装 BBR 内核时 GRUB 未正确更新或损坏
- EFI 引导文件缺失或路径不对
- initramfs 没有包含 OCI 磁盘驱动
- root 分区在 fstab/内核参数里识别失败
# 1 停止损坏的实例
在 OCI 控制台:
Compute → Instances → 你的实例 → Stop
# 2 分离系统盘
进入实例页面:
Resources → Boot Volume
点击:
Detach Boot Volume
如果提示错误,可以选择 Force Detach。
# 3 挂载到救援实例
准备一台正常运行的 Rescue 实例(与故障实例在同一 VCN 下即可,用于挂载其系统盘做 chroot 修复)。
在 Oracle 云架构里 Boot Volume 不能跨可用区(AD)挂载,救援实例必须和故障实例在 同一 Availability Domain,否则无法把故障实例的启动卷挂到救援机上。
救援实例配置: 1 核 1G 即可完成本教程所有操作;博主用的是 1 核 6G,纯属习惯,并非必须。
然后:
Compute → Instances → Rescue 实例 → Attached Block Volumes → Attach Block Volume
选择:Attach existing boot volume
Attach type:Paravirtualized
# 4 查看磁盘
SSH 登录救援实例后执行:
lsblk
示例输出:
sda 50G 救援系统
sdb 150G 故障系统盘
├─sdb1 100M EFI
└─sdb2 149G root
2
3
4
说明:
/dev/sdb1→ EFI 分区/dev/sdb2→ Linux root
# 5 挂载系统
sudo mount /dev/sdb2 /mnt
sudo mkdir -p /mnt/boot/efi
sudo mount /dev/sdb1 /mnt/boot/efi
2
3
# 6 挂载系统设备(非常重要)
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
2
3
4
如果不执行这一步,grub-install 会报错。
# 7 进入系统
sudo chroot /mnt
现在你已经进入故障系统。
# 8 重新生成 initramfs
确保 OCI 磁盘驱动被包含:
update-initramfs -u -k all
# 9 重新生成 GRUB 配置
update-grub
正常输出示例:
Found linux image
Found initrd image
done
2
3
# 10 安装 OCI EFI 引导(最关键的一步)
OCI 的 UEFI 默认只会寻找:
/EFI/BOOT/BOOTAA64.EFI
执行:
grub-install --target=arm64-efi --efi-directory=/boot/efi --removable
正常输出:
Installing for arm64-efi platform.
Installation finished. No error reported.
2
# 11 检查 EFI 引导文件
执行:
ls /boot/efi/EFI/BOOT
必须看到:BOOTAA64.EFI
# 12 检查 fstab
执行:
cat /etc/fstab
正确示例:
UUID=xxxx / ext4 errors=remount-ro 0 1
UUID=xxxx /boot/efi vfat umask=0077 0 1
2
不要使用 /dev/sda1、/dev/sda2,因为 OCI 设备名称可能改变。
# 13 退出并卸载
exit
sudo umount -R /mnt
sync
2
3
# 14 挂回原实例
在 OCI 控制台:
- 从救援实例 Detach 该磁盘
- Attach 回原实例
- 设置为 Boot Volume
# 15 启动实例
Compute → Instances → Start
正常状态:Starting → Running
然后即可 SSH 登录:
ssh root@你的IP
# 常见启动失败原因
# 1 EFI 引导缺失
OCI 需要:/EFI/BOOT/BOOTAA64.EFI
解决:grub-install --removable
# 2 root 分区错误
错误:root=/dev/sda2
正确:root=UUID=xxxx
# 3 initramfs 缺少驱动
解决:update-initramfs -u
# 一键修复命令
在 chroot 环境中执行:
update-initramfs -u -k all
update-grub
grub-install --target=arm64-efi --efi-directory=/boot/efi --removable
2
3
# 适用系统
此方法适用于:
- Debian
- Ubuntu
- 自定义 DD 镜像
- 大部分 ARM Linux 系统
