备份我的 EFI 启动项以便于恢复

备份我的 EFI 启动项以便于恢复

鉴于 Windows 10 很可能会擦除我的 Linux EFI 启动项,请参阅答案后的评论这里:

如果您设法让 Windows 启动一次,Windows 10 通常会“自我修复”其固件启动项。在此过程中,如果固件中(即列表中)不存在现有的Windows启动项efibootmgr,它通常会侵占Boot0000自己,无论它是否已经在使用中。

我想之前备份我的 EFI 启动项,这样即使 Windows 10 擦除了它,我也可以轻松恢复它。

不过,似乎没有现有的工具可以做到这一点https://github.com/rhboot/efibootmgr/issues/10提到了该efivar实用程序,但有一些手动过程。但是,我找不到该方向的任何进一步信息。

因此就有了这个问题。或者,如果我有这样的 EFI 启动项:

Boot0000* debian        HD(13,GPT,007a058a-8e5e-45df-8d97-6575b66b5355,0x1afa9000,0x113000)/File(\EFI\debian\grubx64.efi)

下次如何重新创建?

答案1

一旦您知道如何操作,并且手头有工具,从头开始重新创建启动项就很容易了efibootmgr。当然。

Boot0000* debian HD(13,GPT,007a058a-8e5e-45df-8d97-6575b66b5355,0x1afa9000,0x113000)/File(\EFI\debian\grubx64.efi)

是所在007a058a-8e5e-45df-8d97-6575b66b5355ESP 分区的 PARTUUID \EFI\debian\grubx64.efi。(13 可能是分区号,但根据规范,PARTUUID 是主要标识符。)

efibootmgr命令只需要知道磁盘:假设每个磁盘只有一个 ESP,它将自动自行查找该磁盘上的 ESP 分区及其 PARTUUID。因此,我们假设这个 PARTUUID 属于您的/dev/sda13分区(使用blkidlsblk -o +partuuid来检查)。

要重新创建启动项(或立即为其创建额外副本):

efibootmgr -c -d /dev/sda -L debian -l \\EFI\\debian\\grubx64.efi

反斜杠是双倍的,因为反斜杠是 shell 的特殊转义字符。

此命令将自动查找 ESP 分区/dev/sda及其 PARTUUID,并为您构建启动项。

efibootmgrBootNNNN将自动选择启动项的第一个空闲编号,并自动将其添加为BootOrder.因此,如果Boot0000已经存在,它将创建Boot0001并设置BootOrder0001,0000如果它以前只是0000.

这将是您当前启动项的有效备份:

(lsblk -o +partuuid; efibootmgr -v) > boot-entry-repair-kit.txt

答案2

无需备份固件 efi 启动条目,只需拥有手头的工具即可轻松恢复它。

通常 Windows 不会删除您的 Linux 条目,但它可能会首先优先考虑自己。现代固件将允许您打开启动菜单,其中应列出设备和已安装的所有 EFI 条目。您应该能够从那里选择 linux 条目,如果需要,还可以重新运行 grub 安装程序或 efibootmgr 来重新排序条目。

如果您的固件较旧,不支持多个条目,您应该能够进入设置并编辑当前条目并记录其中的内容,然后在 Windows 删除它后手动重新输入。

所有这些失败,您可以在 U 盘上安装像 refind 这样的 EFI 选择器,并使用它来搜索您的 EFI ESP 分区中的可启动操作系统,并从那里选择 linux,然后按照上面的方式重新安装 grub。

如果EFI分区中的linux本身损坏,refind有时可以直接进入linux分区并直接启动内核。

另一种方法是在恢复模式下启动 Linux 安装介质并修复 EFI 条目。

相关内容