i've switched to using restic for data backups, and so far have been very satisfied. before i get into my testimonial, let's take a look at how i previously approached backups.
the data hierarchy
i separate my data into hierarchical tiers of increasing size and decreasing importance. tier 1, the most important stuff, is a few gb large, and to back it up i would mount a handful of luks-encrypted storage media, and kick off rsync jobs. for me, rsync ticked a lot of boxes - it was fast (differential backup), it can use an "exclude file" containing globs such as
*.iso, is solid software and widely available on many platforms, and can operate over the network for offsite backups.
tier 2 is mostly small multimedia (music collection, meme stash, and more) totalling a few 10's of gb. i delegated this to dropbox, where i have 100 gb of employee-gifted space. dropbox sync is functionally quite nice, and runs all the time, so naturally i should have also been including the most important tier 1, but some things in tier 1 are sensitive (e.g. private keys). fortunately, the sensitive parts don't change often, so i got by with occasionally running a script to tar and encrypt into a small blob in dropbox. also, tier 2 is rsync'd to storage media that has the capacity for it.
tier 3 is large multimedia (totally legit movies, anime, and youtube videos), and this tier isn't really backed up - i just move large files i get on my laptop over to one large external drive. as with the other tiers, i deliberately keep this quite small. it hovers at around a third of a tb, because i only keep the best of the best around.
so, my backup setup is quite simple and stress-free. i didn't really see the point of like, setting up automatic daily backups to a fancy and robust nas. i was pretty content with keeping the dropbox daemon running, and once a week or two i would do my rsync ritual.
out of curiosity i also researched other backup solutions, and decided restic was worth trying out. it's written in golang, meaning static and cross-platform binaries. it has feature parity with what i needed from rsync. its repository model is dead simple, and a natural way to express my data hierarchy.
for me, the main benefit is in how restic approaches encryption. it's password based, per repository, and most critically is done at the file level, so restic repositories can be stored on many filesystems. this means i can easily and safely use untrusted and unencrypted storage media, and enjoy the leftover free space for other things. no more luks dependency and wasted space locked away in a partition!
restic also supports rclone at the command line syntax level, so with minimum cognitive overhead i can use dropbox as a totally untrusted store for tier 1 and 2 (and have one less daemon running on my machine), and other free and untrustworthy cloud storages for my tiny tier 1.
restic also comes with some added bonuses i am pleased with:
- deduplication - i personally experienced a ~6 percent size reduction, which is nice
- ux/progress feedback - eta and erase-update progress bar is much better than rsync's text spew
- repository mounting via fuse - sort of a necessary feature, but still great nonetheless, and a display of the fuse abstraction at its best (decryption and assembly done transparently)
- snapshots - historically i have never needed to resurrect data in the past (never kept it with my rsync method anyways), but this may come in handy
two thumbs up for restic!