Other popular choices include borg, duplicity, and duplicati.
After evaluating these and others mentioned in the comments, I ended up using borg with borgmatic to define homelab backups with yaml files that are version controlled in gitea and deployed using ansible.
I also use duplicity to back up my sister in laws storefront website to backblaze. I've been quite happy with both.
Last time I tried Kopia was more like "select ONE folder to backup and add ONE destination to SNAPSHOT it to". While it is very simplistic and would be lovely in many use cases - for a home/personal backup which often requires granularity of inclusion and exclusion it just didn't make any sense. I am not sure whether that has changed.
Kopia allows to specify quite different snapshot configurations with patterns etc. I converted old snapshot since 2005 backwards into the same dedup mounted on diverse paths, so I wonder what would be missing.
I chose restic because borg was slow, buggy and an unwieldy pile of Python, not the best language for deployment on heterogeneous Linux systems.
Restic on the other hand is slow, but never crashed on me and is distributed as a single binary.
The only thing I dislike about restic is that it does not have a simple config file where you define your backup settings. Instead I had to write my own backup.sh that I deploy everywhere on my personal and production machines. Paired with rsync.net for storage and healthchecks.io for notifications.
I've never had any crashing or big issues with borg, and it's generally considered to be faster than restic. I'm sure there are more recent benchmarks, but as of Dec 2022, borg wins by a fair bit [1].
For installation, I set up a dedicated virtualenv for borg and borgmatic installation then symlink into /usr/local/bin. This is also automated with ansible and has worked on every distro and version I've used. The latest version does require python 3.9.0, but that's already 4 years old.
Agreed on no crashing/issues. I always use the provided Borg "single binary" https://borgbackup.readthedocs.io/en/latest/installation.htm... that unpacks everything into /tmp and naturally is larger than the restic binary. That isn't an issue on my systems.
Restic has no unencrypted mode for reasons - you must use an empty password and additional flag instead. If your backups will already be encrypted in other ways you'll still pay encryption overhead.
I write Python day to day, but even I use Restic for the single binary. I take a lot of comfort in being able to keep the backup executable adjacent to the backup blobs. While I believe Borg now has a distributable binary, Go has it in its blood to make easy deployment without tricks.
Duplicity is solid, I’ve been using it since over a decade, and it’s a standard package on Debian-based distributions. Never had any hiccups (and I run regular backup validations).
These threads about backup tools come up regularly, and I always wonder if I’m missing something important about the other tools.
I used Duplicity (via the Gnome Déjà Dup GUI) for years, but Borg turned out to be a lot faster at making the backups, at least for my laptop home dir backups. Like an order of magnitude faster. I don't think I ever tried to hand-configure Duplicity, though.
I have tested all of these also, and settled on borg + borgmatic. It has been absolutely rock solid. Borgmatic just rounds everything together in such a nice way. The documentation is great.
I'm pushing it all to a Hetzner storage box, as well as a local NAS. Super affordable!
After evaluating these and others mentioned in the comments, I ended up using borg with borgmatic to define homelab backups with yaml files that are version controlled in gitea and deployed using ansible.
I also use duplicity to back up my sister in laws storefront website to backblaze. I've been quite happy with both.
https://borgbackup.readthedocs.io/en/stable/
http://duplicity.gitlab.io/
https://docs.duplicati.com/en/latest/