zfs-backup-mm/zfs-backup-mm

77 lines
2.6 KiB
Plaintext
Raw Normal View History

2019-03-30 16:52:46 +01:00
#!/bin/bash
(
flock -n 200 || { echo 'locked via flock on file /var/lock/zfs-backup-mm' ; exit 1; }
2019-03-30 21:57:33 +01:00
2019-03-30 16:52:46 +01:00
zfsnap_block () {
2019-03-30 21:57:33 +01:00
IFS='
'
2019-03-30 16:52:46 +01:00
if [ $zfsnap_enable = "y" ]; then
for dataset in $source_datasets;
do
2019-03-30 21:57:33 +01:00
echo "Tuning zfSnap for "$dataset""
for command in $(zfSnap -n -d -zpool28fix -a "$zfsnap_days_keep_snaps"d "$dataset" | grep "$dataset")
do
echo "Doing "$command""
eval "$command";
done
2019-03-30 16:52:46 +01:00
done
backup_block
else
echo "zfsnap_enable is not set to Y, skipping creating snapshots"
backup_block
fi
}
backup_block () {
source_zfs_snapshots=$(zfs list -t snapshot)
backups_server_zfs_snapshots=$(ssh -p $backup_server_port $backup_server zfs list -t snapshot)
for dataset in $source_datasets;
do
source_snap=$(echo "$source_zfs_snapshots" | grep "$dataset"@ | grep -E "....-..-.._........--"$zfsnap_days_keep_snaps"d" | tail -n1 | cut -d"@" -f2 | cut -d" " -f1)
dataset_clean=$(echo $dataset | grep -o '[^/]*$')
backup_snap=$(echo "$backups_server_zfs_snapshots" | grep "$backup_server_dataset"/"$dataset_clean"@ | grep -E "....-..-.._........--"$zfsnap_days_keep_snaps"d" | tail -n1 | cut -d"@" -f2 | cut -d" " -f1)
if [ -z "$backup_snap" ]
then
echo "Snapshot on backup server not found, sending "$dataset"@"$source_snap" to server "$backup_server" "$backup_server_dataset"/"$dataset_clean""
2019-03-30 18:42:34 +01:00
zfs send -c "$dataset"@"$source_snap" | pv | ssh "$backup_server" -p "$backup_server_port" zfs recv "$backup_server_dataset"/"$dataset_clean" && echo "Send OK"
2019-03-30 16:52:46 +01:00
else
echo "Snapshot on backup server found, sending incremental from "$dataset"@"$backup_snap" to "$dataset"@"$source_snap" to server "$backup_server" "$backup_server_dataset"/"$dataset_clean""
2019-03-30 18:42:34 +01:00
zfs send -ci "$dataset"@"$backup_snap" "$dataset"@"$source_snap" | pv | ssh "$backup_server" -p "$backup_server_port" zfs recv "$backup_server_dataset"/"$dataset_clean" -F && echo "Send OK"
2019-03-30 16:52:46 +01:00
fi
done
del_snaps_block
}
del_snaps_block () {
if [ $backup_server_delete_old_snaps = "y" ]; then
for dataset in $source_datasets;
do
dataset_clean=$(echo $dataset | grep -o '[^/]*$')
snaps_to_delete=$(echo "$backups_server_zfs_snapshots" | grep "$backup_server_dataset"/"$dataset_clean"@ | grep -E "....-..-.._........--"$zfsnap_days_keep_snaps"d" | head -n -"$zfsnap_days_keep_snaps" | cut -d" " -f1)
for snap in $snaps_to_delete
do
echo "Deleting snapshot "$snap" on "$backup_server""
ssh "$backup_server" -p "$backup_server_port" zfs destroy "$snap"
done
done
else
echo "backup_server_delete_old_snaps is not set to Y, skipping deleting snapshots"
fi
exit 0
}
if [[ $# -eq 0 ]] ; then
echo 'Config file is not set'
exit 1
fi
source $1
zfsnap_block
) 200>/var/lock/zfs-backup-mm