125 – CREATE A DUAL-PARTITION USB BOOT DRIVE USING YUMI

YUMI allows you to make a multiboot USB drive. There are Windows and linux versions of YUMI.

It works by installing syslinux onto your USB drive partition as the boot manager. You can pick from a variety of different ISOs and YUMI will extract the files from the ISO and place them on your USB drive.

However, YUMI will only boot to one partition.

Here, I outline a way to create a two-partition Removable USB drive using YUMI and syslinux (with the help from grub4dos)

In this example I will use 4 ISOs

Partition 1

  • linuxmint-201403-cinnamon-dvd-64bit.iso
  • solydx64_201407.iso
  • ubuntu-14.04-desktop-amd64.iso

Partition 2

  • systemrescuecd-x86-4.1.0.iso.

METHOD

1. Wipe and partition and format a USB drive – create two Primary FAT32 partitions.

If you are a linux user, you can use gparted. If you are a Windows user, you can use a free tool such as Easeus Home Partition Master

2. Download and run YUMI

Select the first partition in YUMI and choose your ISO.

You must select the type of distro first. If you want persistence and the option is offered, you can select that option and adjust the size using the slider.

Once you have added all three ISOs, quit YUMI.

You can test it now if you wish to make sure it boots and works. Note that some distros – e.g. Linux Mint will not boot from the USb drive if using a Virtual Machine.

3. If you are running Windows and have a Removable USB drive, Windows won’t be able to access the 2nd partition, so we need to swap over the partitions

Run RMPrepUSB – select the USB drive in the Drive selection box and type CTRL+O (Drive – Set Windows accessible partition) – enter 2 when prompted and hit OK

You should now see that Windows can only see the 2nd partition.

4. Now run YUMI again and select the systemrescuecd-x86-4.1.0.iso (in this example) and complete the installation process.

If using linux, be sure to select the 2nd partition on the USB drive!

5. If you ran the Windows Step 3 above, now change back to the 1st partition by using RMPrepUSB – Ctrl+O again and enter 2

Ensure you can see the first partition again in Windows Explorer.

6. We now need to install grub4dos to the MBR:

Windows – Run RMPrepUSB – click the Install grub4dos button – Yes (MBR) – if prompted copy over the grldr file.

Linux download grub4dos (use the latest version of 0.4.5c NOT 0.4.6a which is an Alpha version which may have bugs!)

Run bootlace –time-out=0 /dev/sdu (where sdu is your USB drive – e.g. sdc do NOT specify a partition such as sdc1, you must specify the drive)

copy the grldr file to the root of the first partition

7. We now need to make a grub4dos menu (\menu.lst) that will allow us to boot to either syslinux partition – here is a simple example:

\menu.lst

  • title Boot to Partition 1\n Run syslinux from partition 1
  • root (hd0,0)
  • chainloader (hd0,0)+1
  • boot
  • title Boot to Partition 2\n Run syslinux from partition 2
  • root (hd0,1)
  • chainloader (hd0,1)+1
  • boot

That’s it!

THEORY

The USB drive has one Master Boot Record (MBR) and two Partition Boot Records (PBRs)

MBR – contains grub4dos boot loader which loads the \grldr file which then looks for a menu.lst file

PBR1 – The first partition contains a boot loader which was written by YUMI which loads the \multiboot\ldlinux.sys file which then looks for a \multiboot\syslinux.cfg file (on the first partition only)

PBR2 – The 2nd partition contains a boot loader written by YUMI which loads the \multiboot\ldlinux.sys file which then looks for a \multiboot\syslinux.cfg file (on the second partition only)

You can see from the folder structure how YUMI has organised the folders: here is an example for the solydx distro

\multiboot\syslinux.cfg – main menu which loads \multiboot\menu\linux.cfg for linux menu

\multiboot\menu\linux.cfg – linux menu which loads \multiboot\solydx64_201407\isolinux\isolinux.cfg

\multiboot\solydx64_201407\isolinux\isolinux.cfg – contains menu entries for solyd

e.g.

  • #start solydx64_201407
  • LABEL solydx64_201407
  • MENU LABEL solydx64_201407
  • MENU INDENT 1
  • CONFIG /multiboot/solydx64_201407/isolinux/isolinux.cfg
  • APPEND /multiboot/solydx64_201407/isolinux
  • #end solydx64_201407

\multiboot\solydx64_201407\live – contains the squashfs files used for the 2nd boot stage of linux

IMPROVING THE MENU

The first menu allows us to boot from either partition, but it would be nice to be able to boot directly to any of these payloads.

For example, the System Restore CD menu is rather awkward because we have to select the 32-bit boot option because we have the x86 32-bit version of the ISO. It would be nice if we could just boot directly to the System Restore distro…

First, we need to find the .cfg file. Examine the files on the 2nd partition (use RMPrepUSB – Ctrl+O if you need to swap partitions)…

The \multiboot\syslinux.cfg file leads us to /multiboot/menu/system.cfg

The \multiboot\menu\system.cfg file leads us to /multiboot/systemrescuecd-x86-4.1.0/isolinux/isolinux.cfg

This file contains menu entries such as (for the 32-bit menu entry):

  • MENU BEGIN
  • MENU TITLE B) Standard 32bit kernel (rescue32) with more choice…
  • LABEL rescue32_1
  • MENU LABEL 1. SystemRescueCd with default options
  • LINUX rescue32
  • INITRD initram.igz
  • APPEND subdir=multiboot/systemrescuecd-x86-4.1.0
  • TEXT HELP
  • Boot standard 32bit kernel with default options (should always work)
  • ENDTEXT

We can translate this into a grub4dos menu like this:

  • title System Rescue 32-bit\nBoot standard 32-bit kernel with default options (should always work)
  • root (hd0,1)
  • kernel /multiboot/systemrescuecd-x86-4.1.0/isolinux/rescue32 subdir=multiboot/systemrescuecd-x86-4.1.0
  • initrd /multiboot/systemrescuecd-x86-4.1.0/isolinux/initram.igz
  • boot

Notice how we need to put the full path in. An alternative would be to set the root directory – e.g. :

  • title System Rescue 32-bit\nBoot standard 32-bit kernel with default options (should always work)
  • root (hd0,1)
  • root ()/multiboot/systemrescuecd-x86-4.1.0/isolinux
  • kernel /rescue32 subdir=multiboot/systemrescuecd-x86-4.1.0
  • initrd /initram.igz
  • boot

We can repeat this process for the other payloads if we wish and do away with all the syslinux menus completely.

Here is an example \menu.lst file

  • title Run a linux distro \n Run any YUMI linux from Partition 1
  • chainloader (hd0,0)+1
  • title \n
  • root ()
  • title System Rescue\n
  • root ()
  • title =============\n
  • root ()
  • title System Rescue 32-bit Standard\nBoot standard 32-bit kernel with default options (should always work)
  • root (hd0,1)
  • root ()/multiboot/systemrescuecd-x86-4.1.0/isolinux
  • kernel /rescue32 subdir=multiboot/systemrescuecd-x86-4.1.0
  • initrd /initram.igz
  • boot
  • title \n
  • root ()
  • title System Rescue 32-bit (Alternative)\nBoot alternative 32-bit kernel with default options (should always work)
  • root (hd0,1)
  • root ()/multiboot/systemrescuecd-x86-4.1.0/isolinux
  • kernel /altker32 subdir=multiboot/systemrescuecd-x86-4.1.0
  • initrd /initram.igz
  • boot
  • title System Rescue Alternative 32-bit kernel with console in high resolution (1024×768)\nBoot alternative 32-bit kernel with framebuffer console in high resolution\nKMS graphic drivers (Kernel-Mode-Settings) will be disabled.
  • root (hd0,1)
  • kernel /multiboot/systemrescuecd-x86-4.1.0/isolinux/altker32 subdir=multiboot/systemrescuecd-x86-4.1.0 nomodeset vga=791
  • initrd /multiboot/systemrescuecd-x86-4.1.0/isolinux/initram.igz
  • boot
  • title System Rescue Alternative 32-bit kernel with a standard VGA console (no KMS)\nBoot alternative 32-bit kernel and use standard low-resolution VGA\nconsole. KMS graphic drivers (Kernel-Mode-Settings) will be disabled.\nTry this if you can’t get a working console or new a low-resolution mode
  • root (hd0,1)
  • kernel /multiboot/systemrescuecd-x86-4.1.0/isolinux/altker32 subdir=multiboot/systemrescuecd-x86-4.1.0 nomodeset
  • initrd /multiboot/systemrescuecd-x86-4.1.0/isolinux/initram.igz
  • boot
  • title System Rescue – console in 800×600\nBoot alternative 32-bit kernel and use standard graphic driver in 800×600\nKMS graphic drivers (Kernel-Mode-Settings) will be used if appropriate.\nUse that to get a 800×600 resolution and have a KMS compatible card.
  • root (hd0,1)
  • kernel /multiboot/systemrescuecd-x86-4.1.0/isolinux/altker32 subdir=multiboot/systemrescuecd-x86-4.1.0 docache
  • initrd /multiboot/systemrescuecd-x86-4.1.0/isolinux/initram.igz
  • boot

You can change the menu text colours and add a background bitmap – see here for a tutorial on grub4dos.

e.g. Try adding this to the top of the menu

  • #Normal text black with cyan background, Highlighted menu=yellow text with cyan background, Help text=red with light=blue background, Heading is yellow text with white background
  • color black/cyan yellow/cyan red/light-blue yellow/green
  • default 0
  • timeout 3
  • # clear grub4dos header and put a heading above the menu box at position Y=08 X=84 of text colour 3 (cyan) and bright (1), background color is 0 and blink is 0
  • write (md)0x220+1 !BAT\necho -n -P:0000 $[0122] MY MENU \n\0
  • initscript (md)0x220+1

after 3 seconds it will run the YUMI partition 1 menu (menu item 0) if no key is pressed.

USING GRUB4DOS FOR THE WHOLE MENU

The menu below does not rely on syslinux or any of the YUMI boot files. You just need the \multiboot folder from any USB drive made with YUMI.

The grub4dos menu entries can be formulated by inspecting the isolinux\isolinux.cfg files

  • #Normal text black with cyan background, Highlighted menu=yellow text with cyan background, Help text=red with light=blue background, Heading is yellow text with dark green background
  • color black/cyan yellow/cyan red/light-blue yellow/green
  • # set to 800 x 600
  • graphicsmode -1 800 600
  • # set VM to path of USB drive if using a VM to test booting (uncomment next line by removing #) – needed for Mint
  • #set VM=live-media=/dev/sda1
  • #set default boot entry to the 4th entry (0-based numbering)
  • default 3
  • #set a timeout of 30 seconds before the default entry is run
  • timeout 30
  • # clear grub4dos header and put a heading above the menu box at position 00 $[0122] = bright-green text on dark green background
  • write (md)0x220+1 !BAT\necho -n -P:0000 $[0122] MY MENU \n\0
  • initscript (md)0x220+1
  • title \n
  • root ()
  • title Ubuntu\n
  • root ()
  • title ======\n
  • root ()
  • title Try Ubuntu without installing\n
  • kernel /multiboot/ubuntu-14.04-desktop-amd64/casper/vmlinuz.efi file=/cdrom/multiboot/ubuntu-14.04-desktop-amd64/preseed/ubuntu.seed boot=casper cdrom-detect/try-usb=true persistent persistent-path=/multiboot/ubuntu-14.04-desktop-amd64 noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/multiboot/ubuntu-14.04-desktop-amd64/casper/ quiet splash —
  • initrd /multiboot/ubuntu-14.04-desktop-amd64/casper/initrd.lz
  • boot
  • title Install Ubuntu\n
  • kernel /multiboot/ubuntu-14.04-desktop-amd64/casper/vmlinuz.efi only-ubiquity file=/cdrom/multiboot/ubuntu-14.04-desktop-amd64/preseed/ubuntu.seed boot=casper cdrom-detect/try-usb=true persistent persistent-path=/multiboot/ubuntu-14.04-desktop-amd64 noprompt floppy.allowed_drive_mask=0 ignore_uuid live-media-path=/multiboot/ubuntu-14.04-desktop-amd64/casper/ quiet splash —
  • initrd /multiboot/ubuntu-14.04-desktop-amd64/casper/initrd.lz
  • title \n
  • root ()
  • title SolydX\n
  • root ()
  • title ======\n
  • root ()
  • title Start SolydX\n
  • kernel /multiboot/solydx64_201407/live/vmlinuz boot=live config ignore_uuid live-media-path=/multiboot/solydx64_201407/live/ quiet splash —
  • initrd=/multiboot/solydx64_201407/live/initrd.img
  • boot
  • title Start SolydX without Plymouth\n
  • kernel /multiboot/solydx64_201407/live/vmlinuz boot=live config ignore_uuid live-media-path=/multiboot/solydx64_201407/live/ quiet —
  • initrd=/multiboot/solydx64_201407/live/initrd.img
  • boot
  • title Start SolydX (compatibility mode)\n
  • kernel /multiboot/solydx64_201407/live/vmlinuz boot=live config xforcevesa ignore_uuid live-media-path=/multiboot/solydx64_201407/live ramdisk_size=1048576 root=/dev/ram rw noapic noapci nosplash irqpoll —
  • initrd=/multiboot/solydx64_201407/live/initrd.img
  • boot
  • title \n
  • root ()
  • title Linux Mint\n
  • root ()
  • title ==========\n
  • root ()
  • title Start Linux Mint\n
  • kernel /multiboot/linuxmint-201403-cinnamon-dvd-64bit/live/vmlinuz boot=live config %VM% live-media-path=/multiboot/linuxmint-201403-cinnamon-dvd-64bit/live quiet splash —
  • initrd /multiboot/linuxmint-201403-cinnamon-dvd-64bit/live/initrd.img
  • boot
  • title Start Linux Mint (compatibility mode)\n
  • kernel /multiboot/linuxmint-201403-cinnamon-dvd-64bit/live/vmlinuz boot=live config %VM% xforcevesa live-media-path=/multiboot/linuxmint-201403-cinnamon-dvd-64bit/live ramdisk_size=1048576 root=/dev/ram rw noapic noapci nosplash irqpoll —
  • initrd /multiboot/linuxmint-201403-cinnamon-dvd-64bit/live/initrd.img
  • boot
  • title \n
  • root ()
  • title System Rescue\n
  • root ()
  • title =============\n
  • root ()
  • title System Rescue 32-bit Standard\n Boot standard 32-bit kernel with default options (should always work)
  • root (hd0,1)
  • root ()/multiboot/systemrescuecd-x86-4.1.0/isolinux
  • kernel /rescue32 subdir=multiboot/systemrescuecd-x86-4.1.0
  • initrd /initram.igz
  • boot
  • title System Rescue 32-bit (Alternative)\n Boot alternative 32-bit kernel with default options (should always work)
  • root (hd0,1)
  • root ()/multiboot/systemrescuecd-x86-4.1.0/isolinux
  • kernel /altker32 subdir=multiboot/systemrescuecd-x86-4.1.0
  • initrd /initram.igz
  • boot
  • title System Rescue Alternative 32-bit kernel with console in high resolution (1024×768)\n Boot alternative 32-bit kernel with framebuffer console in high resolution\n KMS graphic drivers (Kernel-Mode-Settings) will be disabled.
  • root (hd0,1)
  • kernel /multiboot/systemrescuecd-x86-4.1.0/isolinux/altker32 subdir=multiboot/systemrescuecd-x86-4.1.0 nomodeset vga=791
  • initrd /multiboot/systemrescuecd-x86-4.1.0/isolinux/initram.igz
  • boot
  • title System Rescue Alternative 32-bit kernel with a standard VGA console (no KMS)\n Boot alternative 32-bit kernel and use standard low-resolution VGA\n console. KMS graphic drivers (Kernel-Mode-Settings) will be disabled.\n Try this if you can’t get a working console or new a low-resolution mode
  • root (hd0,1)
  • kernel /multiboot/systemrescuecd-x86-4.1.0/isolinux/altker32 subdir=multiboot/systemrescuecd-x86-4.1.0 nomodeset
  • initrd /multiboot/systemrescuecd-x86-4.1.0/isolinux/initram.igz
  • boot
  • title System Rescue – console in 800×600\n Boot alternative 32-bit kernel and use standard graphic driver in 800×600\n KMS graphic drivers (Kernel-Mode-Settings) will be used if appropriate.\n Use that to get a 800×600 resolution and have a KMS compatible card.
  • root (hd0,1)
  • kernel /multiboot/systemrescuecd-x86-4.1.0/isolinux/altker32 subdir=multiboot/systemrescuecd-x86-4.1.0 docache
  • initrd /multiboot/systemrescuecd-x86-4.1.0/isolinux/initram.igz
  • boot
  • title \n
  • root ()
  • title Reboot\n Reboot the system
  • reboot

Easy2Boot (E2B) is popular multiboot USB solution that also contains agFM and Ventoy. It supports both Legacy and UEFI.
Simply copy on your bootable ISO files to the E2B USB drive and boot! Boot to DOS, Linux, Windows Install ISOs (XP>Win11),
automate Windows installs, WIM files, VHD files, images of flash drives, Linux ISO+persistence, etc.
E2B is unique in that it uses partition images which allows you to directly boot from Secure Boot images (no need to disable Secure Boot or run MOK manager or modify your UEFI BIOS).

eBooks (multi-buy discount 10%)

The following eBooks (in PDF format) are available from the developer (rated 4.5/5 stars).

Also visit Easy2Boot.xyz and the my blog – please subscribe for the latest news, tips, USB boot articles and news of free eBook updates.