ad.backup.zfs

Yohn Y. 2026-05-17

0:00bb6c16b4b6 Go to Latest

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

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

History
awgur@0 1 #!/bin/sh
awgur@0 2 # devel.a0fs.net: zfsbackup.bin.cron - v0.1 by awgur
awgur@0 3 # ---
awgur@0 4 # Файл должен запускаться через crond. Здесь содержится вся логика,
awgur@0 5 # выполняющая функции резервирования
awgur@0 6
awgur@0 7 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
awgur@0 8 export PATH
awgur@0 9
awgur@0 10 dir_root="$(dirname "$(dirname "$(readlink -f "$0")")")"
awgur@0 11 dir_lib="${dir_root}/lib" # Директория с библиотеками
awgur@0 12
awgur@0 13 arg_timeMark="$(date '+%Y%m%d-%H%M%S')"
awgur@0 14 arg_timeDate="$(date '+%Y%m%d')"
awgur@0 15 arg_timeHour="$(date '+%H')"
awgur@0 16
awgur@0 17 sys_backupCnt_d=90
awgur@0 18 sys_backupCnt_h=48
awgur@0 19
awgur@0 20 . "${dir_lib}/main.sh"
awgur@0 21
awgur@0 22 worker () {
awgur@0 23 # Исполнительная процедура. Содержит логику работы с определённым набором данных ZFS
awgur@0 24 # Выполняя функции обработки
awgur@0 25 local ds="$1"
awgur@0 26 local lastSnap # Последняя резервная копия
awgur@0 27 local cnt # Сконфигурированое количество резервных копий
awgur@0 28 local cnt_default # Количество резервных копий по умолчанию
awgur@0 29 local backupType # Тип резервного копирования
awgur@0 30 local curSnap # Имя текущего снимка
awgur@0 31 local zfs_ret # Код возврата комманды zfs
awgur@0 32 local lp="cron.worker():" # префикс для системы логирования,
awgur@0 33 # выносим отдельно, так как логов будем писать много
awgur@0 34 if ! [ "$ds" ] ; then
awgur@0 35 return 1
awgur@0 36 fi
awgur@0 37
awgur@0 38 if zfs_isBackup "$ds" ; then
awgur@0 39 log "$lp Working with '$ds'"
awgur@0 40 lastSnap=$(zfs_getLastSnap "$ds")
awgur@0 41 if ! svc_date_isToday "${lastSnap}" ; then
awgur@0 42 backupType="${sys_backupType_d}"
awgur@0 43 cnt_default="${sys_backupCnt_d}"
awgur@0 44 elif ! svc_date_isThisHour "${lastSnap}" ; then
awgur@0 45 backupType="${sys_backupType_h}"
awgur@0 46 cnt_default="${sys_backupCnt_h}"
awgur@0 47 else
awgur@0 48 return 0
awgur@0 49 fi
awgur@0 50
awgur@0 51 cnt=$(zfs_getProp "$ds" "${backupType}")
awgur@0 52 if ! [ "$cnt" ] ; then
awgur@0 53 cnt="${cnt_default}"
awgur@0 54 fi
awgur@0 55
awgur@0 56 if [ "$cnt" -eq 0 -a "${backupType}" = "${sys_backupType_d}" ] ; then
awgur@0 57 backupType="${sys_backupType_h}"
awgur@0 58 cnt=$(zfs_getProp "$ds" "${sys_backupType_h}")
awgur@0 59 if ! [ "$cnt" ] ; then
awgur@0 60 cnt="${sys_backupCnt_h}"
awgur@0 61 fi
awgur@0 62 fi
awgur@0 63
awgur@0 64
awgur@0 65 if [ "$cnt" -gt 0 ]; then
awgur@0 66 curSnap="$(svc_makeName "$ds" "${backupType}" "${sys_date_now}")"
awgur@0 67 log "$lp Make snapshot '$curSnap'"
awgur@0 68 {
awgur@0 69 zfs snapshot "${curSnap}" 2>&1
awgur@0 70 zfs_ret=$?
awgur@0 71 if [ "$zfs_ret" -eq 0 ] ; then
awgur@0 72 zfs_clean "$ds" "${backupType}" "${cnt}"
awgur@0 73 else
awgur@0 74 log_err "$lp Make snapshot '$curSnap' fail with return code '$zfs_ret'"
awgur@0 75 fi
awgur@0 76 } 2>&1 | log_err
awgur@0 77 fi
awgur@0 78 fi
awgur@0 79 }
awgur@0 80
awgur@0 81 zfs list -Ho name | while read fs ; do worker "$fs"; done