zfs-mirror

This commit is contained in:
mwiegand 2021-10-12 22:28:57 +02:00
parent ada09df208
commit 69e18014e3
6 changed files with 76 additions and 0 deletions

View file

@ -0,0 +1,43 @@
#!/bin/bash
set -exu
ssh="ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${server_ip}"
bookmark_prefix="auto-mirror_"
new_bookmark="$bookmark_prefix$(date +"%Y-%m-%d_%H:%M:%S")"
for dataset in $(zfs list -t filesystem -H -o name)
do
echo "MIRRORING $dataset"
if ! $ssh sudo zfs list -t filesystem -H -o name | grep -q "^$dataset$"
then
echo "CREATING PARENT DATASET..."
$ssh sudo zfs create -p -o mountpoint=none "$dataset"
fi
zfs snap "$dataset@$new_bookmark"
if zfs list -t bookmark -H -o name | grep "^$dataset#$bookmark_prefix" | wc -l | grep -q "^0$"
then
echo "INITIAL BACKUP"
# do in subshell, otherwise ctr+c will lead to 0 exitcode
$(zfs send -v "$dataset@$new_bookmark" | $ssh sudo zfs recv -F "$dataset" -o mountpoint=none)
else
echo "INCREMENTAL BACKUP"
last_bookmark=$(zfs list -t bookmark -H -o name | grep "^$dataset#$bookmark_prefix" | sort | tail -1 | cut -d '#' -f 2)
[[ -z "$last_bookmark" ]] && echo "ERROR - last_bookmark is empty" && exit 98
$(zfs send -v -i "#$last_bookmark" "$dataset@$new_bookmark" | $ssh sudo zfs recv "$dataset" -o mountpoint=none)
fi
if [[ "$?" == "0" ]]
then
zfs bookmark "$dataset@$new_bookmark" "$dataset#$new_bookmark"
zfs destroy "$dataset@$new_bookmark"
echo "SUCCESS $dataset"
else
zfs destroy "$dataset@$new_bookmark"
echo "ERROR $dataset"
exit 99
fi
done

View file

@ -0,0 +1,13 @@
from ipaddress import ip_interface
files = {
'/opt/zfs-mirror': {
'mode': '550',
'content_type': 'mako',
'context': {
'server_ip': ip_interface(
repo.get_node(node.metadata.get('zfs-mirror/server')).metadata.get('network/internal/ipv4')
).ip,
},
}
}

View file

@ -0,0 +1,8 @@
defaults = {
'systemd-timers': {
'zfs-mirror': {
'command': '/opt/zfs-mirror',
'when': 'daily',
},
},
}

View file

@ -7,6 +7,7 @@
],
'bundles': [
'zfs',
'zfs-mirror',
],
'metadata': {
'id': '9cf52515-63a1-4659-a8ec-6c3c881727e5',
@ -20,6 +21,9 @@
'backup-server': {
'hostname': 'backups.sublimity.de',
},
'zfs-mirror': {
'server': 'wb.offsite-backups',
},
'zfs': {
'pools': {
'tank': {

View file

@ -65,6 +65,7 @@
'10.0.10.0/24',
'10.0.11.0/24',
'10.0.20.0/24',
'192.168.178.0/24',
],
},
},

View file

@ -35,6 +35,13 @@
},
},
},
'users': {
'root': {
'authorized_users': {
'root@home.backups',
},
},
},
'zfs': {
'pools': {
'tank': {