making a multiboot flash drive with grub2
this article is gentoo centric but can be done with most other distro’s pretty easily.
i did this with a 4gb flash disk, but size is not an issue depending on what you plan on putting on there.
First things first, lets make sure you have all the needed tools:
emerge sys-fs/dosfstools
which can be grabbed from here as source or just check your package manager for dosfstools
once we have that, lets partition and format the flash drive:
just wipe the disk and create a new partition (this was done using fdisk):
Welcome to fdisk (util-linux 2.24.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdb: 14.6 GiB, 15610576896 bytes, 30489408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc3072e18
Device Boot Start End Blocks Id System
/dev/sdb1 * 8064 30489407 15240672 af HFS / HFS+
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): p
Disk /dev/sdb: 14.6 GiB, 15610576896 bytes, 30489408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc3072e18
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-30489407, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-30489407, default 30489407):
Created a new partition 1 of type 'Linux' and of size 14.6 GiB.
Command (m for help): p
Disk /dev/sdb: 14.6 GiB, 15610576896 bytes, 30489408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc3072e18
Device Boot Start End Blocks Id System
/dev/sdb1 2048 30489407 15243680 83 Linux
now lets change the type:
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Hex code (type L to list all codes): c
If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information.
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
Command (m for help): p
Disk /dev/sdb: 14.6 GiB, 15610576896 bytes, 30489408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc3072e18
Device Boot Start End Blocks Id System
/dev/sdb1 2048 30489407 15243680 c W95 FAT32 (LBA)
lets make it bootable:
Command (m for help): p
Disk /dev/sdb: 14.6 GiB, 15610576896 bytes, 30489408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc3072e18
Device Boot Start End Blocks Id System
/dev/sdb1 2048 30489407 15243680 c W95 FAT32 (LBA)
Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is enabled now.
now save and exit:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
after you are done with that, lets format the disk:
% sudo mkfs.vfat /dev/sdb1
and now, lets mount the drive and install grub2 on it:
% sudo mount /dev/sdb1 /usb
% sudo grub2-install --no-floppy --root-directory=/usb /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.
now you may notice that on the flash disk there is a folder named "boot", we are also going to create a folder named "iso" where we are going to actually keep the iso images as shown in the grub.cfg below:
% mkdir /usb/iso
now that the hard part is done, we need to add a grub.cfg file & start placing iso's on this disk.
at the time of writing, these are the iso's i had on my boot disk:
Debian netinst 7.4.0 amd64
Gentoo minimal 20140220 amd64
Gentoo minimal 20140211 i386
Kali Linux 1.0.6 amd64
Ubuntu 13.10 amd64
vi /usb/boot/grub/grub.cfg
contents of my grub.cfg (change to suit your needs):
set timeout=30
set default=0
set menu_color_normal=white/black
set menu_color_highlight=white/green
# boot isos
menuentry "Debian netinst 7.4.0 64bit" {
set isofile="/iso/debian-7.4.0-amd64-netinst.iso"
set bootoptions="vga=normal --"
loopback loop $isofile
linux (loop)/install.amd/vmlinuz $bootoptions
initrd (loop)/install.amd/initrd.gz
}
menuentry "Gentoo minimal 20140220 64bit" {
set isofile="/iso/install-amd64-minimal-20140220.iso"
set bootoptions="root=/dev/ram0 init=/linuxrc nokeymap cdroot cdboot looptype=squashfs loop=/image.squashfs initrd=gentoo.igz usbcore.autosuspend=1 console=tty0 rootdelay=10 isoboot=$isofile"
loopback loop $isofile
linux (loop)/isolinux/gentoo $bootoptions
initrd (loop)/isolinux/gentoo.igz
}
menuentry "Gentoo minimal 20140211 32bit" {
set isofile="/iso/install-x86-minimal-20140211.iso"
set bootoptions="root=/dev/ram0 init=/linuxrc nokeymap cdroot cdboot looptype=squashfs loop=/image.squashfs initrd=gentoo.igz usbcore.autosuspend=1 console=tty0 rootdelay=10 isoboot=$isofile"
loopback loop $isofile
linux (loop)/isolinux/gentoo $bootoptions
initrd (loop)/isolinux/gentoo.igz
}
menuentry "Kali Linux 1.0.6 64bit" {
set isofile="/iso/kali-1.0.6_64.iso"
bootoptions="findiso=$isofile boot=live noconfig=sudo username=root hostname=kali quiet splash"
search --set -f $isofile
loopback loop $isofile
linux (loop)/live/vmlinuz $bootoptions
initrd (loop)/live/initrd.img
}
menuentry "Ubuntu 13.10 64bit" {
set gfxpayload=keep
set isofile="/iso/ubuntu-13.10-desktop-amd64.iso"
set bootoptions="-- quiet"
loopback loop $isofile
linux (loop)/linux $bootoptions
initrd (loop)/initrd.gz
}
Leave a Reply