Hybrid bootable USB stick for legacy BIOS & UEFI
This is a simple note for people who are googling this topic right now, and you are welcome.
Backgrounds
-
Legacy BIOS needs bootloaders to be installed into MBR and the reserved space after it.
-
UEFI only needs bootloaders in ESP(EFI System Partition).
-
There is no resource competition between legacy BIOS and UEFI requirements.
Preparations
-
grub-pc-bin and grub-efi-amd64-bin packages for Debian users.
-
An USB storage stick, MBR or GPT. Some unallocated space(1MB is enough) at the beginning of disk if you are using GPT.
-
A vfat partition with the “boot” flag.
Cooking
# mount /dev/sdb1 /media/sdb1
# grub-install --target=i386-pc --boot-directory=/media/sdb1/boot /dev/sdb
# grub-install --target=x86_64-efi --efi-directory=/media/sdb1/ --boot-directory=/media/sdb1/boot --removable /dev/sdb
Configuration(just a template)
# /media/sdb1/boot/grub/grub.cfg
set root=(hd0,1)
menuentry "FreeDOS" {
linux16 /boot/freedos/memdisk
initrd16 /boot/freedos/balder10.img
}
menuentry "Memtest86+" {
loopback loop /boot/systemrescuecd-x86-x.y.z.iso
linux16 (loop)/bootdisk/memtestp
}
menuentry "Ubuntu xx.yy" {
set isofile="/boot/ubuntu-xx.yy-desktop-amd64.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
initrd (loop)/casper/initrd.lz
}
menuentry "SystemRescueCd" {
set isofile="/boot/systemrescuecd-x86-x.y.z.iso"
loopback loop $isofile
linux (loop)/isolinux/rescue64 docache isoloop=$isofile
initrd (loop)/isolinux/initram.igz
}
menuentry "Install Debian GNU/Linux" {
linux /boot/debian/vmlinuz priority=low recommends=false
initrd /boot/debian/initrd.gz
}
menuentry "Debian GNU/Linux Rescue Mode" {
linux /boot/debian/vmlinuz priority=low recommends=false rescue/enable=true
initrd /boot/debian/initrd.gz
}
Done, enjoy fixing others’ computers then, which I already quit :D