背景
想调整一下分区大小, 结果一不小心删掉了 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
.
最后
祈祷并重启. 完好的系统又回来啦.