如何使用 efibootmgr 将小写十六进制更改为大写?

如何使用 efibootmgr 将小写十六进制更改为大写?

小写十六进制对于 grub2 来说似乎是一个问题:

:~$ sudo grub-install --recheck /dev/sdb`

Installing for x86_64-efi platform.
** Warning ** : Boot000a is not EFI 1.10 compliant (lowercase hex in name)
** Warning ** : Boot000b is not EFI 1.10 compliant (lowercase hex in name)
** Warning ** : please recreate these using efibootmgr to remove this warning.
** Warning ** : Boot000a is not EFI 1.10 compliant (lowercase hex in name)
** Warning ** : Boot000b is not EFI 1.10 compliant (lowercase hex in name)
** Warning ** : please recreate these using efibootmgr to remove this warning.
Installation finished. No error reported.

因此,使用小写十六进制,这会阻止从 Grub2 启动。

:~$ modprobe efivars

:~$ sudo efibootmgr

** Warning ** : Boot000a is not EFI 1.10 compliant (lowercase hex in name)
** Warning ** : Boot000b is not EFI 1.10 compliant (lowercase hex in name)
** Warning ** : please recreate these using efibootmgr to remove this warning.
BootCurrent: 000B
Timeout: 1 seconds
BootOrder: 0001,000B,000A,0000,0004
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0004  CD/DVD Drive
Boot000a* Hard Drive
Boot000b* UEFI: TSSTcorp CDDVDW SH-222BB

手册页:~$ sudo efibootmgr -b没有说明如何实现这一点。

附加信息:

无法从 grub2 启动的问题始于定期更新软件包(其中包括 Grub2 软件包)之后。

Ubuntu 14.04 2 64bit 使用 CD 上的 ReFind 程序启动:Boot000b* UEFI:TSSTcorp CDDVDW SH-222BB

上面我们看到 BootCurrent 可以自动大写:BootCurrent: 000B。因此,该过程可以自动完成。但是,Boot000a 和 b 仍为小写。


情况发生了变化:当我使用详细选项 -v 运行 efibootmgr 时,我注意到启动顺序已更改(未显示)。上面您看到 Windows 启动管理器和 ubuntu 没有小写十六进制。我尝试了原始 UEFI 配置,首先是 Ubuntu,其次是 Windows,没有 REFIND CD。现在我可以启动到 Ubuntu,但只能通过恢复模式。

:~$ sudo efibootmgr -v

** Warning ** : Boot000a is not EFI 1.10 compliant (lowercase hex in name) ** Warning ** : please recreate these using efibootmgr to remove this warning. BootCurrent: 0001 Timeout: 1 seconds BootOrder: 0001,0000,0004,000A Boot0000* Windows Boot Manager HD(1,800,84000,7e32cd58-blabla)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS... blabla Boot0001* ubuntu HD(1,800,84000,7e32cd58-blabla)File(\EFI\ubuntu\shimx64.efi) Boot0004 CD/DVD Drive BIOS(3,0,00)P4: TSSTcorp CDDVDW SH-222BB . Boot000a Hard Drive BIOS(2,0,00)P1: Samsung SSD 840 EVO 250GB .

令人费解的是,ubuntu 现在可以在恢复模式下启动(我没有做任何影响 grub 的事情)。有什么意见吗?这并不能解决小写十六进制的问题。

答案1

我怀疑你看到的警告是转移注意力的花招。Boot000a is not EFI 1.10 compliant (lowercase hex in name)和相关信息明确标记为警告,而不是错误。(在计算机中,“警告”几乎总是通知用户某些东西不理想或它可能在某些情况下会导致问题,而“错误”则表示出现停止显示的问题。)请注意,示例输出包含以下语句:

Installation finished. No error reported.

换句话说,一切应该正常工作;警告并未阻止 GRUB 的安装。

我还试图找出导致警告的原因,它是efibootmgr实用程序:

http://efibootmgr.sourcearchive.com/documentation/0.5.4-2ubuntu1/efibootmgr_8c-source.html

生成警告的代码除了显示警告消息外什么也不做;它不会设置会产生其他后续负面影响的标志。

尽管如此,可以想象一些后续程序(例如 GRUB 二进制文件)可能也会遇到小写十六进制数的问题,不是生成警告,但看到警告时会失败。不过,这似乎不太可能;据我所知,GRUB 不会参考 EFIBoot####变量,因此如果 GRUB 正在启动,则可能已经过了它们应该起作用的阶段。

关于这一点的另一点是,带有小写十六进制数字的启动选项的名称表明它们是由您的固件创建的。因此,即使您要删除这些启动选项,它们或其他带有小写十六进制数字的选项也可能会在将来由固件(重新)创建。警告表示这些值不符合 EFI 1.10,但大多数现代计算机都附带 EFI 2.x(又名 UEFI)。因此,警告应该只对这些较旧的 EFI 有影响。

这让我想到了问题的真正核心:你描述了令人恐惧但可能只是转移注意力的警告,但你还没有描述实际问题至少没有足够详细以至于无法使用。您注意到在更新某些软件包后您失去了启动能力,但这是对问题的非常模糊的描述。GRUB 会出现吗?如果 GRUB 出现,它会显示菜单吗?如果 GRUB 尝试启动内核,它会挂起吗?如果是,首先出现哪种类型的输出?您提到使用 rEFInd,但它是否能让您更好地启动 Linux?如果没有,当您使用 rEFInd 启动时会出现什么症状?这些问题的答案对于解决您的实际问题至关重要。我建议您使用此信息发布一个新问题,不要太在意(似乎无害的)警告efibootmgr

相关内容