如何检查我使用的是 GRUB-EFI 还是 GRUB-PC?

sna*_*che 10 grub2 uefi grub-efi chromeos chromebook

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

为了解决这个问题,我跑了sudo apt-get install grub-efi这可能已经解决了这个问题,但我不想重新启动以找出万一我错了。

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

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

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

谁能帮我?

Rod*_*ith 7

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

如何判断我的系统是作为 EFI/UEFI 还是 BIOS 启动的?

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

您可以使用包管理器查看安装了哪个版本的 GRUB,如下所示:

dpkg -l | grep grub | grep ii
Run Code Online (Sandbox Code Playgroud)

但是,像 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.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

请特别注意该/EFI/ubuntu/grubx64.efi文件,即 GRUB。(/EFI/ubuntu/shimx64.efi处理安全启动,其他文件,尤其是/EFI/ubuntu.

此外,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
Run Code Online (Sandbox Code Playgroud)

请注意,efibootmgr它只能从 EFI 模式启动使用,因此如果您在 BIOS 模式下启动,即使 EFI 启动加载程序可用,您也不会看到此输出。此外,一些 EFI 有问题并且会忘记或忽略 EFI 引导条目,但它们通常仍然可以通过使用各种丑陋的解决方法以 EFI 模式引导。

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

  • 如果 GRUB 配置正确,Boot####则应有一个条目指向它。在 Ubuntu 的情况下,它应该被称为ubuntu,所以寻找一个ubuntu条目——Boot0000在这种情况下。(数字可以是任何十六进制值。)
  • BootOrder显示尝试引导条目的顺序。在这种情况下,0000是 first,这意味着将首先尝试Boot0000条目 ( ubuntu)。

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