如何重新安装 GRUB2 EFI?

如何重新安装 GRUB2 EFI?

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

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

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

答案1

  • 使用实时 USB/CD 启动计算机在 UEFI 模式下。我有两个启动选项<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.
    

    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
    
  • 根据您的 Linux 发行版,您现在可以执行不同的事情。

    • 为了Ubuntu/Debian

      apt-get install --reinstall grub-efi-amd64
      

      或者:

      apt-get install --reinstall grub-efi
      update-grub
      

      上面应该给你一个 grub,但不是可启动的

    • 为了Fedora(最多 16 个,可能适用于其他人):

      yum reinstall grub-efi
      

      在以下命令中,您必须将 sdX 替换为具有要从中启动的 EFI 分区的设备。您--part Y必须将 替换Y 为 EFI 分区的编号(如/dev/sdXY)。

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • 现在输入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
    

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

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

答案2

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

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

configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg

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

在您的系统从硬盘启动后,只需在 EFI 系统分区上重新安装 grub 并通过 grub-install 将其注册到固件中即可。

sudo grub-install

答案3

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

就我而言,这是一台搭载 Linux Mint Debian 的联想 ThinkServer RD430,看起来任何事物我会更新 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 / # 

efibootmgr -c命令添加了两个条目0000,并且0002!按启动顺序第一个
条目Boot0002* Linux HD是不正确的
入口0000是正确的。

为了测试这一点,我尝试不间断地启动,即0002进入。正如预期的那样,它没有工作。所以我重新启动了服务器,按下 F12,然后选择linuxmint。正如所希望的那样,它确实启动了我的 LMDE 安装。

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

# efibootmgr -b 2 -B

我使用此命令删除条目00010002。该选项0001是我最后一次尝试恢复操作系统。


UEFI 注意事项

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


我的 RD430 体验

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

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

答案4

在联想 Yoga 2 Pro 上的 32 位 Ubuntu 14.10 上,我像这样更改为 UEFI 启动:

  • 创建文件夹

    sudo su
    mkdir /boot/efi
    
  • 安装“EFI 系统”分区/etc/fstab

    fdisk -l|grep EFI
    

    这表明:/dev/sda2 2050048 2582527 532480 260M EFI System

    echo "/dev/sda2 /boot/efi   vfat    defaults,sync   0   0">>/etc/fstab
    

    挂载该分区

    mount /boot/efi
    
  • 安装grub-efi-amd64-bin和卸载grub-efi-ia32-bin

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • 以 efi 模式重启 Ubuntu

    update-grub
    
  • 测试它是否启动正常,然后我安装grub-efi-amd64并卸载grub-pc grub-gfxpayload-lists

    aptitude install grub-efi-amd64 grub-pc_ grub-gfxpayload-lists_
    

当系统询问时我选择不删除 /boot。


也许我把它弄复杂了,但这样做本来可以正常工作:

apt-get install --reinstall grub-efi
update-grub

相关内容