ad.backup.zfs
2026-05-17
ad.backup.zfs/bin/zfsbackup.cron.sh
.. init . По сути архивация имеющегося самопиского решания для памяти.
| 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 |