如何重新安装 GRUB2 EFI?

Max*_* R. 58 linux 64-bit uefi

成功更新我的 bios 后,出了点问题,最后我的黑屏左上角有一个闪烁的光标。没有错误,什么都没有。bios 现在只列出了一个SATA: <disc name>引导选项,而不是通常的 UEFI 选项ubuntu。我正在使用 GPT 分区方案。

我最终发现有效的解决方案是正确重新安装grub-efi-amd64. 那么,我该怎么做呢?

PS:实际上,我自己成功地重新安装了 GRUB2 EFI,并将在这里发布我的答案,因为我找不到任何完整的操作方法。

Max*_* R. 94

  • 在 UEFI 模式下使用 live-USB/CD 启动您的计算机。我有两个启动选项,<flash_drive>并且UEFI: <flash_drive>需要第二个选项来公开 efi 变量,/sys/firmware/efi/以便efibootmgr以后不会失败。使用第一个选项启动会给我以下错误:

    Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
    Try 'modprobe efivars' as root.
    
    Run Code Online (Sandbox Code Playgroud)

    modprobe efivars 没有为我工作。

  • chroot 进入损坏的系统(类似于ubuntu grub2 帮助,但具有 efi 特性):

    sudo mount /dev/sda2 /mnt #sda2 is the root partition
    sudo mount /dev/sda1 /mnt/boot/efi #sda1 is the efi partition
    for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
    sudo cp /etc/resolv.conf /mnt/etc/ #makes the network available after chrooting
    modprobe efivars # make sure this is loaded
    sudo chroot /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  • 根据您的 Linux 发行版,您现在可以做不同的事情。

  • 现在键入Ctrl+D退出 chroot,卸载所有内容并重新启动:

    for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done
    sudo umount /mnt/boot/efi #please do this. Corrupted efi partitions are not nice
    sudo umount /mnt
    sudo reboot
    
    Run Code Online (Sandbox Code Playgroud)

您可能需要根据自己的需要(不同的分区表、单独的 /boot 分区等)进行调整,这可能不是唯一的选择,但这对我来说效果很好。

用于修复事物的合适的实时系统是grml。还有一个关于如何设置可启动 USB 设备的广泛指南,其中 Mac 部分实际上是最有用的(只需创建一个 FAT32 分区,复制文件,重新启动,完成)。

  • 伙计!非常感谢!这只是在我的联想 X220 在重置后不想再启动之后救了我,这激活了最新的软件包更新,同时看到我进行了 BIOS 重置,因为据说这可以解决 3G 卡的连接问题。在那之后,无论出于何种原因,启动变得不可能。直到我使用了您的指南。顺便说一句,你复制 resolv.conf 的部分对我不起作用,因为它是一个符号链接到 `/run/resolvconf...`(在 Ubuntu 12.04 中),而我只是使用了 `mount --bind /run / mnt/run` 在 chroot 环境中挂载整个 `/run` 目录。 (5认同)
  • 昨天保存了我的媒体播放器。300个互联网点给你。 (4认同)
  • 运行 `update-grub` 后,我的 `/boot/efi` 文件夹仍然是空的(我已经创建了这个新分区)。只有在运行 `grub-install` 之后,实际的文件才会被写入那里。本指南帮助了我(德语):https://wiki.ubuntuusers.de/EFI_Problembehebung/ (3认同)

小智 9

作为第一种方法的潜在简化,可以直接引导到硬盘上的系统,仅使用 live CD 的 grub。使用 xubuntu 13.10 live CD 在 xubuntu 13.10 上进行测试。

确保在您的 BIOS 中禁用了安全启动。插入 live CD 并通过 UEFI 启动它。将显示 CD 的 GRUB 菜单。按“c”进入命令行。

configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg
Run Code Online (Sandbox Code Playgroud)

如果您有不同的 EFI 系统分区,请调整上面的 grub 命令。

系统从硬盘启动后,在 EFI 系统分区上重新安装 grub 并通过 grub-install 将其注册到固件应该就足够了。

sudo grub-install
Run Code Online (Sandbox Code Playgroud)

  • 哇。没想到这么容易!这是一个地狱的答案!我运行了 `sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi` 而不是上面建议的命令(但上面的命令可能也能正常工作——我不知道)。之后,您可以再次访问您的 linux 操作系统。然后只需运行`sudo update-grub`,一切都应该是可启动的。 (3认同)

Chr*_*s K 5

与 Maxine 一样,我发现 BIOS 中的 UEFI 设置损坏,我的机器无法启动。

就我而言,它是带有 Linux Mint Debian 的 Lenovo ThinkServer RD430,似乎我对 update-grub 或更改服务器中的任何硬盘驱动器所做的任何事情都会导致它无法启动。就我而言,操作系统是通过 USB 安装的 linuxmint-201403-mate-dvd-64bit。(有关会导致 UEFI 无法正常工作的事件的完整说明,请参见下文)

在 ThinkServer TS140 上执行完全相同的步骤并没有导致 UEFI 失去理智一次。查看RD430驱动程序页面,我的BIOS是两个旧版本。我以前从来没有更新过主板上的 bios,所以我不会在有新版本可用时自动更新。更新 bios 后,Maxine 的上述回答有效,只是稍有不同......

# efibootmgr -c --disk /dev/sdX --part Y
# efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0002,0000,0003,0001,0004
Boot0000* linuxmint HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\EFI\linuxmint\grubx64.efi)
Boot0001* LMDE Linux Mint Debian    HD(1,800,15d505800,934c598c-fe3c-fd43-84a1-fa38e4f72552)File(\EFI\linuxmint\grubx64.efi)
Boot0002* Linux HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\elilo.efi)
Boot0003* UEFI: Built-in EFI Shell  Vendor(5023b95c-db26-429b-a648-bd47664c8012,)AMBO
Boot0004* UEFI: VerbatimSTORE N GO 1.00 ACPI(a0341d0,0)PCI(1a,0)USB(1,0)USB(4,0)HD(1,80,1d70780,00000000)AMBO
mint / # 
Run Code Online (Sandbox Code Playgroud)

efibootmgr -c命令添加了两个条目00000002!
Boot0002* Linux HD在引导顺序进入第一是不正确的
0000是正确的。

为了测试这一点,我尝试在没有任何中断的情况下启动,这就是0002入口。正如预期的那样,它没有用。所以我重新启动了服务器,按 F12,然后选择linuxmint. 正如所希望的那样,它确实启动了我的 LMDE 安装。

通过 efibootmgr 删除不需要的条目的方法是:

# efibootmgr -b 2 -B
Run Code Online (Sandbox Code Playgroud)

我使用此命令删除条目00010002. 选项0001来自我多次尝试恢复操作系统的最后一次。


UEFI 笔记

如果您正在阅读本文并且像我以前一样对 UEFI 感到沮丧,这里有一些注意事项和资源:
» 引导到 UEFI Shell 类似于使用 DOS shell。
» 英特尔为 efi shell 命令制作了PDF 参考手册
» Lenovo 的UEFI_on_TS430 文档是我见过的唯一解释 efi shell 用法的资源。
»另一个UEFI Shell参考nPartition管理员指南
» 您可以通过导航到加载程序并执行它来尝试从 efi shell 引导到一个分区。
» UEFI 希望磁盘具有 GPT 分区表,而不是 msdos 部分表。
» UEFI 希望将磁盘上的第一个分区格式化为 fat32 或 vfat。
» 对于“通用”引导/EFI/boot,根目录中必须有一个目录bootx64.efi
» 有些人将其grubx64.efi从安装位置复制到/EFI/boot/bootx64.efi该作弊工具对他们有用。
» 无论何时进行 grub 更改,请efibootmgr -v前后使用以确保重新启动正常。


我的 RD430 体验

在过去的一周里,我已经重新安装了 10 多次操作系统,试图解决这个问题并设置服务器。我的配置是PCIe 2.0 插槽中此 RAID 控制器上的 SSD,其上安装了 LMDE。AOC-S3008L-L8i RAID 控制器(重新刷新到 IT 模式)位于第二个 PCIe 3.0 插槽中,带有 6 个 3TB 驱动器。内存:12GB ECC(3x 4GB)。

以下是我要进行的导致系统无法启动的
更改:» 更改 S3008L-L8i pci 插槽(单独留下 SSD+卡)。
» 禁用板载控制器的LSi 软件 raid bios 提示
» 将我的旧 HighPoint RocketRaid 卡添加到开放的 PCIe 插槽中。
» 对 进行更改/etc/default/grub,然后运行update-grub
也许还grub-install需要运行?