Simple Hand Made Persistent USB that Boots either BIOS or UEFI

Solution 1:

Simple Hand Made Persistent USB

Making a Grub2 booter that uses Persistent partitions is easy.*

  • Boot Installed Ubuntu or Live USB.
  • Insert Target USB.
  • Start GParted.
  • Create a GPT partition table on Target USB.
  • Create a 1MB BIOS boot partition on the left, formatted as unformatted.
  • Add a 300MB FAT32 EFI boot partition next to it.
  • Add an ext4 root partition large enough for the Ubuntu ISO's contents, (~ 3GB for 20.04).
  • Create an ext4 partition labeled casper-rw
  • Add a NTFS data partition if desired.
  • Apply all operations.
  • Flag partition 1 bios_grub.
  • Flag Partition 2 boot, esp
  • Close GParted.

gparted

  • Open the ISO's folder as Administrator, open the ISO using Archive Manager.
  • Extract the ISO's contents to the Target's root partition.
  • Drag and drop the boot and EFI folders from Archive Manager window to the EFI boot partition.
  • Edit sdx2/boot/grub/grub.cfg adding set root=(hd0,3) after the first line that starts with menuentry.
  • Add a space and the word "persistent" after ---.

grub.cfg

  • Install grub, if in BIOS mode or booted from USB drive run:

      sudo mount /dev/sdx2 /mnt
    
      sudo grub-install --boot-directory=/mnt/boot /dev/sdx
    
  • If in UEFI mode on installed system, boot into the Target drive and run the above.

*Booting based on mkusb by sudodus

Solution 2:

I tried to combine the methods

  • described here by C.S.Cameron and
  • by me at this do-it-yourself link

I installed a brand new Lubuntu Focal Fossa operating system in UEFI mode. Running that system I created a USB boot drive starting by creating the partition table with gparted instead of cloning from a compressed image file.

  • MSDOS partition table
  • A FAT32 partition where the content of the iso file is extracted
  • An ext4 partition to be used for persistence

It did not work to create a BIOS bootloader out of the box

sudo mount /dev/sdx1 /mnt/sd1
sudo grub-install --boot-directory=/mnt/sd1/boot /dev/sdx

This is what I was afraid of :-(

I could install the program package grub-pc but it was not used, Instead the system complained that it did not work to install for the efi system. So I removed the program package grub-efi-amd64-bin and after that

sudo grub-install --boot-directory=/mnt/sd1/boot /dev/sdx

worked :-)

I re-installed grub-efi-amd64-bin into my installed system to have it 'complete' for UEFI tasks.

The USB pendrive works both in BIOS mode and UEFI mode. I tested with and without persistence via custom made menuentries.


This is not too difficult, but I am not willing to let a tool, that is made for users without much experience remove and reinstall the program package grub-efi-amd64-bin because it is an important part of the boot system. In other words, I will keep the compressed image files in mkusb and in the instructions at this do-it-yourself link.