ad.backup.zfs

Yohn Y. 2026-05-17

0:00bb6c16b4b6 Go to Latest

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

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

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