Up until a few years ago, I mostly used interface-driven backup applications. In some cases, these would spare me from reading a manual, or opening the terminal. However, even I have come to realize the value of a simple, terminal driven application - that usually has fewer bugs, is much faster and can be automated (scripted) easily.
restic is an example of that; We’ll use that below.
Here’s how-to create an encrypted backup on the command line:
- First of all, plugin the external HDD you want to backup to
- I’m assuming it’s already formatted and ready to go
- By default, you should be prompted whether to open the drive (and thus mount it)
- It should be mounted at `/home/your_username/some-long-uuid-string-…
- Open up the Terminal: Menu > System Tools > Terminal
Install the backup application:
guix package -i restic
Find out where where your drive is mounted:
$ ls /media/your_username # example: ls /media/franz # 68bcdc8a-3661-4c0a-81ce-4d5077a1367f/
I’d suggest to create a sub-folder for the backup. For ex.
mkdir /media/your_username/some-long-uuid-string/backup # example: mkdir /media/franz/68bcdc8a-3661-4c0a-81ce-4d5077a1367f/backup
Now you can configure your backup. This will prompt you for an encryption password.
restic init --repo /media/your_username/some-long-uuid-string/backup # example: restic init --repo /media/franz/68bcdc8a-3661-4c0a-81ce-4d5077a1367f/backup
Next, create a bash file, to easily run the backup, whenever the drive is attached. For this, you can use your preferred text-editor; here’s how-to open
If you simply want to backup all your files, with a few exclusions (I have quite a few), write something like this into the
backup.sh (make sure to use your username and backup location path!):
restic -r /media/franz/68bcdc8a-3661-4c0a-81ce-4d5077a1367f/backup --verbose backup /home/franz \ --exclude /home/franz/Android \ --exclude /home/franz/.android \ --exclude /home/franz/.npm \ --exclude /home/franz/.NPM_GLOBAL \ --exclude /home/franz/.npm-packages \ --exclude /home/franz/.pm2 \ --exclude /home/franz/.var \ --exclude /home/franz/.cache \ --exclude /home/franz/.cargo \ --exclude /home/franz/.gradle \ --exclude /home/franz/.local/share/flatpak \ --exclude /home/franz/.local/share/Trash \ --exclude /home/franz/.java \ --exclude /home/franz/.kde \ --exclude /home/franz/.dbus \ --exclude /home/franz/.recoll \ --exclude /home/franz/.recollweb
Write the file with
STRG + O. Confirm the file name. Close with
STRG + X.
Now simply run the file, whenever you want to backup (assuming the drive is attached):
You will be prompted for your backup password.
If you’ve made it this far, here’s some more links to checkout:
- Restoring from backup — restic 0.14.0 documentation
- Removing backup snapshots — restic 0.14.0 documentation
A couple of notes:
- You should definitely look into removing old snapshots
- for ex.
restic -r ./backup forget --keep-last 14 --prune
- for ex.
resticdoes not check if there’s enough disk space, to complete the backup
I haven’t automated this yet, but once I do, I’ll make sure to share it here.
If you already have, I encourage you to post your approach.
Enjoy the new year!