The standard answer: don't backup the system, automate its deployment instead. Backup only data.
Debian operating system
Debian is a free operating system (OS) for your computer. An operating system is the set of basic programs and utilities that make your computer run. Debian provides more than a pure OS: it comes with over 59000 packages, precompiled software bundled up in a nice format for easy installation on your machine.
Even for a home system? Not a fleet of data center servers. I am currently using rsync to backup /home/<>/ to the ssh server. I tend to make a lot of changes to the base Debian/KDE install.
Yeah, it's worth it to just start fresh. Keep your user data, nuke the rest and setup from scratch w/automation if it's extremely customized to your liking.
I personally try to use the default config as much as possible so there's not as much to set up after installing from ISO.
There will always be gaps, but describing your machine through Ansible is worth it and can be fun if you're into that sort of thing.
The first time I set up a freshly installed Debian laptop from my existing Ansible roles was a really enjoyable moment.
Being able to establish a familiar base on a fresh system at will is a far greater power than pure config/data backups.
You mentioned rsync, then take a look rsnapshot if you haven't yet. It is based on rsync and doing incremental backup very well.
What kind of changes? Package installation, removal and configuration? Use apt-mark showmanual
to save list of manually installed packages, dpkg --get-selections | grep 'deinstall$'
to save list of removed packages, debconf --get-selections
to save debconf package settings, backup files that you edited in /etc
. This should be enough for restoration, wouldn't take a long time for backup and avoid risk of filesystem inconsistency.
Ignoring the whole debate about whether to include system files in your backup, rdiff-backup
sounds a lot like what you want. It stores your latest backup as plain files on-disk just like rsync, checks the box for incremental backups (older versions of files are stored as diffs, which you can easily browse with rdiff-backup-fs
) and isn't much different to use than rsync. That said, people will point out that you can make rsync do pretty much the same stuff using hard linking.
I back up /etc, whatever I need from /var and dpkg --get-selections
.
Relax And Recover for os level backups. https://relax-and-recover.org/
With rear you can back up your system to pretty much anything. Mounted volume, USB drive, even to a bootable iso.
I use weekly rear backups for my system, and hourly Borg backups for diffs/point in time restore of user data, but you could use rear for an entire system snapshot as well.
no calls for restic? I use restic and a s3 layer on the other end, be it either backblaze/wasabi/s3/whatever for remote or minio/garage for local object storage. Stuff just works, then I write a systemd unit file to back it up according to whatever schedule I want for both a local target and a remote target. Helps to solve the 3-2-1 backup strategy this way. Good luck!
I would say dd is the best solution for a very complete backup, but I’m also a fan of Borg Backup for incremental backups.
dd if=/dev/sda of=/dev/sdb bs=5M --status=progress
Just don't mix up a and b otherwise you're truly screwed.
I actually did this **dd if=(running system root volume) of=(local usb attached hard drive file) ** This gives me a full disk backup that would be no worse than if power got yanked. (I know laptops have batteries, for this case we are pretending to be a desktop with no UPS)