45 lines
1.9 KiB
Bash
Raw Normal View History

2024-03-19 11:33:12 +01:00
#! /bin/sh
# vim:ts=4:sw=4:
set -e
HOSTS="backup.niet.verweg.com"
POOLS="system"
BACKUP_PATH="${1}"
for backup_host in $HOSTS; do
if nc -w 5 $backup_host 22 2>&1 > /dev/null; then
for pool in $POOLS; do
last_snapshot=$(zfs list -H -o name -t snap -r -d 1 $pool | tail -1)
last_send_snapshot_file="/var/db/backup/last-${backup_host}-${pool}"
test -f ${last_send_snapshot_file} && last_send_snapshot=$(cat ${last_send_snapshot_file}) || last_send_snapshot=""
if [ "${last_snapshot}" != "${pool}@${last_send_snapshot}" ]; then
test -n "${last_send_snapshot}" && incremental_opt="-I ${pool}@${last_send_snapshot}"
echo zfs send -n -vR ${incremental_opt} ${last_snapshot}
zfs send -n -vR ${incremental_opt} ${last_snapshot} 2>&1 | \
tail -1 | \
tee /var/tmp/backup-${backup_host}-$$.log
if [ -n "${BACKUP_PATH}" -a -d "${BACKUP_PATH}" ]; then
zfs send -vR ${incremental_opt} ${last_snapshot} | \
zstd -v -6 --long > ${BACKUP_PATH}/${pool}-${backup_host}-${last_snapshot}.zstd | \
tee -a /var/tmp/backup-${backup_host}-$$.log
echo "Stored backup in ${BACKUP_PATH}/${pool}-${backup_host}-${last_snapshot}.zstd"
echo "rsync this to the other server and use as input"
else
zfs send -vR ${incremental_opt} ${last_snapshot} | \
zstd -v -6 --long | \
ssh ${backup_host} $pool | \
tee -a /var/tmp/backup-${backup_host}-$$.log
fi
status=$(tail -1 /var/tmp/backup-${backup_host}-$$.log)
echo ${last_snapshot} | sed -e "s/${pool}@//"
if [ "${status}" = "OK" ]; then
echo ${last_snapshot} | sed -e "s/${pool}@//" > ${last_send_snapshot_file}
mv /var/tmp/backup-${backup_host}-$$.log /var/log/zfs-backup-${backup_host}-${pool}-$(date +%a).log
fi
else
echo "Backup for $pool up to date for ${backup_host}"
fi
done
else
echo "WARNING: $backup_host not reachable over IPv6"
fi
done