45 lines
1.9 KiB
Bash
Executable File
45 lines
1.9 KiB
Bash
Executable File
#! /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
|