如何从 syslinux 链式加载 GRUB?

如何从 syslinux 链式加载 GRUB?

由于我的设置的当前状态,我想让 Syslinux 作为我的主引导加载程序来链接加载 GRUB2。 Google 提供了大量有关如何从 GRUB2 链接加载 Syslinux 的信息,但对于相反的场景没有真正有用的信息,这正是我正在寻找的。

答案1

我自己从未尝试过,但我在 ArchLinux wiki 上找到了这些详细信息。在一篇恰当标题的文章中:系统Linux。有一个部分标题为:链式加载其他 Linux 系统

摘抄

链接加载另一个引导加载程序(例如 Windows)是非常明显的,因为有一个明确的引导加载程序可以链接到。但对于 Syslinux,它只能加载与配置文件位于同一分区的文件。因此,如果您在单独的分区上有另一个版本的 Linux,但没有共享 /boot,则有必要使用 Extlinux。本质上,Extlinux 可以安装在分区超级块上,并作为独立于 Syslinux 安装的 MBR 的引导加载程序进行调用。 Extlinux 是 Syslinux 项目的一部分,包含在 syslinux 软件包中。

假设您有一个带有 Grub2 的系统,如下所示:

  • /dev/sda3( /)
  • /dev/sda2( /boot)

你可以像这样安装它们:

$ mount /dev/sda3 /mnt
$ mount /dev/sda2 /mnt/boot (only necessary for separate /boot)

然后extlinux安装后执行以下操作:

$ extlinux -i /mnt/boot/syslinux
$ cp /usr/lib/syslinux/{chain,menu}.c32 /mnt/boot/syslinux

并创建这个文件/mnt/boot/syslinux/syslinux.cfg::

timeout 10

ui menu.c32

label Other Linux
    linux /boot/vmlinuz-linux
    initrd /boot/initramfs-linux.img
    append root=/dev/sda3 ro quiet


label MAIN
    com32 chain.c32
    append hd0 0

答案2

假设 GRUB 的文件/boot/grub与 syslinux 位于同一分区上,您可以链式加载第一个名为 的 GRUB 映像,boot.img如下所示:

LABEL GRUB
  MENU LABEL Grub2 chainload
  COM32 CHAIN.C32
  APPEND file=/boot/grub/boot.img

答案3

做这件事有很多种方法。与没有引导加载程序的公共源代码的链式加载 Windows 不同,grub 有多种格式可用,并且添加更多格式并不困难。 CostinStroie 的方法使用加载引导扇区的变体,并且假设您已安装 grub、具有传统 BIOS 并且不是网络引导,则可以正常工作。您还可以使用其他 grub 映像。我曾经有一个 grub 遗留映像,上面有一个 linux 映像头,可以使用 syslinux 的内核关键字加载。您可以(尽管我不知道有谁这样做)将 grub 编译为 syslinux 特定的 c32 映像。其他有趣的包括从 pxelinux 加载 pxe grub 映像、使用 memdisk 加载 grub 软盘映像。

答案4

假设您已将 GRUB2 安装在 PBR 中(而不是在 MBR 中),在另一个分区(例如:sda3)上与 Syslinux(例如:sda)相同的磁盘中,您可以通过以下命令链接加载 GRUB2:

LABEL Other Linux (Linux installed on sda3 & Syslinux installed on sda)
  MENU LABEL Grub2 chainload
  COM32 chain.c32
  APPEND boot 3 

用YUMI测试没有问题

相关内容