문서의 이전 판입니다!
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
부팅하고 정상 작동 여부 확인.