如何从 syslinux 链式加载 GRUB?

bil*_*ill 6 linux boot-loader grub2 syslinux

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

slm*_*slm 1

我自己从未尝试过,但我在 ArchLinux wiki 上找到了这些详细信息。在一篇标题恰当的文章中:Syslinux。有一个部分标题为:链式加载其他 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)
Run Code Online (Sandbox Code Playgroud)

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

$ extlinux -i /mnt/boot/syslinux
$ cp /usr/lib/syslinux/{chain,menu}.c32 /mnt/boot/syslinux
Run Code Online (Sandbox Code Playgroud)

并创建这个文件/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
Run Code Online (Sandbox Code Playgroud)