Due to the increased file size of the Ubuntu LTS 22.04 Desktop image, Linux pen drive creators will soon feel the pain that comes with realizing that a single partition, FAT32 drive won't cut it for peeps wanting to boot this (and other) larger ISOs.
EFI necessitates at least two partitions, since EFI strictly and only supports FAT32.
So I formatted my USB stick to have a FAT32 partition for EFI and an EXFAT partition for storage and everything else like so:
(usb)E:/EFI/
- EFI folder on FAT32 partition(usb)B:/boot/grub/
- grub install(usb)B:/images/
- iso folder containskali-linux-2023.3-live-amd64.iso
andubuntu-22.04.3-desktop-amd64.iso
I decided to keep the grub install on the same partition as the images, thinking that might help, but I also tried it with the grub installed on the FAT32 partition adjacent to the EFI location (it was E:/boot/grub/
instead) and that fails with the same error.
When booting from the USB stick, grub loads up fine. I see the 2 menu options appear and the custom grub theme stuff all shows up, but whether booting Kali or Ubuntu, all that happens is the correct splash screen and logo appear for a second and then I crash land into an initramfs
(busybox?) shell that complains that it:
Could not find the ISO /images/ubuntu-22.04.3-desktop-amd64.iso
Here's the grub config in full (theme stuff not really needed but posting here for clarity's sake):
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
font=unicode
if loadfont $font ; then
set locale_dir=$prefix/locale
set lang=en_IN
fi
set gfxmode=auto
set gfxpayload=keep
set timeout=60
set default=0
set root="(hd0,msdos1)"
insmod all_video
insmod gfxterm
# insmod exfat
insmod part_msdos
insmod part_gpt
insmod regexp
insmod gettext
# insmod ext2
# insmod loopback
# insmod iso9660
insmod gfxmenu
insmod jpeg
insmod png
terminal_output gfxterm
loadfont ($root)/boot/grub/themes/stylish/dejavu_32.pf2
loadfont ($root)/boot/grub/themes/stylish/dejavu_sans_12.pf2
loadfont ($root)/boot/grub/themes/stylish/dejavu_sans_14.pf2
loadfont ($root)/boot/grub/themes/stylish/dejavu_sans_16.pf2
loadfont ($root)/boot/grub/themes/stylish/dejavu_sans_24.pf2
loadfont ($root)/boot/grub/themes/stylish/dejavu_sans_48.pf2
loadfont ($root)/boot/grub/themes/stylish/terminus-12.pf2
loadfont ($root)/boot/grub/themes/stylish/terminus-14.pf2
loadfont ($root)/boot/grub/themes/stylish/terminus-16.pf2
loadfont ($root)/boot/grub/themes/stylish/terminus-18.pf2
set theme=($root)/boot/grub/themes/stylish/theme.txt
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
export theme
# Ubuntu
menuentry "Ubuntu 22.04 Desktop" --class ubuntu --class linux {
set root="(hd0,msdos1)"
set isofile="/images/ubuntu-22.04.3-desktop-amd64.iso"
# rmmod tpm
insmod exfat
loopback loop $isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=${isofile} quiet splash toram tpm_tis.interrupts=0
initrd (loop)/casper/initrd
}
# Kali Linux
menuentry "Kali Linux Live ISO" --class kali --class linux {
set root='(hd0,msdos1)'
set isofile="/images/kali-linux-2023.3-live-amd64.iso"
rmmod tpm
insmod ext2
insmod loopback
insmod iso9660
loopback loop $isofile
linux (loop)/live/vmlinuz boot=live components quiet splash toram noeject findiso=${isofile} tpm_tis.interrupts=0
initrd (loop)/live/initrd.img
}
The grub docs are pretty clear that booting an ISO directly is possible (as it has been for quite some time) - I just can't for the life of me figure out what's wrong here.
To be clear - I don't want a tool or some solution that formats the USB and does this all automagically - I am asking what changes I need to make to the grub.cfg
file in order to get a pre-existing, working grub USB install to boot my ISO images that live on the same USB drive.
Things I've already tried:
- removing all the theme stuff (just in case)
- installing the grub modules sooner (where the commented out lines are) instead of inside the menu entry
- installing grub on the FAT32 partition alongside the EFI folder
- removing the quotes around the iso file path
- crying into my breakfast
- using a different USB stick entirely
- using a different computer/host machine
I am quite sure this isn't a hardware issue - it's a me-not-programming-grub-properly issue but I'm stumped, any help would be really appreciated.
Extra
I think I have the same issue as this guy, and I read through this answer but found no info there I hadn't already read or found elsewhere on the interwebs.
There does seem to be one hint on this dated post on pendrivelinux - a paragraph that stands out:
...grub can read from an exFAT filesystem using this method because it includes an exFAT driver module. However, to actually be able to boot from a Live ISO stored on the exFAT partition via loopback requires that the distribution also include a driver, and that the exFAT partition is automounted during boot. Otherwise, once the boot process has been handed over, the path to the ISO will no longer be found. When that happens, you'll likely be dropped into a BusyBox shell.
That could be what is happening but there's so many "ubuntu flash drive guides" out there that seem to use this exact method I guess I just assumed it would work, but is that not the case?
this exact method I guess I just assumed it would work, but is that not the case
assume it would work for exfat? as in your have tried to include the driver in initrd like "this guy" or not? (btw, "this guy" didn't seem to get it actually included after all) either way, the quote is true, once you get pass grub, the early init of the distro handles the stuff and requires the corresponding kernel module to be builtin or loaded. (But there's this thing Ventoy you might want to play with. I have no idea what "trick" / "different way" it uses though.)