如何从 grub 到 syslinux 进行链式启动?

pca*_*mic 5 linux grub boot syslinux

我正在扩展我的救援 USB 闪存盘。USB 的分区是可引导的,并且我已将 GRUB 安装到跳转驱动器的 MBR 中。它工作得很好 - 我可以启动Freedos并运行一些实用程序,并且我可以启动PING

我想将 Ubuntu 9.10 LiveCD 添加到此救援 USB 驱动器中。我有一个可用的跳跃驱动器,所以我可以很容易地复制文件。我可以找到menu.lstGRUB 所需的条目,但 Ubuntu LiveUSB 使用相当复杂的 syslinux 配置。此外,我想保留尽可能多的当前 LiveCD/LiveUSB 外观,而不将 syslinux 配置移植到 GRUB。

在〜quack的建议下,我尝试了menu.lst以下条目:

 title Ubuntu 9.10 LiveCD
 root=(hd0,0)
 kernel /ubuntu-9.10/syslinux/isolinux.bin
Run Code Online (Sandbox Code Playgroud)

但 GRUB 响应为Error 13: Invalid or unsupported executable format. 然后我在 GRUB 命令行尝试:

 grub> root=(hd0,0)
 grub> kernel /syslinux/isolinux.bin
Run Code Online (Sandbox Code Playgroud)

因为我在该位置有第二个isolinux.bin文件,但 GRUB 响应了相同的错误。我也尝试过:

 grub> chainloader /syslinux/isolinux.bin
Run Code Online (Sandbox Code Playgroud)

并再次收到错误 13。最后,我在 GRUB 命令行尝试:

 grub> root=(hd0,0)
 grub> kernel /ubuntu-9.10/install/mt86plus
 grub> boot
Run Code Online (Sandbox Code Playgroud)

那行得通

我真正想要的是一种让 GRUB 调用 syslinux/isolinux 引导加载程序的方法。然后 syslinux 可以加载它自己的菜单等等。

有人知道怎么做吗?

qua*_*ote 4

更新:根据您的条目,我找到了文章“Grub chainloads syslinux and back”,它基本上说“patch grub”:

  • 如果没有补丁,从 GRUB 链式加载 syslinux 似乎是不可能的。我不知道GRUB2。这对于多重引导(基于 syslinux)分区很有用。

  • 可以从 GRUB4dos(在不同的分区上)链式加载 syslinux。我通过映射来管理它,(再次)解释在这里。它解决了多重启动 USB 设备的一些问题

补丁页面提到类似的补丁已发布到grub-devel for Grub v2;这篇文章可能就是那个补丁。或者这条消息,它指向Grub v2 补丁的错误报告(日期为 2009 年 11 月,因此是最近的)。

要使用其中一个补丁,您需要下载您首选 Grub 版本的 Grub 源代码,检查它是否已包含该补丁,尝试应用该补丁,然后重新编译并重新安装新的 Grub。


原答案:

我会先尝试测试一个简单的 Grub 条目。这是 Debian 系统上 Memtest86+ 实用程序的标准 Grub 条目:

title           Debian, memtest86+
root            (hd0,0)
kernel          /boot/memtest86+.bin
Run Code Online (Sandbox Code Playgroud)

只需尝试用您的值调整它们(根据需要更改根分区或内核路径):

title           Ubuntu LiveUSB SysLinux boot
root            (hd0,0)
kernel          /syslinux/isolinux.bin
Run Code Online (Sandbox Code Playgroud)

我认为您不需要该chainloader+命令来完成此任务。