grubx64和shimx64之间有什么区别?

我对Linux还不熟悉。我在我的Mac上安装了Ubuntu,并使用rEFInd引导它。我看到了两个选择:
  1. EFI\ubuntu\grubx64.efi
  2. EFI\ubuntu\shimx64.efi
它们都启动到Ubuntu。这两者有什么区别,我应该使用哪一个?是我做错了什么导致两个都显示出来吗?

2你好,shimx64.efi 是安全启动选项。 - mojo706
@mojo706 我建议你将那个回答稍微扩展一下,然后发布出来。 - Eliah Kagan
在 Fedora Core 中还有第三个文件 shimx64-fedora.efi :) - Yaroslav Nikitenko
1个回答

通常,EFI系统分区(ESP)上的EFI/ubuntu/grubx64.efi是GRUB二进制文件,而EFI/ubuntu/shimx64.efi是shim的二进制文件。后者是一个相对简单的程序,提供了在启用安全启动的计算机上引导的方法。在这样的计算机上,未签名的GRUB版本将无法启动,并且无法使用Microsoft的密钥对GRUB进行签名,因此shim填补了这一差距,并添加了自己的安全工具,与安全启动的工具类似。实际上,shim会向固件注册自身,然后启动一个名为grubx64.efi的程序,该程序位于它所在的目录中,因此在没有安全启动的计算机上(例如Mac),启动shimx64.efi就像启动grubx64.efi一样。在启用安全启动的计算机上,启动shimx64.efi应该会启动GRUB,而直接启动grubx64.efi可能不起作用。
请注意,可能存在一些歧义。特别是,在使用shim的Secure Boot环境中,如果您想使用引导管理器或引导加载程序而非GRUB,您必须将该程序命名为grubx64.efi,即使它不是GRUB。因此,如果您要在启用了Secure Boot的计算机上安装rEFInd,则grubx64.efi可以是rEFInd的二进制文件。但是,这个二进制文件可能不会驻留在EFI/ubuntu中;它和一个shim二进制文件可能会放在EFI/refind中。另外,由于您使用的是Mac(不支持Secure Boot),所以没有必要以这种方式安装rEFInd;将rEFInd安装为EFI/refind/refind_x64.efi(默认位置和名称)更加合理。
请注意,rEFInd文档中包含关于Secure Boot的整个页面。由于您使用的是Mac,您可能不需要阅读它,user190735。我只是提到它,以防其他读者试图将rEFInd与Secure Boot一起使用。

1不错的应用程序,还可以添加这个链接:https://wiki.ubuntu.com/SecurityTeam/SecureBoot - Raja G
6微软是否签署了shimx64.efi文件? - Mâtt Frëëman
10是的,微软签署了shimx64.efi - 至少,这是Ubuntu在安装Secure Boot计算机上的版本。(还有未签名的Shim二进制文件可用;或者您可以安装自己的Secure Boot密钥并自行签署shimx64.efi,以完全控制计算机的Secure Boot过程。 - Rod Smith
Fedora和Ubuntu在安全启动成功后(运行时)采取了不同的方法。在前者中,shim还会将标志传递给内核,以指示它是通过安全启动加载的,并且在运行时,内核会验证所有设备驱动程序。而在后者中,内核不执行此运行时验证。 - vulcan raven
1@vulcanraven,以前是这样的,但Ubuntu已经开始验证内核模块有一段时间了。(我记不清这个变化是什么时候发生的,但这是几年的时间单位。)我一直不得不签署VirtualBox使用的模块(这些模块在Ubuntu上安装为树外内核模块),以便让VirtualBox工作得相当长时间了。(我用于此的脚本的时间戳是2017年5月。) - Rod Smith
为了以后能找到这个信息:如果你没有shimx64,并且想要它,执行sudo apt-get install shim-signed将会神奇地使其出现在EFI/ubuntu文件夹中,并在sudo efibootmgr -v中显示出来 :) - Hugh Perkins