如何让 GRUB2 引导 USB/CD 等 ISO 文件?

如何让 GRUB2 引导 USB/CD 等 ISO 文件?

如何让 GRUB2 引导 ISO 文件并显示初始菜单屏幕(就像通过 BIOS 引导 USB/CD 时那样)?

例如,以下菜单定义(“/etc/grub.d/40_custom”):

menuentry 'CentOS-8.3.2011-x86_64-dvd1.iso' {
    set root=(hd0,msdos3)
    set isofile=/CentOS-8.3.2011-x86_64-dvd1.iso
    set cdlabel=CentOS-8.3.2011-x86_64-dvd
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz inst.stage2=hd:LABEL=$cdlabel iso-scan/filename=$isofile
    initrd (loop)/isolinux/initrd.img
}

引导至:

在此输入图像描述

但我希望 GRUB2 启动到:

在此输入图像描述

答案1

我为此使用memdiskfrom 。syslinux我不知道 Centos 上的包是什么,但在 Debian 上,它在 package 中syslinux-common。该软件包在 Centos 上可能有类似的名称。

我还使用下面的脚本在运行时自动为中找到的所有文件.iso生成条目。.img/boot/memdisk/update-grub

在非 debian 系统上,您可以运行grub-mkconfig -o /boot/grub/grub.cfg- update-grubupdate-grub 只是 grub-mkconfig 的一个简单包装。

在我的系统上,我已将以下内容另存为/etc/grub.d/42-memdisk,并使其可以使用chmod +x.文件名开头的数字会影响其执行顺序。 按排序顺序grub-mkconfig运行脚本。/etc/grub.d/在我的系统上,它是最后执行的脚本,因此memdisk条目位于 grub 菜单的底部。

#!/bin/sh
set -e

IMAGES=/boot/images
. /usr/lib/grub/grub-mkconfig_lib
if test -e /boot/memdisk ; then
  echo "Found memdisk: $MEMDISKPATH" >&2
  MEMDISKPATH="$( make_system_path_relative_to_its_root "/boot/memdisk" )"

  find "$IMAGES" -name '*.img' -o -name '*.iso' | sort | 
  while read image ; do
      IMAGEPATH="$( make_system_path_relative_to_its_root "$image" )"
      echo "Found image: $IMAGEPATH" >&2
      cat << EOF
menuentry "Bootable image: $(basename $IMAGEPATH | sed -E -e 's/\.(img|iso)$//i')" {
EOF
      prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e 's/^/\t/'
      cat << EOF
        linux16 $MEMDISKPATH bigraw
        initrd16 $IMAGEPATH
}
EOF
  done
fi

相关内容