如何检查我是否正在使用 GRUB-EFI 或 GRUB-PC?

如何检查我是否正在使用 GRUB-EFI 或 GRUB-PC?

我在 ChromeOS 的 chroot 中运行 Ubuntu 14.04,它使用 UEFI 系统。为了安装 WinUSB 来为 Windows 创建恢复媒体,我必须更改grub-efi-amd64grub-pc。WinUSB 为我执行了此过程。据我所知,这会导致我的设备无法启动。

为了尝试纠正这个问题,我运行了sudo apt-get install grub-efi可能已经修复了这个问题的程序,但我不想重新启动来查明是否我错了。

我该如何检查问题是否已解决?

有人告诉我,我可以运行sudo grub以进入 grub shell,然后echo $grub_install告诉我是否正在使用grub-pcgrub-efi-amd64。但是,我正在使用 GRUB 2.02,并且sudo grub似乎已被弃用。

由于我使用的是 Chromebook,它总是启动到 ChromeOS,因此我无法在启动时访问 GRUB shell。

谁能帮我?

答案1

请参阅此问题来确定您的计算机是如何启动的:

我如何知道我的系统是以 EFI/UEFI 还是 BIOS 启动的?

这不是相当与您提出的问题相同,这就是我没有将您的问题标记为重复的原因。通常,引导方法(BIOS 与 EFI)决定哪个版本的 GRUB 是引导计算机的最后一个版本。(当然,如果您安装了其他引导加载程序,您可以通过其中一个引导;这种方法不会区分 EFI 模式 GRUB 和 EFI 模式 ELILO。)

您可以检查 GRUB 的版本包裹使用包管理器进行安装,如下所示:

dpkg -l | grep grub | grep ii

然而,像 GRUB 这样的引导加载程序并不常见,因为它会安装包裹与将引导加载程序插入引导过程不同。通常,您会安装 Debian 软件包,然后使用其文件将引导加载程序插入引导过程;但后者可以在没有软件包的情况下完成,并且可以在不改变引导过程的情况下安装软件包。事实上,在您的情况下,您可能已经两个都BIOS 和 EFI 版本的 GRUB 可作为启动选项。

检查哪些内容可作为启动选项使用的最简单方法是使用启动信息脚本。此脚本将生成一个名为的文件RESULTS.txt,该文件将报告可用的引导加载程序;但是,它需要一些知识来解释输出。BIOS 模式引导加载程序在输出顶部附近显示如下内容:

============================= Boot Info Summary: ===============================

 => Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 40 
    of the same hard drive for core.img, but core.img can not be found at this 
    location.

EFI 模式引导加载程序作为文件存储在EFI 系统分区 (ESP)。这些文件将在输出中显示如下内容:

sda1:     __________________________________________________________________________

    File system:       vfat
    Boot sector type:  FAT32
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /EFI/Boot/bootx64.efi /EFI/ubuntu/MokManager.efi 
                       /EFI/ubuntu/fwupx64.efi /EFI/ubuntu/grubx64.efi 
                       /EFI/ubuntu/shimx64.efi 
                       /EFI/Microsoft/Boot/bootmgfw.efi 
                       /EFI/Microsoft/Boot/bootx64.efi

请特别注意该/EFI/ubuntu/grubx64.efi文件,即 GRUB。(/EFI/ubuntu/shimx64.efi处理安全启动,并且其他文件(尤其是/EFI/ubuntu)也可能相关。)如果您使用除 GRUB 之外的 EFI 引导加载程序,它也可能会出现在某个地方。

此外,EFI 模式引导加载程序通常由存储在 NVRAM 中的条目引用,引导信息脚本将通过运行以下命令来识别这些条目efibootmgr

=================== efibootmgr -v
BootCurrent: 0004
Timeout: 0 seconds
BootOrder: 0000,0002,2001,2003,2002
Boot0000* ubuntu    HD(1,GPT,249432ce-52fe-4533-b029-ba6c1a901382,0x800,0x100000)/File(EFIubuntushimx64.efi)
Boot0001* EFI Network 0 for IPv4 (68-F7-28-DA-88-B8)    PciRoot(0x0)/Pci(0x2,0x4)/Pci(0x0,0x0)/MAC(68f728da88b8,0)/IPv4(0.0.0.0:0<->0.0.0.0:0,0,0)RC
Boot0002* Windows Boot Manager  HD(1,GPT,249432ce-52fe-4533-b029-ba6c1a901382,0x800,0x100000)/File(EFIMicrosoftBootbootmgfw.efi)RC
Boot0003* EFI Network 0 for IPv6 (68-F7-28-DA-88-B8)    PciRoot(0x0)/Pci(0x2,0x4)/Pci(0x0,0x0)/MAC(68f728da88b8,0)/IPv6([::]:<->[::]:,0,0)RC
Boot0004* EFI USB Device (Generic Flash Disk)   PciRoot(0x0)/Pci(0x12,0x0)/USB(0,0)/USB(0,0)/HD(1,MBR,0x4294967218,0x800,0x1f6a800)RC
Boot2001* EFI USB Device    RC
Boot2002* EFI DVD/CDROM RC
Boot2003* EFI Network   RC

请注意,这efibootmgr只能在 EFI 模式启动时使用,因此如果您在 BIOS 模式下启动,您将看不到此输出,即使 EFI 启动加载程序可用。此外,某些 EFI 存在错误,会忘记或忽略 EFI 启动条目,但它们通常仍可通过各种丑陋的解决方法在 EFI 模式下启动。

无论如何,efibootmgr输出看起来很可怕且复杂,但关键点是:

  • 如果 GRUB 配置正确,则Boot####应该有一个条目指向它。在 Ubuntu 中,它应该被称为ubuntu,因此在本例中查找一个ubuntu条目 -- Boot0000。(该数字可以是任何十六进制值。)
  • BootOrder显示尝试启动项的顺序。在本例中,0000是第一个,这意味着将首先尝试该项Boot0000( )。ubuntu

所有这些的目的是,您可能同时拥有 BIOS 模式和 EFI 模式版本的 GRUB 供固件使用。如果是这样,则两者都会显示在 Boot Info Script 输出中,很难分辨实际会使用哪一个。为此,检查您当前的引导模式是最好的方法。有时,可能会发生混淆,或者您可能会从一种引导模式切换到另一种引导模式。删除多余的引导加载程序可以帮助避免混淆,但这可能有风险——尤其是从 MBR 中删除 BIOS 模式的引导加载程序,因为这需要使用dd,如果您犯了错误,这很容易破坏您的磁盘。通常最好让固件可以访问未使用的引导加载程序,而不是冒这样的灾难风险。

相关内容