GRUB2 부팅 USB/CD 및 기타 ISO 파일을 만드는 방법은 무엇입니까?

GRUB2 부팅 USB/CD 및 기타 ISO 파일을 만드는 방법은 무엇입니까?

ISO 파일을 부팅하고 초기 메뉴 화면을 표시하도록 GRUB2를 얻으려면 어떻게 해야 합니까(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

나는 memdisk이것을 위해 from을 사용합니다. syslinuxCentos에서는 패키지가 무엇인지 모르지만 Debian에서는 package 에 있습니다 syslinux-common. 패키지는 Centos에서 비슷한 이름을 가질 수 있습니다.

또한 아래 스크립트를 사용하여 .iso..img/boot/memdisk/update-grub

데비안이 아닌 시스템에서는 실행할 수 있습니다 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

관련 정보