ad.backup.zfs
2026-05-17
ad.backup.zfs/bin/zfsbackup.sh
.. init . По сути архивация имеющегося самопиского решания для памяти.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/bin/zfsbackup.sh Sun May 17 17:44:29 2026 +0300 1.3 @@ -0,0 +1,122 @@ 1.4 +#!/bin/sh 1.5 +# devel.a0fs.net: zfsbackup.bin.main - v0.1 by awgur 1.6 +# --- 1.7 +# Файл, содержащий скрипт управления системой резервного копирования 1.8 + 1.9 +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin 1.10 +export PATH 1.11 + 1.12 +dir_root="$(dirname "$(dirname "$(readlink -f "$0")")")" 1.13 +dir_lib="${dir_root}/lib" # Директория с библиотеками 1.14 + 1.15 +. "${dir_lib}/main.sh" 1.16 + 1.17 +usage () { 1.18 + # Вывод справки по аргементам скрипта 1.19 + cat << EOF 1.20 +$0 ZFS_Dataset_name команда [аргументы] 1.21 + Настройка резервного копирования наборов данных (dataset) ZFS 1.22 + Комманды: 1.23 + enable : Включение копий для текущего набора данных 1.24 + : и вложенных в него наборов, если у них эта настройка 1.25 + : не заданна отдельно 1.26 + disable : Отключение резервного копирования для набора данных ZFS 1.27 + : и вложенных в него наборов, если у них эта насройка 1.28 + : не заданна отдельно 1.29 + set backup_type number : Установить количество хранимых копий для 1.30 + : заданного типа копирования. 1.31 + : Поддерживаются типы (backup_type): 1.32 + : - h - почасовое копирование, делается раз в час, в основном 1.33 + : в начале каждого часа 1.34 + : - d - ежедневное копирование, делается раз в день, в основном 1.35 + : в 00 часов 00 минут по локальному времени системы 1.36 + : number - Число резервных копий - неотрицательное целое число. 1.37 + : Если число равно 0 данный тип резервного копирования 1.38 + : для набора отключается. 1.39 +EOF 1.40 +} 1.41 + 1.42 +err_usr () { 1.43 + # Возбуждение исключения, с аварийным завершением работы скрипта 1.44 + # и выдачей сообщения на терминал. 1.45 + # Аргументы: 1.46 + # [exit_code] : Код завершения, по-умолчанию 1 1.47 + # message : Сообщение пользователю 1.48 + local exit_code="$1" 1.49 + local msg="$2" 1.50 + 1.51 + if ! [ "$msg" ] ; then 1.52 + msg="$exit_code" 1.53 + exit_code=1 1.54 + fi 1.55 + 1.56 + echo "ERROR: $msg" 1.57 + usage 1.58 + exit "${exit_code}" 1.59 +} 1.60 + 1.61 +cmd_eanble() { 1.62 + # Обработчик комманды включения резервного попирования 1.63 + zfs_setProp "$arg_ds" "enable" "yes" 1.64 +} 1.65 + 1.66 +cmd_disable() { 1.67 + # Обработчик комманды отключения резервного попирования 1.68 + zfs_setProp "$arg_ds" "enable" "no" 1.69 +} 1.70 + 1.71 +cmd_set() { 1.72 + # Обработчик комманды на установку количества резервных копий 1.73 + # аргументы: 1.74 + # backup_type : Тип резервного копирования 1.75 + # count : Коилчество копий, целое положительное число 1.76 + local backupType 1.77 + case "$1" in 1.78 + d ) 1.79 + backupType="${sys_backupType_d}" 1.80 + ;; 1.81 + h ) 1.82 + backupType="${sys_backupType_h}" 1.83 + ;; 1.84 + * ) 1.85 + err_usr 2 "Не вреный тип резервного копирования, для которого устанавливается значение: '$1'" 1.86 + ;; 1.87 + esac 1.88 + 1.89 + if ! svc_isNum "$2" ; then 1.90 + err_usr 3 "Число резервных копий не является неотрицательным числом: '$2'" 1.91 + fi 1.92 + 1.93 + zfs_setProp "$arg_ds" "$backupType" $2 1.94 +} 1.95 + 1.96 +# === 1.97 +# Проверяем в порядке ли аргументы 1.98 +# - Присутствует ли набор данных 1.99 +if ! zfs list -Ho name "$1" > /dev/null 2>&1 ; then 1.100 + err_usr "Набор данных '$1' не существует" 1.101 +fi 1.102 +arg_ds="$1" 1.103 +shift 1.104 + 1.105 +# - Проверка комманд 1.106 +arg_cmd="$1" 1.107 +shift 1.108 + 1.109 +case "$arg_cmd" in 1.110 + enable ) 1.111 + cmd_eanble 1.112 + ;; 1.113 + disable ) 1.114 + cmd_disable 1.115 + ;; 1.116 + set ) 1.117 + cmd_set "$@" 1.118 + ;; 1.119 + * ) 1.120 + err_usr 4 "Комманда не распознана: '$cmd'" 1.121 + ;; 1.122 +esac 1.123 + 1.124 + 1.125 +