如何将 GRUB 重新安装到 EFI 分区?

如何将 GRUB 重新安装到 EFI 分区?

我想重新安装 GRUB 2,我发现了以下说明: 如何使用 Ubuntu Live CD 或 USB 修复、恢复或重新安装 Grub 2。在我的例子中,引导加载程序安装在 EFI 分区中。如果我使用本指南中提供的命令,GRUB 会自动重新安装到 EFI 分区,还是会安装到安装 Ubuntu 的根分区中?显然,我不希望发生这种情况。

答案1

以这种方式在 EFI 模式下将 GRUB 引导加载程序重新安装到您的 Ubuntu 安装中...

从 Ubuntu 安装介质启动并选择“无需安装即可试用 Ubuntu”。
(以 EFI 模式启动安装介质,选择前面带有 UEFI 的 Ubuntu 条目。)

进入 Live 桌面后,打开终端并执行以下命令:

sudo mount /dev/sdXY /mnt
sudo mount /dev/sdXX /mnt/boot/efi 

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done  

sudo chroot /mnt  

grub-install /dev/sdX
update-grub
exit  

注意:如果 grub-install 命令报告错误,则表示找不到 efivars。请在 chroot 环境中尝试以下操作(感谢 @michael_dunn - 此步骤在 Ubuntu 22.10 中是必需的):

mount -t efivarfs none /sys/firmware/efi/efivars  

然后再次执行grub-install命令:grub-install /dev/sdX

为了避免可能出现的意外问题,请随后正确卸载文件系统。

sudo umount /dev/sdXX
sudo umount /dev/sdXY

注意:sdX= 磁盘 | sdXX= efi 分区 | sdXY= 系统分区

要识别分区,请使用 GParted,该工具包含在安装介质中。
运行命令后,GRUB 将安装在单独的 EFI 分区中。

答案2

这是对我唯一有用的方法:(系统:sdb8,启动:sdb6,efi:sdb2)

sudo mount /dev/sdb8 /mnt 
sudo mount /dev/sdb6 /mnt/boot 
sudo mount /dev/sdb2 /mnt/boot/efi

sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys

sudo chroot /mnt

grub-install --target=x86_64-efi /dev/sdb

grub-install --recheck /dev/sdb

exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt

答案3

这是我在标准 x86_amd64 EFI 桌面上执行的操作,无需 chrooting,假设您的硬盘上有一个包含 Ubuntu 的分区,并且可能有一个应该安装 GRUB 的 EFI 分区。

在实时 Ubuntu 上启动,我使用的是 18.04,但更新的版本应该也可以

如果您当前没有 EFI 分区(可能已被删除,或者您正在迁移到新驱动器):

sudo gparted

在您选择的磁盘上创建一个大约 100 MB 的 FAT 32 分区(通常是托管 Ubuntu 分区的磁盘)。如果您计划移动或调整某些分区的大小,请提前做好准备(例如,在可用空间的末尾创建 EFI 分区)。

在此分区上设置标志 esp(标志 boot 也将被选择)

如果目录 /sys/firmware/efi/efivars 为空,则运行:

mount -t efivarfs none /sys/firmware/efi/efivars

此后不应再为空

现在假设 Ubuntu 分区是/dev/sda2,而(可能是新的)EFI 分区是/dev/sda1

sudo apt install grub-efi
sudo mkdir /media/root && sudo mount /dev/sda2 /media/root
sudo mkdir /media/efi && sudo mount /dev/sda1 /media/efi

如果您使用安全启动,请在下面的 grub-install 命令中添加参数 --uefi-secure-boot

sudo grub-install --target=x86_64-efi /dev/sda --efi-directory=/media/efi --boot-directory=/media/root/boot

这应该给出:

为 x86_64-efi 平台安装。

安装完成。没有报告错误。

然后重启,你就大功告成了。你可能需要告诉 BIOS 要使用哪个驱动器,要使用哪个 EFI 分区,或者要使用哪个 EFI 二进制文件。

如果您创建了新的 EFI 分区,则可能必须将其添加到分区/etc/fstab才能update-grub正常工作。

了解更多信息 :https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Hybrid_UEFI_GPT_+_BIOS_GPT/MBR_boot

来源如何填充/sys/firmware/efi/efivars(否则 grub-install 会发出警告warning: EFI variables are not supported on this system:)

来源了解如何使其与安全启动一起工作。

答案4

感谢@cl-netbox 的指导!

在我升级(Linux Mint 18.2 Sonya 到 18.3 Sylvia)后,我的系统无法启动,所以我按照上面的说明操作,但仍然没有成功。然而,我注意到我的机器的 /boot 位于一个单独的分区中(可能是因为我使用的是 LVM),所以我稍作修改的过程是:

sudo mount /dev/sdXXX /mnt
sudo mount /dev/sdXY /mnt/boot
sudo mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sdX
update-grub 

注意:sdX = 磁盘 | sdXX = efi 分区 | sdXY = 启动分区 | sdXXX = 系统分区

相关内容