如何从 grub 链接启动到 syslinux?

如何从 grub 链接启动到 syslinux?

我正在扩展我的救援 USB 闪存盘。USB 的分区是可启动的,我已经将 GRUB 安装到跳转驱动器的 MBR 中。它运行良好 - 我可以启动弗里多斯并运行一些实用程序,然后我就可以启动

我想将 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

但 GRUB 的响应是Error 13: Invalid or unsupported executable format。我在 GRUB 命令行上尝试:

 grub> root=(hd0,0)
 grub> kernel /syslinux/isolinux.bin

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

 grub> chainloader /syslinux/isolinux.bin

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

 grub> root=(hd0,0)
 grub> kernel /ubuntu-9.10/install/mt86plus
 grub> boot

并且有效

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

有人知道怎么做吗?

答案1

更新:根据您的输入,我找到了文章“Grub 链式加载 syslinux 并返回”,其基本意思是“patch grub”:

  • 从 GRUB 链式加载 syslinux 似乎不可行无补丁。我不了解 GRUB2。这对于多启动(基于 syslinux)分区可能很有用。

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

补丁页面提到已发布类似补丁grub-devel对于 Grub v2;这个帖子可能是该补丁。或者这条信息,指向此错误报告(日期为 2009 年 11 月,因此非常近)Grub v2 补丁

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


原始答案:

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

title           Debian, memtest86+
root            (hd0,0)
kernel          /boot/memtest86+.bin

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

title           Ubuntu LiveUSB SysLinux boot
root            (hd0,0)
kernel          /syslinux/isolinux.bin

我认为你不需要命令chainloader+来完成这项任务。

答案2

标题 UBUNTU 9.1 ISO 启动

查找 --set-root /ubuntu9.1.iso

地图/ubuntu9.1.iso (hd32)

地图——钩子

根 (hd32)

链式装载机 (hd32)

将其添加到您的 menu.lst,然后将 ubuntu9.1.iso 复制到 menu.lst 所在的驱动器。

答案3

您绝对可以从 grub2 轻松链式加载 syslinux。最简单、最通用的方法是:

在 grub 菜单上按“c”以获取命令行。

set root='hd1,msdos1'
chainloader +1
boot

其中 'hd1,msdos1' 是从 USB 启动的常见值,但您可以使用 搜索大多数文件系统ls,例如,ls (hd1,msdos1)将告诉您有关该部分的信息,然后ls (hd1,msdos1)/显示文件。如果这是 grubnormal无法识别的文件系统,那么您可能需要使用 安装 fs 模块insmod。您可以使用 grub 的search命令来找到它。search --no-floppy --set=root

但是,您可能不需要链式加载 syslinux(或其他任何东西)。 grub 很灵活。例如,在我的 alpine USB 记忆棒上,我经常这样做:

set root='hd2,msdos1'
configfile /boot/grub/grub.cfg

它会直接进入菜单。当然,上面有一个 grub cfg。您也可以手动设置 grub 的启动,无需 syslinux 或磁盘上的 grub。

set root='hd2,msdos1' # or search...
linux /boot/vmlinuz
initrd /boot/initramfs

对我来说,我甚至可以在我的 Xen'd up Alpine USB 上做这样的事情

multiboot2 /boot/xen.gz
module2 /boot/vmlinuz-vanilla modules=loop,squashfs,sd-mod,usb-storage
module2 /boot/initramfs-vanilla

但是,这基本上就是 Alpine 现在似乎附带的内容/boot/grub.cfg。重点是它可以指向不同的操作系统、initramfs 和内核。我认为您也可以直接加载 syslinux 二进制文件,chainloader $path_to_bin而我的 grub 实际上有一个syslinux_configfilesyslinux_source命令,所以这似乎也有效:

syslinux_source /boot/syslinux.bin
syslinux_configfile /boot/syslinux/syslinux.cfg

希望其中一种方法对你有用。学习使用 grub 的方法曾多次救了我一命。我曾在美国阿姆斯特丹的一台远程机器上通过串口点击 grub-rescue> 并从现有硬盘加载模块并启动到旧分区/操作系统来修复/重新配置它,从而保存了配置损坏或硬盘移动/更改的 Linux 安装。

答案4

在 Windows 系统上使用 YUMI 似乎是实现此目的最简单的方法。

http://www.pendrivelinux.com/yumi-multiboot-usb-creator

相关内容