ZFS

Посмотреть отстающие syncoid 

 #!/usr/bin/env bash

THRESHOLD_MINUTES="${1:-10}"

now=$(date +%s)

zfs list -t snap | grep syncoid | while read -r line; do

 # Извлекаем имя снапшота

 snap=$(echo "$line" | awk -F@ '{print $2}' | awk '{print $1}')

 # Извлекаем дату и время из имени снапшота

 # Формат: syncoid_xxxx_YYYY-MM-DD:HH:MM:SS или syncoid_xxxx_YYYY-MM-DD:HH:MM:SS-GMTXX:XX

 if [[ "$snap" =~ ([0-9]{4}-[0-9]{2}-[0-9]{2}):([0-9]{2}:[0-9]{2}:[0-9]{2}) ]]; then

 date_part="${BASH_REMATCH[1]}"

 time_part="${BASH_REMATCH[2]}"

 # Форматируем дату и время для команды date

 datetime="${date_part} ${time_part}"

 # Преобразуем в epoch time

 snap_epoch=$(date -d "$datetime" +%s 2>/dev/null)

 if [[ -n "$snap_epoch" ]]; then

 diff=$(( now - snap_epoch ))

 if (( diff > THRESHOLD_MINUTES * 60 )); then

 minutes=$(( diff / 60 ))

 hours=$(( minutes / 60 ))

 remaining_minutes=$(( minutes % 60 ))

 printf "%-80s <-- отставание %d часов %d минут\n" "$line" "$hours" "$remaining_minutes"

 fi

 else

 echo "Ошибка преобразования времени для: $datetime" >&2

 fi

 else

 echo "Не удалось извлечь дату из: $snap" >&2

 fi

done

 

 ./filter_snaps.sh 120

bank/Replica1/subvol-112-disk-0@syncoid_bigbank3_2025-09-12:08:30:30 0B - 1.11G - <-- отставание 7 часов 52 минут

bank/Replica1/vm-108-disk-0@syncoid_bigbank3_2025-09-12:12:31:22 0B - 30.0G - <-- отставание 3 часов 51 минут

megabank/Replica1/subvol-181-disk-1@syncoid_r370_2025-09-12:13:52:01-GMT10:00 0B - 6.45G - <-- отставание 2 часов 30 минут

megabank/Replica3/vm-103-disk-1@syncoid_r370_2025-09-12:09:50:02-GMT10:00 773M - 2.97T - <-- отставание 6 часов 32 минут

megabank/Replica3/vm-103-disk-1@syncoid_r370_2025-09-12:10:50:02-GMT10:00 1.66G - 2.97T - <-- отставание 5 часов 32 минут 

 Удалить снапшоты 

 zfs list -H -o name -t snapshot | xargs -n1 zfs destroy