ad.backup.zfs

Yohn Y. 2026-05-17

0:00bb6c16b4b6 Go to Latest

ad.backup.zfs/bin/zfsbackup.cron.sh

.. init . По сути архивация имеющегося самопиского решания для памяти.

History
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/bin/zfsbackup.cron.sh	Sun May 17 17:44:29 2026 +0300
     1.3 @@ -0,0 +1,81 @@
     1.4 +#!/bin/sh
     1.5 +# devel.a0fs.net: zfsbackup.bin.cron - v0.1 by awgur
     1.6 +# ---
     1.7 +# Файл должен запускаться через crond. Здесь содержится вся логика,
     1.8 +# выполняющая функции резервирования
     1.9 +
    1.10 +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
    1.11 +export PATH
    1.12 +
    1.13 +dir_root="$(dirname "$(dirname "$(readlink -f "$0")")")"
    1.14 +dir_lib="${dir_root}/lib"   # Директория с библиотеками
    1.15 +
    1.16 +arg_timeMark="$(date '+%Y%m%d-%H%M%S')"
    1.17 +arg_timeDate="$(date '+%Y%m%d')"
    1.18 +arg_timeHour="$(date '+%H')"
    1.19 +
    1.20 +sys_backupCnt_d=90
    1.21 +sys_backupCnt_h=48
    1.22 +
    1.23 +. "${dir_lib}/main.sh"
    1.24 +
    1.25 +worker () {
    1.26 +    # Исполнительная процедура. Содержит логику работы с определённым набором данных ZFS
    1.27 +    # Выполняя функции обработки
    1.28 +    local ds="$1"
    1.29 +    local lastSnap       # Последняя резервная копия
    1.30 +    local cnt            # Сконфигурированое количество резервных копий
    1.31 +    local cnt_default    # Количество резервных копий по умолчанию
    1.32 +    local backupType     # Тип резервного копирования
    1.33 +    local curSnap        # Имя текущего снимка
    1.34 +    local zfs_ret        # Код возврата комманды zfs
    1.35 +    local lp="cron.worker():"   # префикс для системы логирования,
    1.36 +                                # выносим отдельно, так как логов будем писать много
    1.37 +    if ! [ "$ds" ] ; then
    1.38 +        return 1
    1.39 +    fi
    1.40 +
    1.41 +    if zfs_isBackup "$ds" ; then
    1.42 +        log "$lp Working with '$ds'"
    1.43 +        lastSnap=$(zfs_getLastSnap "$ds")
    1.44 +        if ! svc_date_isToday "${lastSnap}" ; then
    1.45 +            backupType="${sys_backupType_d}"
    1.46 +            cnt_default="${sys_backupCnt_d}"
    1.47 +        elif ! svc_date_isThisHour "${lastSnap}" ; then
    1.48 +            backupType="${sys_backupType_h}"
    1.49 +            cnt_default="${sys_backupCnt_h}"
    1.50 +        else
    1.51 +            return 0
    1.52 +        fi
    1.53 +
    1.54 +        cnt=$(zfs_getProp "$ds" "${backupType}")
    1.55 +        if ! [ "$cnt" ] ; then
    1.56 +            cnt="${cnt_default}"
    1.57 +        fi
    1.58 +
    1.59 +        if [ "$cnt" -eq 0 -a "${backupType}" = "${sys_backupType_d}" ] ; then
    1.60 +            backupType="${sys_backupType_h}"
    1.61 +            cnt=$(zfs_getProp "$ds" "${sys_backupType_h}")
    1.62 +            if ! [ "$cnt" ] ; then
    1.63 +                cnt="${sys_backupCnt_h}"
    1.64 +            fi
    1.65 +        fi
    1.66 +
    1.67 +
    1.68 +        if [ "$cnt" -gt 0 ]; then
    1.69 +            curSnap="$(svc_makeName "$ds" "${backupType}" "${sys_date_now}")"
    1.70 +            log "$lp Make snapshot '$curSnap'"
    1.71 +            {
    1.72 +                zfs snapshot "${curSnap}" 2>&1
    1.73 +                zfs_ret=$?
    1.74 +                if [ "$zfs_ret" -eq 0 ] ; then
    1.75 +                    zfs_clean "$ds" "${backupType}" "${cnt}"
    1.76 +                else
    1.77 +                    log_err "$lp Make snapshot '$curSnap' fail with return code '$zfs_ret'"
    1.78 +                fi
    1.79 +            } 2>&1 | log_err
    1.80 +        fi
    1.81 +    fi
    1.82 +}
    1.83 +
    1.84 +zfs list -Ho name | while read fs ; do worker "$fs"; done
    1.85 \ No newline at end of file