首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查我是在使用GRUB还是GRUB?

如何检查我是在使用GRUB还是GRUB?
EN

Ask Ubuntu用户
提问于 2017-02-27 00:04:15
回答 1查看 19.7K关注 0票数 11

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

为了纠正这个问题,我运行了sudo apt-get install grub-efi,它可能已经修复了这个问题,但是我不想重新启动来找出我错了。

我该如何检查这个问题是否解决了呢?

有人告诉我,我可以运行sudo grub来输入grub shell,然后运行echo $grub_install来告诉我是使用grub-pc还是grub-efi-amd64。但是,我使用的是GRUB2.02,而sudo grub似乎被废弃了。

由于我在Chromebook上,它总是引导到ChromeOS,所以在引导时我无法访问GRUB shell。

有谁可以帮我?

EN

回答 1

Ask Ubuntu用户

发布于 2017-02-28 18:36:00

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

如何判断我的系统是被引导为EFI/UEFI还是还是?

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

可以通过使用包管理器检查GRUB包的哪个版本,如下所示:

代码语言:javascript
复制
dpkg -l | grep grub | grep ii

但是,像GRUB这样的引导加载程序是不寻常的,因为安装包不同于将引导加载程序插入引导过程。通常,您安装Debian包,然后使用它的文件将引导加载程序插入到引导进程中;但是,可以在没有包的情况下完成引导加载程序,而可以在不更改引导过程的情况下安装包。实际上,在您的示例中,GRUB的BIOS和EFI版本都可以作为启动选项。

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

代码语言:javascript
复制
============================= 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)上,这些文件将显示在输出中,如下所示:

代码语言:javascript
复制
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中)也可能相关。如果您使用的是EFI引导加载程序,而不是GRUB,它可能也会出现在某个地方。

此外,EFI模式的引导加载器通常由存储在NVRAM中的条目引用,boot脚本将通过运行efibootmgr来识别这些条目:

代码语言:javascript
复制
=================== 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引导加载程序可用,也不会看到此输出。此外,一些EFIs是错误的,忘记或忽略EFI引导项,但它们通常仍然可以在EFI模式下通过使用各种难看的解决方案来引导。

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

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

所有这些的要点是,您可能同时拥有BIOS模式和EFI模式版本的GRUB,供固件使用。如果是这样的话,两者都会出现在Boot脚本的输出中,并且很难判断哪一个将被实际使用。为此,检查当前的引导模式是最好的方法。偶尔会出现混乱,或者您可能会从一种引导模式切换到另一种启动模式。删除冗余的引导加载程序可以帮助避免混淆,但这可能会有风险--特别是从MBR中删除BIOS模式的引导加载程序,因为这需要使用dd,如果您出错,它可以很容易地将您的磁盘垃圾处理掉。通常最好是让固件可以访问未使用的引导加载程序,而不是冒这种灾难的风险。

票数 7
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/887667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档