![运行 Boot-Repair 后是否需要所有三个 grub 条目?](https://linux22.com/image/971098/%E8%BF%90%E8%A1%8C%20Boot-Repair%20%E5%90%8E%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%E6%89%80%E6%9C%89%E4%B8%89%E4%B8%AA%20grub%20%E6%9D%A1%E7%9B%AE%EF%BC%9F.png)
在双启动 Windows 8 和 Ubuntu 12.04.3 时运行Boot-Repair
修复程序后,grub 菜单中留下了多个条目。其中三个来自
menuentry "Windows UEFI bkpbootmgfw.efi" {
search --fs-uuid --no-floppy --set=root 4659-4959
chainloader (${root})/EFI/Microsoft/Boot/bkpbootmgfw.efi
}
menuentry "Windows Boot UEFI loader" --users "" {
search --fs-uuid --no-floppy --set=root 4659-4959
chainloader (${root})/EFI/Boot/bkpbootx64.efi
}
menuentry "EFI/Lenovo/Boot/bootmgfw.efi" {
search --fs-uuid --no-floppy --set=root 4659-4959
chainloader (${root})/EFI/Lenovo/Boot/bootmgfw.efi
}
Boot-Repair 文档建议使用第二个选项来启动 Windows 8,但同样,第一个选项似乎也能很好地完成工作,最后一个选项可以访问设置。我真的需要所有这些吗,还是我可以简单地将它们注释掉25_custom
?
同样,鉴于 Windows 的原始启动项30_os-prober
已失效,我可以将其注释掉吗?
这些 efi 引导加载程序之间到底有什么区别?
答案1
前两个可能是重复文件。我不知道第三个文件是什么;它可能是另一个重复文件,也可能是联想特有的文件。
背景:EFI 规范规定,每个操作系统都应将其引导加载程序安装在EFI
ESP 目录的子目录中,例如EFI/Microsoft
Windows 或EFI/ubuntu
Ubuntu。该EFI/BOOT
目录是一种特殊情况:它包含一个引导加载程序 ( bootmgfw.efi
),当所有其他引导加载程序都失败时,该加载程序可作为后备。这也是用于可移动介质(如 USB 闪存驱动器)上的引导加载程序的名称。因此,许多操作系统(包括 Windows)都会安装两个引导加载程序副本——一个在官方目录中,另一个在 中EFI/BOOT/bootx64.efi
。GRUB 倾向于选择这两个副本并将它们作为选项显示,因为它们能可能是不同的引导加载程序,尽管它们通常不是不同的。
引导修复使这一过程变得复杂。此程序的旧版本(以及新版本,如果您在高级菜单中选择某个选项)会备份EFI/Microsoft/Boot/bootmgfw.efi
和EFI/BOOT/bootx64.efi
引导加载程序(通过将它们重命名为bkp
放置在文件名开头),并将 GRUB 的副本放置在它们的位置。这样做是为了解决某些 EFI 中的错误。问题是这会创建额外的引导加载程序文件,这会使菜单变得混乱,并在进行手动维护时增加混乱。除非您因为 EFI 损坏而需要使用此备份和替换技巧,否则我建议您不是让 Boot Repair 进行此更改。但请注意,这不会导致您注意到的重复,尽管它影响了 GRUB 在其chainloader
行中输入的文件名。
就我个人而言,我会删除EFI/BOOT/bkpbootx64.efi
(或EFI/BOOT/bootx64.efi
) 条目,因为如果其他工具决定接管该位置,它可能会更改为其他内容。劫持 Windows 引导加载程序的可能性较小——尽管由于我注意到的 EFI 错误,至少有两个工具(Boot Repair 和 rEFInd 的mvrefind.sh
脚本)可以做到这一点,其他工具将来可能会这样做。
提示:该diff
命令是您的朋友。向其传递两个文件名,它会告诉您它们是否相同。没有输出表示文件相同。您可以使用它来发现.efi
系统上的哪些文件与哪些其他文件相同。