Use BorgBackup to Backup FreeBSD ZFS Jails
A little known fact is that Borg can be used on block devices as well as files. For most platforms it’s a rather involved process — not so for FreeBSD. ZFS snapshots make it really convenient to back up running jails without stopping them first.
Using Borg efficiently and automated requires SSH keys to be set up as well as using empty passwords for the Borg encryption keys.
First off, create Borg repositories for all jails you plan to back up on the remote machine. For each jail, run the following:
borg init -e keyfile backup@server.example.com:/backup/jails/<JAIL NAME>
Then, modify and safe the following script to /root/bin/backup-jails
:
#!/usr/bin/env bash
JAILPATH=zroot/usr/jails
JAILS=(jail1 jail2 jail3)
LOCATION=backup@example.com:/backup/jails
for NAME in "${JAILS[@]}"; do
REPOSITORY=$LOCATION/$NAME
echo Snapshotting $NAME...
zfs snap $JAILPATH/$NAME@now
echo Backing up $NAME...
zfs send $JAILPATH/$NAME@now | borg create --stats --list --compression lzma,6 $REPOSITORY::`date +%s` -
zfs destroy $JAILPATH/$NAME@now
echo Pruning $NAME...
borg prune --list --stats $REPOSITORY --keep-daily=7
done
This script requires Bash to be installed, as tcsh
has some unique
difficulties with command substitution.
Just put this script in your root crontab and enjoy automatic jail backups.