Skip to main content

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