鉴于 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-6575b66b5355
ESP 分区的 PARTUUID \EFI\debian\grubx64.efi
。(13
可能是分区号,但根据规范,PARTUUID 是主要标识符。)
该efibootmgr
命令只需要知道磁盘:假设每个磁盘只有一个 ESP,它将自动自行查找该磁盘上的 ESP 分区及其 PARTUUID。因此,我们假设这个 PARTUUID 属于您的/dev/sda13
分区(使用blkid
或lsblk -o +partuuid
来检查)。
要重新创建启动项(或立即为其创建额外副本):
efibootmgr -c -d /dev/sda -L debian -l \\EFI\\debian\\grubx64.efi
反斜杠是双倍的,因为反斜杠是 shell 的特殊转义字符。
此命令将自动查找 ESP 分区/dev/sda
及其 PARTUUID,并为您构建启动项。
efibootmgr
BootNNNN
将自动选择启动项的第一个空闲编号,并自动将其添加为BootOrder
.因此,如果Boot0000
已经存在,它将创建Boot0001
并设置BootOrder
为0001,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 条目。