我正在扩展我的救援 USB 闪存盘。USB 的分区是可启动的,我已经将 GRUB 安装到跳转驱动器的 MBR 中。它运行良好 - 我可以启动弗里多斯并运行一些实用程序,然后我就可以启动平。
我想将 Ubuntu 9.10 LiveCD 添加到这个救援 USB 驱动器中。我有一个可用的跳转驱动器,所以我可以很容易地复制文件。我可以找到menu.lst
GRUB 所需的条目,但 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_configfile
和syslinux_source
命令,所以这似乎也有效:
syslinux_source /boot/syslinux.bin
syslinux_configfile /boot/syslinux/syslinux.cfg
希望其中一种方法对你有用。学习使用 grub 的方法曾多次救了我一命。我曾在美国阿姆斯特丹的一台远程机器上通过串口点击 grub-rescue> 并从现有硬盘加载模块并启动到旧分区/操作系统来修复/重新配置它,从而保存了配置损坏或硬盘移动/更改的 Linux 安装。
答案4
在 Windows 系统上使用 YUMI 似乎是实现此目的最简单的方法。