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