如何使用 Syslinux 链式加载 Ubuntu 安装?

如何使用 Syslinux 链式加载 Ubuntu 安装?

我尽力详细阐述我的问题。如果您不耐烦,请转到最后一段。

我从官方网站下载了 Ubuntu 13.04,并将文件解压到ubuntu\USB 驱动器上的一个文件夹中(例如 Z:)。因此文件现在位于Z:\ubuntu\

在此之前,我下载了 Syslinux 5.10(6.00 有错误)并使用以下命令将启动代码安装到 USB 记忆棒:

syslinux.exe --mbr --active --directory /boot/syslinux/ --install Z:

然后我将 chain.c32 和所需的库复制到Z:\boot\syslinux并添加到syslinux.cfg(不重要的部分被忽略):

COM32 链.c32

附加 isolinux=/ubuntu/isolinux/isolinux.cfg

Syslinux 启动成功,但无法启动 Ubuntu,提示:

错误:选项‘地图’需要一个扇区”,但我不知道它是什么意思。

然后我尝试使用以下命令加载 Ubuntu 的 isolinux 配置:

配置/ubuntu/isolinux/isolinux.cfg /ubuntu

但只收到消息说:

正在加载 gfxboot...失败:没有此文件或目录

我再次尝试:

配置/ubuntu/isolinux/isolinux.cfg /ubuntu/isolinux/

信中写道:

无法加载 COM32 文件 gfxboot.c32

但我可以看到带有[TAB]关键的标签:

引导:

live live-install 检查 memtest hd 主菜单 帮助

因此我尝试通过命令行启动 Ubuntu:

启动:直播

研究结果表明:

加载 /casper/vmlinuz 失败:没有此文件或目录

我认为 Syslinux 识别Z:\为根目录/,而不是Z:\ubuntu\,因此无法加载 vmlinz。因此我将文件移动到Z:\并重新启动。虽然 syslinux 仍然无法加载 gfxboot,但我使用成功启动到 Ubuntu

配置/isolinux/isolinux.cfg /isolinux/

启动:直播

我不明白为什么它在正确读取 isolinux 配置时无法加载 gfxboot.c32。也许我使用的 syslinux 和 Ubuntu 使用的 isolinux 不一样,并且 bootcode 和 gfxboot 不兼容。

Syslinux Wiki 提到 CONFIG 可以使用不同的配置文件重新启动引导加载程序并使用以下命令设置新的主目录:

配置/路径/到/cfg/file/configfile.cfg /路径/到/new/base/dir

我按照指南操作,但拒绝让 Syslinux 设置Z:\ubuntu\为根目录。也许我误解了本指南。

所以我的问题是,如何将 Ubuntu 或其他操作系统放入独立文件夹并正确配置 syslinux 以将 Ubuntu 或其他操作系统所在的目录设置为根目录,以便我可以成功启动操作系统?

答案1

我不知道这是否还适用,但我遇到了同样的问题,并且仍在尝试解决。我取得了一些成功,希望与大家分享。

首先,因为我正在尝试实现相同的目标,所以我马上就知道他想要实现什么。他正在尝试制作一个多启动 USB 盘,用于安装多个 Linux 发行版。

为了集成每个操作系统并使更新更容易,尝试加载每个发行版的引导加载程序是有意义的,就好像它在文件系统上是独立的一样。因此,他尝试链式加载他们的 isolinux 设置(随 .iso 一起提供)。我也试过这个,但还没有成功。

我发现的唯一解决方法(仅使用 netboot iso 测试)是使用 CONFIG 语句加载新配置(在本例中为 /path/to/distro/isolinux.cfg)的方法。但在本例中出现了一些错误,所以我尝试了它的子配置“menu.cfg”。这跳过了 Ubuntu 启动菜单,但确实成功加载了 Ubuntu 安装程序。

请记住,您还需要在 CONFIG 行或使用下面的 APPEND 指定新主页。

最后,对这个问题发表一些评论。这里与 PATH (Z:) 无关,因为当您实际从 USB 棒运行时,您使用的不是 Windows,而是适用 UNIX 规则。因此,只能以 UNIX 方式输入路径 /xxx/zzz。例如,“我认为 Syslinux 将 Z:\ 识别为根目录 /”没有意义,因为 /=root,而在 Windows (驱动器号+)\ (\=root) 中。

由于您确实与我有完全相同的目标和问题,因此我将分享我未来的任何进展。

编辑:这是最有可能解决所有问题的答案。

您必须记住的简单事实是,COM32 文件在 SYSLINUX/ISOLINUX 的不同版本之间不兼容。SYSLINUX 和 ISOLINUX 本身是相互兼容的。

在 Ubuntu Netboot.iso 上,只使用了一个 COM32 文件,vesamenu.c32。我只是用 USB 上安装的主 syslinux 中的文件 (/boot/syslinux/vesamenu.c32) 替换了它。

然后只需将启动菜单指向原本会启动操作系统安装的文件 (/boot/ubuntu/isolinux.cfg)。使用 CONFIG 即可,它会奇迹般地工作。不再出现“无法加载 vesamenu.c32”的情况。

答案2

好的,在整理事实并重新阅读问题和讨论之后:您不能将操作系统安装到“文件夹”(也就是说,您不能将 Linux 安装到/ubuntu/, you need to install it to/ folder). Linuxes want a full featured partition: they need to put/usr ,/var` 之类的文件夹中,在它们视为文件系统的根目录中。(除了 chrooting)

另外,Linux 无法安装在 FAT-32 上。此文件系统缺少符号链接和一些其他 Linux 运行的基础功能。

您需要 ext3/4、xfs 或其他受支持的真实文件系统。但是,您可以像在任何普通硬盘上一样在 usb 上安装 ubuntu - 只需设置:fat32 或 ext2 分区用于引导{管理器、加载器}和内核映像,ext4 用于操作系统。您将能够apt-get在其中运行程序、保存文档等等。

相关内容