Skip to content
Syslinux menu scripts to put mulitple livecd distributions on a single USB device.
Find file
Latest commit bd824b3 @yoshi314 fix fedora configuration, new boot parameter is required,
otherwise there is no user setup for the live session
Failed to load latest commit information.
pxe replace opensuse with faster mirror (personal preference)
scripts add script to fetch archboot images,
README update the part about syslinux, 6.xx is well underway
alpine.cfg fix config for recent changes in alpine modloop naming
android-x86.cfg adding android-x86 configuration
antix.cfg tested, fixed
arch.cfg add script to fetch archboot images,
archbang.cfg add archbang config
avg.cfg antivirus season; added avg and bitdefender (v2).
backtrack.cfg backtrack config entry
bitdefender.cfg bitdefended config update
bodhi.cfg bodhi boot bug information
byzantium.cfg byzantium and general porteus derivative config
caine.cfg add caine linux
cdlinux.cfg initial cdlinux config
centos.cfg slightly modified centos readme
clonezilla.cfg removed unnecessary entries from clonezilla cfg - they printed out un…
crunchbang.cfg fix permissions
crux.cfg initial CRUX config for >=2.8
debian.cfg fix permissions
fedora.cfg fix fedora configuration, new boot parameter is required,
finnix.cfg extra info on finnix
fuduntu.cfg fuduntu config; basically a copy of fedora config
gentoo.cfg fix unnecessary +x permissions
gparted.cfg add gparted and ubuntu livecd config
grml.cfg add grml config, mostly working
hiren.cfg fix for c32 path in hiren, initial finnix cfg checkin
ipxe.cfg simplify ipxe config, all in one file
knoppix.cfg fix permissions
kolibrios.cfg test kolibriOS cfg
liberte.cfg update liberte.cfg for 2012.3
lubuntu.cfg lubuntu config updates
mageia.cfg Merge branch 'master' of…
maui.cfg maui linux
mint-debian.cfg typo -_-'
mint.cfg remove lxde name, as it's fairly generic across all mint variants
opensuse-live.cfg config file for live opensuse media
opensuse.cfg replaced opensuse links with openSUSE-current
pclinuxos.cfg extra info on livecd= parameter in pclinuxos config
pmagic.cfg permissions fix
puppy.cfg slightly update puppy linux entry
sabayon.cfg typo, keyboard must be playing tricks on me
slax.cfg add extra slax flag [untested]
slitaz.cfg commiting slitaz 4.0 config that got lost somewhere.
solusos.cfg adding initial config for solus os. same boot system as fedora.
sparky.cfg add sparky linux config
splash.png fix permissions
syslinux.cfg extra info on finnix
sysrescue.cfg restore description due to wild substitution
thinstation.cfg basic thinstation config file
tinycore.cfg update tinycore cfg, added multivt boot option
ubuntu-live.cfg add gparted and ubuntu livecd config
ubuntu.cfg add a few notes to ubuntu netboot
vector.cfg vector linux config. le sigh
void.cfg adding void linux config


Following config files specify a configuration layout that allows a user to put multiple live distributions on a single usb flashdrive, or optical (cd/dvd) disk.

0. You will need :
- a linux system
- syslinux (preferably 4.xx or newer) installed on your linux system, along with mtools.
- a usb flash drive or a blank cd/dvd disk
- iso files of at least one supported distribution

1. Create a partition on your flashdrive, mark it bootable.
2. If you want to use Hiren's boot cd, format it to fat32, otherwise you can go with ext2/ext3.
3. Install syslinux to the partition

syslinux -i /dev/xxx  (when using fat32)


extlinux -i /mnt/directory ( When using ext2/ext3 , you need to mount your device 
and pass the mount point as parameter for extlinux command).

If you did it right, a file "ldlinux.sys" should appear in the root of the partition on usb stick.

4. Copy over the syslinux.cfg and splash.png to the root of device.

4a. Alternatively to 4. , you can instead copy files to /syslinux on the root of the drive, to reduce the clutter.

5. Copy over all .c32 files from your syslinux directory to the root of usb drive. 
Depending on the distribution they can be found in /usr/share/syslinux or /usr/lib/syslinux.

5a. Alternatively to 5. , you can opt to copy *.c32 files into /syslinux to make root directory appear cleaner.

6. Copy .cfg files for distributions you need in the same place as files in previous steps. 

7. Edit syslinux.cfg and remove/add entries to leave only distributions you will need.
7a. Alternatively you can copy over and run script. It will create a new syslinux.cfg referencing existing .cfg files.

./ > new.cfg
mv new.cfg syslinux.cfg

8. Sometimes syslinux/extlinux won't actually install the MBR to the device ( despite what -i command is supposed to do). 
You might have to issue following command as root : 

dd if=mbr.bin of=/dev/xxx  (make sure it's not mounted, just in case), where /dev/xxx is your whole usb device (not the partition).

e.g. dd if=mbr.bin of=/dev/sdc

Usually mbr.bin will suffice, but there are other choices for nonstandard setups or GPT layouts. They will be described later on.
The mbr.bin file can be found in the same directory *.c32 syslinux files are on your system.

8. You can now try booting from the device, either on real system or by using qemu. 
If a syslinux menu shows up, you can start copying over distributions to usb stick. Refer to the next paragraph for instructions.
If you are experiencing problems with booting off usb stick, refer to troubleshooting section. Or you could try preparing the device from beginning.

First, you need to access the contents of the iso image of your live distribution of choice. In most cases, p7zip will do just fine.

You can extract the iso by running "7z x file.iso", or by mounting the iso image and copying out the files. 

You can also copy out files out of the iso with mc. But that's not very reliable. It often copies files out as empty, or doesn't display hidden files at all.

Once you extract the contents of the iso image, check the .cfg file for that distribution for further instructions - usually you don't need to copy over everything to the usb. For example, for Fedora read fedora.cfg file.

You might notice that some configuration files contain a phrase UUID=SOMEUUID . You will need to fix that manually.

UUID is a unique identifier of a given partition. Even in a setup with lots of disks, it can be used to locate the correct partition quickly.

First issue a command 'blkid' with your usb device plugged in to your computer to see uuids assigned to block devices on your system. 

You should get something like this

/dev/sdc1: UUID="D88E-7075" TYPE="vfat"

Where /dev/sdc is the usb device. So the UUID of its partition is D88E-7075 . Replace all occurences of SOMEUUID with that value in config files.

Non-fat32 filesystems will have more complex UUID's. Don't worry about that, and proceed normally.

Example : 
/dev/sda2: LABEL="boot" UUID="e27288df-82eb-44b3-90d3-32ffd6f8c26b" TYPE="ext3"

NOTE : UUID does not apply to CD media. Use label parameter instead, if possible.

some configs specify a SOMELABEL parameter. Replace it with a label of your partition on usb. As before, use the blkid command. 

/dev/sdc1: UUID="D88E-7075" TYPE="vfat" LABEL="MYSUPERUSBPEN"

If the LABEL="...." fragment does not appear, a partition does not have a label. In this case, you can assign it one (or change existing one), by doing : 

tune2fs -L somelabel /dev/sdc1  (ext2/ext3)
dosfslabel /dev/sdc1 somelabel  (fat32)

Make sure the label is fairly unique, so that you avoid the situation where there are multiple partitions with the same label as your usb stick. That could cause boot problems.

If you have a fairly recent computer, check your BIOS for option called "USB Storage Emulation Type". It's usually set to "Auto" by default, and this setting will cause "Boot error" message on startup.  Set this to "Fixed" or "All Fixed" (depending on what's available). 

You can try booting media with qemu, by running : 

sudo qemu -hda /dev/sdc 

Where /dev/sdc is the usb device. If it boots, it means that syslinux installation is correct, but there might be a problem with your BIOS or partition layout.

Qemu treats device as classic hard disk. That means that it won't expose any issues related to USB booting, it will simply test if your bootloader installation is correct.

* The device must not be mounted when testing with qemu ! Otherwise weird things can happen !*

If it doesn't boot under qemu at all, you messed something up. Try reinstalling syslinux/extlinux MBR on the device. If you are using classic partition layout (not GPT), partition should be marked bootable as well.

Other things to try :
- turn your usb device into fake USB-ZIP device.
	It's possible to setup <=8GB flash to appear as USB-ZIP drive. This is said to greatly improve compatibility with certain BIOS configurations, however it's recommended for =<4GB devices, somewhat risky for 8GB devices, and probably impossible for >8GB devices.

More info on it is here : . It basically uses mkdiskimage command from syslinux package.

- zero first 1MB of the drive before installing anything on it. You will have to redo the installation, as it will erase the MBR and probably the partition table.
dd if=/dev/zero bs=1M count=1 of=/dev/sdc 

You can try erasing more than 1MB, but it's not necessary.

- syslinux and extlinux has -s parameter that installs slower, but more compatible MBR to the device.

- There are alternate MBR bootloaders provided with syslinux that you can use. 
In syslinux directory on your system (mentioned earlier) there will be files mbr.bin , mbr_c.bin and mbr_f.bin.

The _c variant will set the drive bios is booting from as the first harddrive when ctrl is held during bootup, the _f will always do this. 
This is helpful if somehow BIOS messes up the drive order and syslinux gets confused.

- even more alternative mbr's : 
altmbr.bin will ignore the active (boot) flag on a partition and instead use a specified partition to boot. 

It needs to be configured by adding a byte with partition number to the end of the file, and then installing it into MBR. 
echo -ne "\x03" >> altmbr.bin  	#to make it use partition #3
cat altmbr.bin > /dev/sda 	#install the MBR

altmbr*.bin file should be 440 bytes long after modification. If it's not, you did something wrong.

It has similar _c and _f variants as mentioned before.

- the gptmbr.bin is for GPT partition layouts. It also has similar _c and _f variants for troubleshooting, which work in similar way to their classic mbr counterparts.

- configure partition type as FAT16, format it with any syslinux supported filesystem. 
This helps with some kingston data traveller II 8GB flashdrives, and odd bioses. Try this if BIOS takes too long to recognize a device at boot, which makes it not appear in boot menu.

- if all else fails, you can use grub2 or other bootloader (plopbt or something else). Grub2 doesn't have some advantages of syslinux, and requires rewriting config files. It's sometimes more compatible on certain hardware configurations (e.g. older intel motherboards). You could try to chainload syslinux from grub2, that could work (untested). It's possible to do the reverse thing (hiren menu has such an option).

No USB boot? No problem.
If your computer cannot boot from usb at all, you could make a livecd/dvd instead. 
Prepare the directory as usual, read the contents of attached script for instructions. Make sure your configs do not use UUID parameter. Testing the generated ISO in qemu should provide realistic results.

Some configs will require modifications (e.g puppy linux - pmedia=cd parameter might be necessary, alpine linux might require change of parameters to load iso9660 modules, etc. ).
Something went wrong with that request. Please try again.