rEFInd问题:如何删除多个启动项?

刚在我的Mac Pro上安装了Ubuntu,放在一个独立的硬盘上(没有与其他操作系统分区),同时也安装了rEFInd。我成功地让它们都正常启动,并且可以从rEFInd引导到任何位置,没有问题。但是问题是,启动管理器上有3个额外的项目,我想摆脱它们。我一直在寻找答案,但似乎仍然没有解决办法。除了我的OS X、Windows 7和Ubuntu Grubx64(不知道是什么意思)之外,我还有以下项目:
boot\vmlinuz-3.11.0-18-generic.efi.signed boot\vmlinuz-3.11.0-15-generic.efi.signed Boot Legacy OS from whole disk volume 我一直看到有人说“试试这个”,他们只给出方法,却没有具体的操作指南。有没有人能给我一个简单的隐藏这些项目的步骤?
2个回答

有几种方法可以实现你想要的,但首先要明白你有三个(或者可能是四个)启动Ubuntu的不同方式:

  • grubx64.efi 启动GRUB,然后启动Linux内核(根据配置,它还可以提供自己的菜单来启动其他内容)。
  • boot\vmlinuz-3.11.0-18-generic.efi.signed 启动3.11.0-18-generic内核,不使用 GRUB。(它通过EFI stub loader引导,该引导程序已经内置在内核中。)
  • boot\vmlinuz-3.11.0-15-generic.efi.signed 启动3.11.0-15-generic内核,比前一个版本稍旧。
  • "Boot Legacy OS..." 选项 可能 启动BIOS模式下的GRUB —— 你没有描述选择该选项时会发生什么,所以不太清楚它是否真的这样做或者是否有用。
无论如何,这里的重要区别在于GRUB和EFI存根加载器之间。在大多数情况下,两种启动Linux的方法都同样有效,但有时一种比另一种更好。就个人而言,我不喜欢GRUB;在我看来,它臃肿且过于复杂。考虑到您可能需要rEFInd在Mac上管理三重启动,它也是您启动路径中的额外步骤。然而,GRUB是引导Ubuntu的标准方式。请注意,尽管GRUB在rEFInd中只有一个条目,但其自己的菜单(如果您设置它出现)可能会使您能够直接启动rEFInd让您启动的两个Linux内核之一。
就我个人而言,如果它们都正常工作,我会保留所有这三个条目(GRUB和两个内核)。原因是它们为您提供了多个启动计算机的选项;如果其中一个失败,您将拥有其他备选方案。请注意,随着您升级系统并发布新内核,您的内核选择可能会增加。当列表超过该限制时,您可以使用sudo apt-get autoremove将列表保持在两个或三个。
如果你想删除条目,有几种选择,其中大部分涉及编辑 refind.conf(在Linux下可能位于 /boot/efi/EFI/refind):
  • 将您想要避免扫描的文件名添加到dont_scan_files中。请注意,以这种方式隐藏单个内核效率低下,因为您需要在安装新内核时更新列表。不过,这可能是隐藏GRUB的好方法。
  • 将描述不需要的引导加载程序的目录添加到dont_scan_dirs中。(例如,boot用于删除Linux内核或EFI/ubuntu用于删除GRUB。)
  • 将与不需要的引导加载程序关联的卷名称添加到dont_scan_volumes中。请注意,这是唯一一个适用于BIOS/CSM/legacy启动选项的dont_scan_*选项;只需添加相关名称的任何子集即可阻止该条目。
  • 要禁用所有基于磁盘的BIOS/CSM/legacy启动选项,请取消注释scanfor并确保hdbios不在选项中。然而,在您的情况下,这可能是不可取的,因为您说您正在引导Windows 7,通常会以BIOS/CSM/legacy模式引导。不过,如果您设法以EFI模式安装了Windows,那么这可能是一个好选择。
  • 要删除内核选项和所有未来的内核选项,您可以从ESP上的EFI/refind目录的drivers(或drivers_x64drivers_ia32,取决于您的架构)子目录中删除Linux文件系统的EFI文件系统驱动程序。这将使rEFInd无法找到Linux内核,因此这些选项将消失。GRUB不依赖于这些驱动程序,因此它将继续工作。
  • 只有当rEFInd认为在磁盘的MBR或分区中检测到引导代码时,才会出现BIOS/CSM/legacy选项。根据您的“Boot Legacy OS…”选项的描述,rEFInd可能已经在MBR中找到了引导代码。(然而,一些最近版本的rEFInd存在错误识别位置的问题,所以如果您没有使用0.8.7版本,那么该识别可能是不正确的。)因此,擦除引导代码可以从rEFInd的菜单中删除一个条目。不过,这种方法是危险的。我建议只有在您已经了解如何执行此操作的情况下尝试它,这也是为什么我故意提供明确的执行说明 -- 即使我写了一整篇关于如何执行此任务的答案,它可能仍然是不完整的。
refind.conf中,有关refind.conf选项的详细说明可以在注释中找到,并且还可以在rEFInd配置文档页面上找到。

从启动目录中,我成功地将不需要的内核移动到新目录中,这样它们就安全地从启动管理器屏幕中删除了。如果以后遇到任何问题,我可以拔掉其他操作系统的驱动器,这将绕过启动管理器直接启动Ubuntu。现在只是要弄清楚"Boot Legacy OS",结果发现它只是启动引导助理并进入Windows 7。感谢您在此事上的帮助。这真是一次有趣的学习经历。 - whitecrow1
1不应该移动你的内核文件!GRUB依赖于它们所在的位置!在某些情况下,你可能可以成功,但这是一个非常危险的操作! - Rod Smith
我同意,取消scanfor值的注释确实是最好和最干净的解决方案。我在Kubuntu 20.04 LTS上的步骤是sudo nano /boot/efi/EFI/refind/refind.conf,然后删除scanfor internal,external,optical,manual,firmware之前的#。完成!:-) PS(截至2021年),在存在5个GPT分区(在一个磁盘上)时,gptfdisk似乎存在某种故障。无法将混合GPT方案转换为清洁的GPT保护方案,无论是在Mac OS还是在Kubuntu中都不行。尽管gptfdisk确认了更改,但在重新启动后仍然是混合的。(硬件:iMac 8,1 - Clemens

简单解决

rEFInd引导程序菜单中,您可以通过使用键盘的箭头键选择额外的条目,然后按下删除键来隐藏多余的条目!会弹出一个确认对话框...选择是后,该条目将被隐藏,您的引导程序就可以正常工作了!

干杯!


3有趣的事实:另一个答案是由rEFind的开发者编写的。 - Organic Marble
问他我是否错了,因为我用这个解决方案解决了我的问题。 - Soujatya Sarkar
这应该是被接受的答案。详细的低级版本可以,但非常不必要。 - Carlos Pinzón
嗯,这绝对是一种可行的方法。然而,在我的情况下,我想要完全禁用rEFInd中的传统BIOS/MBR引导功能。这可以通过上述更改非常容易地完成,即sudo nano /boot/efi/EFI/refind/refind.conf,然后在scanfor internal,external,optical,manual,firmware之前删除#符号。完成! - Clemens
3这个答案中指定的方法是完全有效的。在我实施这个方法之前,我写了我的上一个答案,所以我的答案忽略了这个选项,因为当时它还不存在。这就是五年后会发生的事情... - Rod Smith
@RodSmith 你介意在底部加上这个作为提示吗? 这是让我有点困惑的地方。 - Typewar
如何在使用del或-隐藏条目后重新显示它? - Matthias Pitscher