GRUB和SYSLINUX之间有什么区别?

这个问题与我发现的Ubuntu及其衍生版本在ISO镜像的桌面发布中同时使用了SYSLINUXGRUB引导加载程序有关。
据说,当从32位ISO镜像启动时,SYSLINUX处理引导过程(显示漂亮的闪屏,带有进度点动画)。
但是,当从64位ISO镜像启动时,使用的是GRUB(黑白屏幕,在屏幕顶部清晰地显示GNU GRUB version...)。
因此,重新表述我的问题,是什么差异导致Ubuntu在其ISO镜像上使用GRUB和SYSLINUX?为什么不只使用其中一个呢? 澄清说明 由于我没有澄清和硬件可用性,这个问题有些令人困惑。我已经添加了this answer(或向下滚动)以更好地解释64位ISO镜像。 答案不是什么 下面的评论线程已经给出了一些想法,但我在这里应该澄清一下。答案不是因为其中一个正确地支持EFI。这个问题旨在寻找更基本的原因,而不仅仅是EFI的支持。
比如说,如果用另一种方式提问,比如“为什么ISO镜像中同时使用GRUB和SYSLINUX?”那么可能会得到这样的答案:“GRUB被包含进来是为了支持支持EFI的系统,而SYSLINUX一直被包含并且适用于只支持BIOS的系统”——这不是我的意图。
我必须承认,EFI的支持很可能是答案的一部分。
然而,我觉得答案不应该只有EFI的支持。肯定还有其他原因,才使得Ubuntu在他们的ISO镜像中包含了两个引导加载程序,对吧?或者,真的只有EFI的支持是唯一的区别吗?如果有的话,请帮助我回答这个问题。

无论如何,进度点动画应该出现,假设图形没有问题。为什么你要将Live CD和Live USB加粗显示,当区别在于64位UEFI镜像和其他镜像之间?你试过将UEFI镜像刻录到CD上并使用Syslinux吗? - muru
这样做会增加混乱,因为GRUB只被64位UEFI支持的镜像使用,而不是其他镜像。我建议采取另一种方式:去掉“live CD/USB”的说法,只使用你所用的镜像,因为差异就在那里。 - muru
1好的,根据要求替换了关键词:Live CD -> 32位ISO镜像;Live USB -> 64位ISO镜像。 - user37165
Syslinux是一种BIOS引导加载程序。用于FAT32格式分区上的32位和64位版本。它是仅适用于BIOS的Windows类型引导加载程序。Grub2仅用于UEFI引导。他们可能可以在BIOS中使用Grub2,但现在它总是更大,并且从历史上来看,他们一直使用syslinux。不确定具体原因。不同的引导加载程序有一些小优势,这样你就知道你是以UEFI还是BIOS方式启动。 - oldfred
@oldfred ISO镜像的文件系统是ISO9660并不是FAT32。Syslinux显然也适用于支持EFI的机器,那么为什么还要同时使用Syslinux和Grub呢? - user37165
我不了解ISO9660的“El Torito”标准。但是我相信UEFI将DVD视为FAT驱动器,然后可以启动。我甚至不知道syslinux能够启动UEFI,但它似乎有很多限制。其中一个主要限制是它不支持安全启动。 - oldfred
@oldfred, muru我已经找到了这个一年多前问题的答案。有历史原因;更多细节请查看我下面接受的答案。 - user37165
2个回答

这是我的最终答案,它基于在Ubuntu Wiki上的此列表中匹配关键词后找到的信息。我找到的是关于Ubuntu开发和规格的过时笔记(即:文字、文字、文字),所以花了我一些时间才得出这个答案。
哎呀,名字写错了。
首先,应该澄清引导加载程序的命名:
- 所有字母大写的名称指的是引导加载程序(例如GRUB、SYSLINUX)。 - 首字母大写的名称指的是项目名称或引导加载程序系列的几个或全部变体(例如Syslinux)。 - 特别地,“Syslinux”是一个包括“SYSLINUX”、“ISOLINUX”、“EXTLINUX”和“PXELINUX”的引导加载程序集合。
根据命名规范,这个问题实际上是在谈论“ISOLINUX”作为“El Torito no-emulation”引导程序,而不是“SYSLINUX”。也许后者在过去被与前者互换使用。无论如何,不要紧。 简要历史 2005年:Ubuntu CD引导加载器选择了ISOLINUX,而不是GRUB。
GRUB曾被提议作为可能的替代引导加载器,但在Warty live CD中尝试时,我们发现与使用ISOLINUX的安装CD相比,在可引导性方面存在显著退步。我们认为坚持基于ISOLINUX的解决方案是长期支持版本的最合适方法。 -- 来自CdBootloader - Ubuntu Wiki
2006年:添加了gfxboot;这支持了2010年引用的信息。
在Dapper中,我们为我们的amd64和i386 CD映像添加了gfxboot,为用户在这些架构上启动Ubuntu CD映像时提供了友好的图形化引导菜单作为他们看到的第一件事[...] -- 来自PortableGfxboot - Ubuntu Wiki 2009年:ISOLINUX(被称为SYSLINUX)仍然用于启动Ubuntu CD。
Ubuntu Live CD仍然使用SYSLINUX进行引导,它不包括以图形模式启动内核的支持。这意味着Live CD会显示一个图形化的引导菜单,然后切换回文本模式启动内核,然后通常会在稍后切换回图形模式。因此,与正常安装的系统相比,Live CD在启动时会出现更多闪烁。-- 来自BootGraphicsArchitecture - Ubuntu Wiki 2010年:已经使用了ISOLINUX,但需要GRUB 2来支持UEFI。
当前的Ubuntu光盘使用ISOLINUX,并使用SuSE的gfxboot扩展来实现图形菜单。
这被证明是相当困难的维护工作,因为在Ubuntu中只有一个人了解与主题相关的代码[...]。
由于GRUB 2最近在上游添加了图形菜单支持,转向使用它有可能减轻我们的维护负担。似乎我们无论如何都需要使用GRUB 2来支持EFI,而在我们的光盘上配置两个不同的引导加载程序是不可取的。
根据foundations-m-grub2-boot-framebuffer,我们需要研究一下我们是否能够支持EFI中的图形启动菜单。GRUB对UGA和GOP图形有一定程度的支持。
这需要使用GRUB进行光盘引导,或者至少具备最基本的配置来支持它[...]。

发现的差异或未发现的差异

通过简要的历史,我们现在了解到:

  • 由于当时(2005年)GRUB存在回归问题,因此ISOLINUX被优先选择。

  • 尽管ISOLINUX不支持以图形模式启动内核,在引导过程中会出现闪烁问题(2009年),但仍然优先选择ISOLINUX。

  • ISOLINUX与gfxboot一起使用,提供了图形菜单,而当时的GRUB没有实现或不可能实现这一功能(2010年)。

  • 自Maverick版本(2010年后)开始,GRUB被添加以支持UEFI启动。

然后,我意识到Ubuntu Live CD包含两个引导加载程序并不是因为GRUB和SYSLINUX之间的差异。

根本原因

从我的阅读中,这些支持事实实际上暗示了以下内容:

Ubuntu的Live CD一直使用特定的引导加载程序,以提供图形菜单和主题,并平滑地显示启动画面。在这种情况下,使用的是SYSLINUX(准确地说是ISOLINUX)。
当UEFI系统越来越普遍时,只有Ubuntu在其Live CD中包含了GRUB(准确地说是GRUB 2),以支持UEFI引导。
总之,我相信这个回答解答了我一个多年来的问题,这个答案终于让我的好奇心得到了满足。
简而言之,GRUB和ISOLINUX都被用于Ubuntu的Live CD,各自有其独特的原因;两者都被包含在Live CD中,以提供更好的启动体验和硬件支持。

好的研究。关于2009/10年之前的Ubuntu grub信息是grub legacy。然后Ubuntu切换到了grub2作为默认引导程序。我认为grub legacy无法与UEFI兼容,尽管许多使grub legacy适用于新系统的功能通常由发行版完成。 - oldfred

这是我的初步答案,可以更好地理解我的问题的某些部分,但仍然没有回答问题本身。

以下是一些澄清:

  • 与32位ISO映像不同,64位ISO映像实际上包括GRUB和SYSLINUX(通过在ISO映像中找到/boot/grub/isolinux目录进行确认)
  • 在支持EFI的机器上引导ISO映像时会显示GRUB。
  • 在仅支持BIOS的机器上引导ISO映像时会显示SYSLINUX。
  • 无论显示GRUB还是SYSLINUX,Plymouth都处理进度点动画(这在第一个评论中由@muru正确指出)

引导体验:我写了“支持EFI”的原因是因为即使我的机器已经实现了EFI,我也关闭了“安全启动”功能(1,2),以便从Live USB引导Ubuntu(我个例中的Xubuntu 14.04)。

1. Xubuntu 14.04 64位版本在安装到本地硬盘后(而不是Live USB)可以在启用Secure Boot的情况下启动。 2. Xubuntu 16.04 64位版本可以在启用Secure Boot的情况下启动。
尝试的方法:我没有使用物理DVD媒体和外部光驱进行尝试,而是使用虚拟化软件(例如我的情况是VirtualBox 4.3)来证明上述情况。
  • VirtualBox 4.3已经具有在EFI和BIOS系统之间切换的选项,可以在Machine > Settings > System > Motherboard - Extended features: Enable EFI (special OSes only)下找到。默认情况下,该选项未勾选(3)。

  • 必须使用64位版本的VirtualBox在64位主机系统上创建虚拟机。我在接下来的尝试中使用了Xubuntu 14.04 64位ISO镜像。

  • 第一次尝试:我使用默认设置运行了ISO镜像(这假定为BIOS系统)。虚拟机将显示带有底部图标的紫色背景。这是SYSLINUX

  • 第二次尝试:我关闭了虚拟机并进入设置,勾选了选项(3)以启用EFI。使用相同的ISO镜像,我再次启动了虚拟机。这次,直到显示GNU GRUB version...的单色文本,需要一些时间。这是GRUB

  • 在这两次尝试中,引导过程都会显示进度点动画。

  • Ubuntu Wiki页面的此部分包含了描述上述两种情况的截屏。

免责声明:这个回答意在阐明启动经验和尝试的方法。然而,这并不是我问题的最终答案。如果我成功自己回答了这个问题,最终答案将另行发布。

谢谢这个信息!我已经成功地通过使用Rufus创建的带有Syslinux引导的.iso镜像来从USB启动,但是使用"dd <iso>"命令却无法启动 - 我注意到它不会创建Syslinux。问题是Ubuntu从硬盘启动时有Grub,所以我不明白为什么Grub在USB上不起作用。 - ransh
@ransh 你可能想了解“哪种方法安装哪个引导程序”,而这个问答并没有涉及到这一点。你应该提出一个新问题(http://askubuntu.com/questions/ask),因为评论不是用来讨论的。 - user37165