Create a Persistent Debian Live USB Stick The Easy Way

-------------------

Introduction

Debian 9.x is out, and various Live images are available which can be easily flashed onto a USB stick to make a nice, portable Debian. The nice thing about a live image is that it can adapt itself to the hardware it boots up on, so it can be truly portable.

Unfortunately, the live image is static; any changes, additions or customizations are lost when the stick is rebooted. Many users would prefer a 'persistent' image, which would be able to retain changes, and in the good old days Debian used to provide images that included that option. The live image would also contain a large writable partition whose contents would be merged with the static live image at boot up time. Relatively easy to do with Linux.

I found some instructions on how to add persistence to a LiveCD image on a nice page at http://cosmolinux.no-ip.org/raconetlinux2/persistence.html, and then I found that I could simplify those instructions even more. So here is my method:

Instructions

Prep

I'm assuming that you're working from within Windows™. If not, adapt! And I'm also assuming you know how to make your Windows™ machine boot from the USB drive.

First you download an ISO image of whatever Debian Live flavor you prefer. I used the version with XFCE and Non-Free included. Remember a 64-bit image will only boot on a 64-bit machine, so the 32-bit images may be more versatile. Also, of course, you will need a USB stick with enough capacity to hold your ISO image of choice, along with space to make a large extra partition. I used a 16Gig stick. Next you will need some software to write the ISO image to the stick. I won't belabor the many choices that are out there: I used Rufus, which made the job really easy because it uses isolinux automaticallty to make the stick bootable, even updating its builtin support automatically. You will also need a Partition manager, which will either be for Windows™ or for Linux. You'll see why below.

Step 1

While in Windows™, use Rufus to write your image to your USB stick, being sure to leave the file system as FAT32. You'll end up with a fully bootable USB stick with one large FAT32 partition holding the live system. Go ahead and boot it up, just to make sure.

Step 2

Next you're going to add persistence, and you can do that almost entirely from within Linux or using a combination of Linux and Windows™. The first tricky part is to make a modification to GRUB, and since you're Linux is not persistent yet, you will have to boot back into Windows™.

Navigate to the directory /isolinux on your flash drive. Open the text file menu.cfg in your favorite editor which understands unix text files (I used Geany). This is a long file because it describes many menu options. Just modify the first option block by finding the line

APPEND initrd=/live/initrd.img-4.9.0-3-amd64 boot=live components

and adding the word "persistence" after the word "live." The result should look like

APPEND initrd=/live/initrd.img-4.9.0-3-amd64 boot=live persistence components
Step 3

Next, either within Windows™ or in your not-yet-persistent Linux environment, use your favorite partition manager to shrink the FAT32 partition down to a size just big enough to hold its current contents, plus a little padding, maybe an extra half a gig or so. Then in the empty space add an ext4 partition and label that partition persistence.

Step 4

Now boot back into the USB stick if you're not there already, and mount the new partition. Change the ownership of that partition to the default username of the live distro (which is, confusingly, "user".) If the partition is mounted as /media/user/persistence (which it probably will be) then use

sudo chown user /media/user/persistence

Step 5

Finally create a one-line text file called persistence.conf in the root of the persistence partition, with the one-line reading / union, which will direct the file system on boot to merge this partition with the root of the live system. Easy way to do that is

cd /media/user/persistence
echo / union > persistence.conf

Reboot the USB stick and you will be done. Test it by dropping a new file in your home directory and rebooting again; the new file will still be there!

Even Better...

If you want to skip steps 2 through 5, use the latest version of Rufus to write your ISO file to your USB stick. Rufus is able to recognize a 'live' ISO and offers the option of creating a persistence partition of any size, writes the persistence.conf file, and modifies the appropriate line in GRUB. That pretty much makes this little article useless, but hey...

-------------------

The USB stick you just made should be able to boot up on many different machines (as long as they match the architecture of the distribution you chose) and find the devices, network hardware, and so on. Accommodating this versatility makes the distro a little clunky, but at least with the persistent version you can make sure that your favorite editors, tools and so on are already there, waiting to be used.

One final note of warning: by default the 'Live' image will set your hardware clock to UTC, so if your're booting a Windows machine (which usually has the system clock set to local time) your clock will be a little off. If you make the 'Live' image persistent, you can make the necessary changes to the Debian system to also keep the system clock on local time.

-------------------

This is FABbnet!

-------------------

This document maintained by rgm at fabbnet.net.
Material Copyright © 2017.