Fix snapshot deletion

This commit is contained in:
thorsten.spille 2023-11-02 22:17:41 +01:00
parent 98769cc028
commit a639bb05c2

View File

@ -167,7 +167,7 @@ fi
for name in "${syncvols[@]}"; do for name in "${syncvols[@]}"; do
log "Replicate $name" log "Replicate $name"
if [[ $($ssh $sshcipher $sshport $source zfs -H -o value type $name) == "filesystem" ]]; then if [[ $($ssh $sshcipher $sshport $source zfs get -H -o value type $name) == "filesystem" ]]; then
mp=-xmountpoint mp=-xmountpoint
cm=-ocanmount=noauto cm=-ocanmount=noauto
else else
@ -215,10 +215,10 @@ for name in "${syncvols[@]}"; do
IFS=$'\n' IFS=$'\n'
for interval in $filter ; do for interval in $filter ; do
if [[ $debug == "-v" ]]; then log "[DEBUG] $name - Checking interval $interval"; fi if [[ $debug == "-v" ]]; then log "[DEBUG] $name - Checking interval $interval"; fi
guid=$($ssh $sshcipher $sshport $source "zfs list -H -o guid,name -S creation -t snapshot $name | grep $interval | cut -f1 | tail -1") guid=$($ssh $sshcipher $sshport $source 'zfs list -H -o guid,name -S creation -t snapshot $name | grep -E "(.*)@(.*)$interval" | cut -f1 | tail -1')
if [[ "$(echo -e "$guid" | sed 's/\n//g')" != "" ]]; then if [[ "$(echo -e "$guid" | sed 's/\n//g')" != "" ]]; then
snaps_to_delete=$($zfs list -H -o name,guid -S creation -t snapshot $target/$name | $grep $interval | $grep --after-context=200 $guid | $grep -v $guid | $cut -f1) snaps_to_delete=$($zfs list -H -o name,guid -S creation -t snapshot $target/$name | $grep -E "(.*)@(.*)$interval" | $grep --after-context=200 $guid | $grep -v $guid | $cut -f1)
snap_count=$($zfs list -H -o name,guid -S creation -t snapshot $target/$name | $grep $interval | $wc -l | $tr -d ' ') snap_count=$($zfs list -H -o name,guid -S creation -t snapshot $target/$name | $grep -E "(.*)@(.*)$interval" | $wc -l | $tr -d ' ')
for snap in $snaps_to_delete; do for snap in $snaps_to_delete; do
if [[ $snap_count -gt $min_keep ]]; then if [[ $snap_count -gt $min_keep ]]; then