How to dual boot Ubuntu and Puppy Linux in USB pendrive. It was actually rather easy although it took me a long while to figure it out. All along I was carrying two thumbdrive, one with Ubuntu Linux installed and the other with Puppy Linux. Why bring along so many Linux distros? Well, each has its own pros and cons. Ubuntu is more complete with its software and GUI interface plus other heavy duty application, but it runs a little slow in my SanDisk 32GB flash drive. Puppy Linux is blazingly fast for its small size distro, and perfect for those times when you need to do quick fixes to your PC.
I tried to find out more info online but no one has any good solution to dual boot Ubuntu and Puppy Linux especially in a thumbdrive. Most were dual booting it in their normal hard drive and the way they go about doing it wasn’t very easy. It requires copying the vmlinuz and initrd into a folder inside the Ubuntu partition and had booting problems for those who tried it. And some people used the UUID for identification of Puppy Linux partition and when I tried it, it didn’t work and it was also complicated to set up.
Then it dawn onto me that Puppy Linux didn’t require MBR modification, all it needed was its own partition to be made bootable. You can’t have Puppy partition bootable as that would render Ubuntu partition unbootable. Then I thought about how GRUB could boot up Windows using chainloader command by passing the booting duty to its own partition for Windows. Giving this idea a go, I edited the GRUB configuration, and voila! It works! Using the chainloader simplifies the entire process. All you needed to do was edit the grub.cfg file (for GRUB 2 or menu.lst if GRUB version 1) and that’s it!
For dual booting of Puppy / Ubuntu Linux, some preparation will be needed. For my SanDisk Cruzer thumbdrive, the partition was done up long time ago (well not that long but for gadget time it was long time ago, haha!), so the /dev/sdx numbering was not in sequence (well, I’m kinda fastidious and would like it to be sdx1, sdx2, sdx3, sdx4 sequence but it would be too troublesome and takes too long to place the /dev/sdx in the proper numbering sequence due to too much data. So left it as sdx1, sdx4, sdx2, sdx3. Perhaps next time when I clean up my flash drive. Anyway, it still works).
Gnome Partition Manager – Gparted
First you need to prepare your flash drive. Fire up Gparted Gnome Partition Manager and allocated your spacing accordingly. I have an earlier partition with Ubuntu Linux
So I just push back the NTFS by 1 GB and create an ext3 partition for Puppy Linux. (Note: make sure you have back up your important data if you are doing any partition resizing). If you are starting clean (which is the best), make sure the first partition is a Windows based partition (eg FAT16, FAT32, NTFS) as Microsoft Windows can only read from the first partition. Next create the Linux partitions giving about >5.5 GB for Ubuntu (more may be needed if you plan to update Ubuntu versions without clean installs, but I don’t have so much space to spare), about 1GB for Puppy. And finally a linux swap partition (about 128MB to 512MB). And you will have something like my USB drive partition configuration.
You can install either Ubuntu first or Puppy Linux first. Either way ok. Though I have not tried it, if you install Puppy First, Ubuntu installer may spot the Puppy partition and include it in the GRUB configuration and solve all your headache. In my case, Ubuntu was already installed, and Puppy came in later, thus making the dual booting of Puppy and Ubuntu configuration a bit more difficult.
Installing Puppy Linux
Boot up the Puppy Linux and install O/S into the your thumb drive. Make sure that the booting is not installed into MBR (which was the default setting).
If you boot up your pendrive now, you will only be able to boot into Ubuntu. So while still in Puppy Linux, navigate to the Ubuntu partition and goto the Grub folder and edit the grub.cfg (or menu.lst). Although the correct way was to create was to use a 40_custom config file and tail into grub.cfg because if Grub were to update (by gtub-mkconfig), any changes that you made would be lost. However I find doing editing the grub.cfg directly this way is simpler for me.
/boot/grub/grub.cfg
If you are in Ubuntu itself, you will need to bring up the terminal and key in:
sudo su gedit /boot/grub/grub.cfg
Navigate to the menu entry area and key in:
menuentry 'Puppy Linux' { set root = (hd0, x) chainloader +1 }
Where “x” is the partition number where your Puppy Linux was installed.
Boot your USB flash drive and give the Puppy Linux entry a try and see if it will boot. If yes, congratulations! You have made your pendrive dual boot Puppy and Ubuntu Linux!