如何修复uefi启动选项

如何修复uefi启动选项

我以某种方式删除了 BIOS 中的所有启动选项(可能是由使用超级 grub 磁盘的某些操作引起的)。我尝试使用 boot-repair live-usb 修复我的 grub。执行建议的修复和重新启动后,BIOS 中仍然没有启动选项,每次启动时都会进入 BIOS 设置屏幕。

有关我的设置的完整信息是这里

整个故事开始于我发现我的 Windows 无法启动(BCD 损坏错误)。然后我认为这是一个 grub 问题,所以我在我的 Linux 中使用了引导修复并执行了建议的修复。然后我发现我也无法进入我的linux,只剩下grub>提示符。所以我现场尝试了super-grub disk和super-grub2 disk。然后我发现我基本上已经删除了 BIOS/uefi 中的所有启动选项。现在我安装了另一个linux(kubuntu),希望新安装可以修复grub,但它没有。所以我最终尝试了 boot-repair live usb 并执行了推荐的修复,但仍然没有成功。知道如何解决这个问题吗?

答案1

最后用gdisk修复了它。不确定哪个是关键步骤,但是在备份和恢复 uefi 标头和分区表后,重新启动时我的 linux 将尝试修复磁盘,然后无法挂载 efi 系统分区。在此阶段,从救援命令行运行 gdisk 会自动发现与 efi 系统分区关联的错误“活动”标志。只要让它修复标志就可以解决问题。

不是bios或者uefi的问题。我还尝试清除 efi 系统分区并重新安装 Windows 10。但是,这没有帮助。

答案2

如果您唯一的问题是 UEFI NVRAM 引导选项(启动变量)消失了,您将有多种选择:

如果您可以在 UEFI 模式下从外部媒体启动:

  • 挂载操作系统的根文件系统, mount /proc/sys然后/devchroot 到该文件系统,挂载 ESP 分区并运行grub-install(假设/dev/sdX是操作系统安装的根文件系统)
mount /dev/sdX /mnt
mount -t proc none /mnt/proc
mount --rbind /dev /mnt/dev
mount --rbind /sys /mnt/sys
chroot /mnt /bin/bash
mount /boot/efi
grub-install /dev/sdX

grub-install会自动为 GRUB 生成 UEFI 引导变量,但它需要efivarfs安装虚拟文件系统/sys/firmware/efi/efivars并以 UEFI 模式引导系统。

  • 或者挂载您的 ESP 分区而不进行 chroot,并用于efibootmgr手动重新创建您的启动选项:(假设/dev/sdX1是您的 ESP 分区)
mount /dev/sdX1 /boot/efi

ls /boot/efi/EFI # there should be a directory for each OS/distribution

efibootmgr -c -d /dev/sdX1 -L "Any label you want" -l \\EFI\\<distro name>\\shimx64.efi  
# or ...\\grubx64.efi if Secure Boot disabled
  • 如果启用了安全启动,并且您的操作系统安装了安全启动填充程序,则可能会有一个特殊grub-install选项。如第一个选项所示 chroot,然后运行:
grub-install --uefi-secure-boot /dev/sdX

如果您的外部介质只能在传统 BIOS 模式下启动:

  • Chroot 就像上面的第一个选项一样,但是使用这一grub-install行:
grub-install --target=x86_64-efi --force-extra-removable /dev/sdX

在传统模式下,您可能会收到有关无法访问 UEFI 启动变量的错误消息,但您现在可以忽略该消息。

这将安装 GRUB 的第二个副本[ESP mount path]/EFI/boot/bootx64.efi,这是固件期望找到 UEFI 后备/可移动媒体引导加载程序的位置。此后,固件应将 ESP 分区检测为“可在 UEFI 模式下启动”,并且您应该能够使用 BIOS 启动菜单选择它进行启动。由于现在仅存在 UEFI 可启动磁盘(删除外部启动介质后),因此即使是最传统的 UEFI 固件现在也应该以 UEFI 模式启动。

系统以 UEFI 模式启动后,您可以grub-install /dev/sdX再次运行来为 Linux 操作系统重新创建标准 UEFI 启动变量。

相关内容