上周给一台跑了很久的 Debian 做了一次 apt full-upgrade,内核从 6.1 升到了 6.12。当时没多想就重启了,结果机器直接掉进 grub rescue,提示 error: unknown filesystem。机器在机房,幸好带 IPMI,不然半夜就得跑一趟。

问题在哪

进 rescue 模式看了一圈,发现是 GRUB 装错了盘:机器有两块盘,升级后引导记录找不到了,分区 UUID 也对不上。

修复过程

用 Live USB 起起来,把系统盘挂载好,chroot 进去重装 GRUB:

mkdir /mnt/system
mount /dev/sda2 /mnt/system
mount /dev/sda1 /mnt/system/boot
mount --bind /dev  /mnt/system/dev
mount --bind /proc /mnt/system/proc
mount --bind /sys  /mnt/system/sys
chroot /mnt/system
grub-install /dev/sda
update-grub

退出 chroot、卸载分区、拔掉 U 盘重启,系统正常起来了。

两个教训

  1. 机器有两块盘的时候,grub-install 的目标盘一定看清楚,别想当然;
  2. 内核升级这种事,能带 IPMI / KVM 就带上,省得跑机房。

顺手把 unattended-upgrades 里的内核自动升级关了,以后升级内核手动来,挑个白天。