Like many of my fellow Purism team members, I do a lot of internal testing on my Librem 5 phone and regularly need to backup my files and settings and restore them on a reset phone. One of the nice things about the Librem 5 is that since it runs PureOS, I have a wide range of backup and restore options at my disposal and can treat it like I was backing up a Librem laptop. On Android I typically had to root the device and trust a proprietary app for backups, or rely on Google to backup things to a Google account without knowing whether all of my settings would make it (and they never did). Backup and restore on a Librem 5 is secure and straightforward.
In my case I wanted to backup to a microSD card so I could insert it into a phone that was at factory settings, mount the disk, and then restore what I needed. I could have used a GUI backup tool, and perhaps I will in a future blog post, but as I’m very familiar with command-line backup tools due to my background as a systems administrator. I decided to use one of the oldest command-line backup tools that I knew would already be installed on the factory system: tar
.
Even though I had reformatted the microSD card with an ext4 Linux file system, by using tar
I didn’t have to worry about preserving permissions on the microSD card so in theory it could have any file system that supported large (> 4Gb) files. With fancy options like -M -tape-length=4096000
passed to tar
to split up its backup into multiple 4Gb files, I could have even backed up to a traditional fat32 microSD card.
Before I did a backup, I first wanted to get a list of all of the packages I had installed on the phone so I could reinstall them as part of the restore. To do this I typed:
dpkg --get-selections | grep -v deinstall | cut -f1 > ~/pkglist
This dumped the list of installed packages, one line at a time, into /home/purism/pkglist
.
I had already been using my microSD card mounted at /mnt/sda1
(a directory I created) to store my music collection. The partition showed up as /dev/sda1
so I added the following line to /etc/fstab
so it would mount at boot if it were present:
/dev/sda1 /mnt/sda1 auto auto,nofail
The auto,nofail
combination of options made it so that it would mount the file system if it existed at boot, but if it didn’t exist, the boot process wouldn’t stall or error out. Of course if I didn’t already have that set up I could have just done it all manually:
sudo mkdir /mnt/sda1 sudo mount /dev/sda1 /mnt/sda1
Next, I changed to the /
directory so the file paths would all be based off of it and ran the tar
command. I decided to add the --one-file-system
option for safety sake as I had made some links between my music collection on the microSD card and my home directory.
cd / sudo tar --one-file-system -czf /mnt/sda1/chestnut_backup.tgz /etc /home /var/spool/cron/crontabs
Let’s talk about the directories I chose to backup. First I decided to backup the /etc
directory because it contains the majority of the important system-level settings I cared about including my personal OpenVPN configuration at /etc/openvpn
, my custom /etc/fstab
file, and a few changes I had made to /etc/apt/sources.list
to pull in staging packages for testing. Then I backed up my entire /home
directory as it contained the bulk of my custom settings for my user. Finally I added /var/spool/cron/crontabs
because I had made a few custom crontab additions to update podcasts automatically a couple times a day.
When I was ready to restore my settings to a “factory” reset phone, I inserted my microSD card and booted, then opened a terminal and created a directory to mount it to and mounted it manually:
sudo mkdir /mnt/sda1 sudo mount /dev/sda1 /mnt/sda1
Next I used tar
to restore the settings from /etc
along with my home directory and crontab:
cd / sudo tar xf /mnt/sda1/chestnut_backup.tgz etc/apt/sources.list etc/openvpn home var/spool/cron/crontabs
Note that when I restored these files that I removed the first /
symbol. That’s because the tar command I used to backup these files stripped that initial /
from the path (this makes it safer to restore files to any directory you wish).
Now that all of my files were in place, including the list of installed packages in /home/purism/pkglist
I was ready to re-install all of the additional packages I had added:
sudo apt update sudo apt install `cat /home/purism/pkglist`
I could have created a new list of packages on the factory system and only installed the difference between the two, but I knew apt
would detect any packages it already had and only install what it needed to. This process took some time, and once it completed I then rebooted the phone so it could boot into the most recent kernel and desktop shell.
If you have ever performed a backup and restore on a Linux system, my process probably seems pretty familiar to you–and that’s the point! You can treat a Librem 5 phone like a standard Linux system and any know-how you already possess instantly translates over.
Purism believes building the Librem 5 is just one step on the road to launching a digital rights movement, where we—the-people stand up for our digital rights, where we place the control of your data and your family’s data back where it belongs: in your own hands.