I did successfully boot iso from hard drive
ISO stored at the root of /dev/sda5
I have removed execution from /etc/grub.d/30_os-prober (I don’t need to search installed OSes on disk)
added menuentry to 40_custom. Updated config with grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
For Rocky Linux menu entry is
menuentry "Rocky 8.9" {
insmod part_gpt
insmod ext2
insmod loopback
set isofile="/Rocky-8.9-x86_64-minimal.iso"
loopback loop (hd0,gpt5)$isofile
linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:/dev/sda5:$isofile
initrd (loop)/isolinux/initrd.img
}
Fedora Live
first I have mounted iso to get correct label and path to vmlinuz/initrd.img
blkid|grep loop
/dev/loop0p1: BLOCK_SIZE="2048" UUID="2023-11-01-01-22-57-00" LABEL="Fedora-Xfce-Live-39-1-5" TYPE="iso9660" PARTLABEL="ISO9660" PARTUUID="ac768486-64a1-4ea9-a3f6-e81c65a76afd"
/dev/loop0p2: SEC_TYPE="msdos" LABEL_FATBOOT="ANACONDA" LABEL="ANACONDA" UUID="870D-0C07" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="Appended2" PARTUUID="ac768486-64a1-4ea9-a3f5-e81c65a76afd"
/dev/loop0p3: PARTLABEL="Gap1" PARTUUID="ac768486-64a1-4ea9-a3f4-e81c65a76afd"
find -type f|grep 'vmlinuz\|initrd.img'
./images/pxeboot/initrd.img
./images/pxeboot/vmlinuz
menuentry 'Fedora Live' {
insmod part_gpt
insmod ext2
insmod loopback
set isofile="/Fedora-Xfce-Live-x86_64-39-1.5.iso"
loopback loop (hd0,gpt5)$isofile
linux (loop)/images/pxeboot/vmlinuz root=live:CDLABEL=Fedora-Xfce-Live-39-1-5 rd.live.image verbose iso-scan/filename=$isofile
initrd (loop)/images/pxeboot/initrd.img
}