efibootmgr 创建一个条目,其中 DevPath 设置为 Venhw 而不是 PciRoot

efibootmgr 创建一个条目,其中 DevPath 设置为 Venhw 而不是 PciRoot

您好,我遇到了一个大问题,因为您看到当我使用efibootmgr它创建启动项时,它只会在 EFI 启动菜单中生成一个无法启动的日文字符,这非常糟糕。

另一方面,当我在 EFI shell 中使用 bcfg 时,它工作正常。使用的 efibootmgr 命令是:efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"而 bcfg 命令是:bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"

当我这样做时,bcfg boot dump -vefibootmgr 和 bcfg 条目之间的区别如下:

DevPath对于 bcfg 所做的条目是,而PciRoot(0x0)/Pci.....\EFI\refind\refind_x64.efi对于 efiboomgr 所做的条目只是说VenHw(99E275E7-75AO-4B37)

您是否知道如何让 efibootmgr 工作?或者,我需要在命令调用中使用什么选项才能使用 bcfg 指定内核参数?

答案1

如果efibootmgr正在创建一个像您描述的那样的条目(VenHw(99E275E7-75AO-4B37)),那么这听起来像是efibootmgr固件中的一个错误。也就是说,考虑一下efibootmgr您指定的命令:

efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"

这件事有两点不寻常:

  • 磁盘设备-- Linux 中的大多数磁盘设备的名称形式为/dev/sd?,其中?是从上到下的字母a。某些设备(例如某些 SSD 卡)的文件名采用其他形式,例如/dev/mmcblk0(这是从内存中获取的,可能不太正确)。我不记得曾经见过像 这样的设备名称/dev/nvme0n1。这并不是说它是错误的,但至少它是不寻常的,你应该仔细检查一下。我会特别小心不要包含分区号——这就是 选项-p的用途efibootmgr
  • 文件规范-- 的旧版本efibootmgr要求使用 EFI 语法指定文件 -- 即使用反斜杠 ( \) 而不是斜杠 ( /) 分隔目录条目。由于 Linux shell 通常以独特的方式处理反斜杠,因此这还要求引用整个路径名或将反斜杠加倍,因此您需要指定-l \\EFI\\refind\\refind_x64.efi-l "\EFI\refind\refind_x64.efi。我听说 的最新版本efibootmgr将接受更传统的 Unix/Linux 形式并在内部进行“翻译”,但我不知道该功能的具体添加时间,而且您还没有说明您使用的是哪个版本的 Ubuntu。因此,我建议您使用加倍或引用的反斜杠,而不是斜杠。

当然,从实际情况来看,如果你通过 获得了一个有效的条目bcfg,那么就不需要对 做任何其他事情了efibootmgr。我猜你问这个问题是因为它应该工作,并且因为您希望能够从 Ubuntu 执行此类维护。

答案2

我遇到了完全相同的问题。尝试使用 nvme 磁盘通过 efibootmgr 创建启动项。它没有启动,并且 bios 中的启动菜单只显示该条目的日文(或中文?)字符。从另一个操作系统检查启动项显示新创建的条目为 VenHw 类型。

但是问题是分区号不正确。我的根分区和其他一些分区位于加密的 lvm 卷中。因此,我为 efibootmgr 指定了该加密分区,而不是应该指定的 /boot 分区。这可能不是您的情况,但我还是写了这篇文章,以防其他人因为同样的原因遇到这个问题。仔细检查您的分区号和 efibootmgr 的其他参数。

答案3

您需要编辑 refind.conf 文件并将路径改回 PciRoot。记下设备的完整描述,以便您可以将其输入到 conf 文件中。只需确保选择正确的 PciRoot 即可;)

相关内容