背景

想调整一下分区大小, 结果一不小心删掉了 ESP…

前置知识

ESP, 全称EFI System Partition, 是一个在物理硬盘主分区表上的特殊分区, 它:

  • 是 FAT 格式的; (可以是 FAT16/FAT32 )
  • 与操作系统无关, 而是 UEFI 固件用来寻找引导器的存储空间
  • 一般分区表会使用 GPT 而非 MBR, 因为现有的 UEFI 固件都不怎么支持 MBR 上的启动

创建分区

用你喜欢的分区软件, 创建一个大概 512MiB 大的 FAT32 分区(理论上在哪都行). 然后跑一遍mkfs:

mkfs.fat -F32 /dev/<ESP>

构建内核

挂载原来的系统:

sudo mount /dev/<SYSTEM> /mnt
sudo mount /dev/<ESP> /mnt/boot
sudo manjaro-chroot /mnt

注意必须要用manjaro-chroot(如果是 Archlinux 的话就arch-chroot)而不是普通的chroot. chroot似乎不会继承 EFI Variables 导致下面 grub-install 失败.

manjaro-chroot会自己把非文件分区绑定上, 所以不需要再打那三行sudo mount --bind /dev /mnt/dev之类的了.

然后更新一下内核; 内核会把自己放进/boot里:

sudo pacman -S linux

可以去检查一下/boot下是否已经有vmlinuz-*文件了.

修复引导

grub-install --recheck /dev/sdX --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg

如果在这一步出现了报错: efi variables are not supported on this system, 那么:

  1. 检查您的 Live CD 启动方式是否为 UEFI. 比如说在 Live CD 的 shell 里运行efibootmgr, 如果输出是一堆那就是 UEFI; 如果报错那就不是.
  2. 检查您是否使用了 chroot 而非 manjaro-chroot.

最后

祈祷并重启. 完好的系统又回来啦.