背景
想调整一下分区大小, 结果一不小心删掉了 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, 那么:
- 检查您的 Live CD 启动方式是否为 UEFI. 比如说在 Live CD 的 shell 里运行
efibootmgr, 如果输出是一堆那就是 UEFI; 如果报错那就不是. - 检查您是否使用了
chroot而非manjaro-chroot.
最后
祈祷并重启. 完好的系统又回来啦.