aboutsummaryrefslogtreecommitdiff

Backup scripts

Annoyed by complicated backup solutions, I've written my own simple scripts to back up only what I care about in a format that's easily unpacked on a fresh install of the system, that is, a tarball. There's no reason you couldn't use dump, btrfs send, zfs send or similar, though and this script supports handling that as long as you can pipe it over stdout and save to a file.

Not for everyone, and I don't even use it for backups of my largest files, for instance photos, videos, etc I use rclone and rsync instead of these scripts.

HOW TO

Clone this repo down to the system that'll run the backups, set up a ssh key in ssh/id_ed25519 ( ssh-keygen -t ed25519 -f ssh/id_ed25519 or so ) and then set up your SSH config ( jump boxes, etc ) in ssh/config

From there create a directory for each server that you're backing up, for instance if I want to back up a server called example.com, mkdir example.com.

From there, we need a script that will generate a tarball, examples can be found in openbsd.sh, and alpine.sh, copy it to example.com/backup.sh, and then chmod +x the file. This will be copied and then executed as root on the remote machine.

Another example worth calling out directly since it utilizes a slightly different method, alpine-diskless.sh can be used to back up the config using alpine's built in lbu, though it's worth passing in -suffix tar.gz to the backup script.

Example crontab:

@monthly sh -c 'set -e;cd /home/backupdir;./backup.sh -type monthly -svr example.com'
@weekly sh -c 'set -e;cd /home/backupdir;./backup.sh -type weekly -svr example.com'
@daily sh -c 'set -e;cd /home/backupdir;./backup.sh -type daily -svr example.com'

# Clean up the old backups daily, see the clean.sh for an example
@daily sh -c 'set -e;cd /home/backupdir;./clean.sh