gentoo:trouble:03-direct_iso_boot_use_grub

문서의 이전 판입니다!


GRUB에서 ISO이미지로 부팅

비상 상황에서 유용합니다.

https://forums.gentoo.org/viewtopic-t-1167284-start-0.html

/etc/grub.d/41_custom

#!/bin/sh
cat <<EOF
if [ -f  \${config_directory}/custom.cfg ]; then
  source \${config_directory}/custom.cfg
elif [ -z "\${config_directory}" -a -f  \$prefix/custom.cfg ]; then
  source \$prefix/custom.cfg
fi
EOF

ADD_CMND_LINE="iso-scan/filename"
ISO_DIR="/boot/grub/iso-images"
ISO_REAL_DIR="/boot/grub/iso-images"
# If the ISO files are on the root filesystem (`/`), then ISO_REAL_DIR equals ISO_DIR.
# Otherwise, ISO_REAL_DIR must reflect the path relative to the root of the partition returned by `grub-probe`.

ISO_MNT_DIR="/media"
FS_UUID=$(grub-probe --target=fs_uuid $ISO_DIR)

n=1;
nn=1
IFS_OLD=$IFS
IFS=$'\n'
for iso in $ISO_DIR/*.iso; do
        [ "$iso" = "$ISO_DIR/*.iso" ] && break
        mount -o loop,ro $iso $ISO_MNT_DIR
        for cmnd in $(grep -E '^menuentry|/boot/' $ISO_MNT_DIR/boot/grub/grub.cfg); do
                if echo $cmnd | grep -q "^menuentry"; then MENUENTRY[n]="$cmnd"; fi
                if echo $cmnd | grep -q "linux /"; then
                        ISO_IMAGE[n]=$(basename ${iso})
                        LINUX[n]="$cmnd ${ADD_CMND_LINE}=${ISO_REAL_DIR}/${ISO_IMAGE[n]}"
                        fi
                if echo $cmnd | grep -q "initrd"; then INITRD[n]="$cmnd"; n=$((n+1)); fi
        done
        umount $ISO_MNT_DIR
done
SUB=""
MENU="${ISO_IMAGE[nn]}"
while [ "$nn" != "$n" ]
do
        [ "$iso" = "$ISO_DIR/*.iso" ] && break
        if [ "$MENU" != "${ISO_IMAGE[nn]}" ]; then
                SUB=""
                echo "}"
        fi
        if [ -z "$SUB" ]; then
                echo "submenu '${ISO_IMAGE[nn]}' {"
                SUB="1"
                MENU="${ISO_IMAGE[nn]}"
        fi
        echo -e "\t${MENUENTRY[nn]}"
        echo -e "\t\tsearch --fs-uuid --set=root $FS_UUID"
        echo -e "\t\tloopback loop ${ISO_REAL_DIR}/${ISO_IMAGE[nn]}"
        echo -e "\t\tset root=(loop)"
        echo -e "\t${LINUX[nn]}"
        echo -e "\t${INITRD[nn]}"
        echo -e "\t}"
        nn=$((nn+1))
done
[ "$iso" != "$ISO_DIR/*.iso" ] && echo "}"
IFS=$IFS_OLD 

grub-mkconfig -o /boot/grub/grub.cfg

부팅하고 정상 작동 여부 확인.

  • gentoo/trouble/03-direct_iso_boot_use_grub.1768000931.txt.gz
  • 마지막으로 수정됨: 2026/01/09 23:22
  • 저자 baecy