ad.backup.zfs

Yohn Y. 2026-05-17

0:00bb6c16b4b6 Go to Latest

ad.backup.zfs/bin/zfsbackup.sh

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

History
awgur@0 1 #!/bin/sh
awgur@0 2 # devel.a0fs.net: zfsbackup.bin.main - v0.1 by awgur
awgur@0 3 # ---
awgur@0 4 # Файл, содержащий скрипт управления системой резервного копирования
awgur@0 5
awgur@0 6 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
awgur@0 7 export PATH
awgur@0 8
awgur@0 9 dir_root="$(dirname "$(dirname "$(readlink -f "$0")")")"
awgur@0 10 dir_lib="${dir_root}/lib" # Директория с библиотеками
awgur@0 11
awgur@0 12 . "${dir_lib}/main.sh"
awgur@0 13
awgur@0 14 usage () {
awgur@0 15 # Вывод справки по аргементам скрипта
awgur@0 16 cat << EOF
awgur@0 17 $0 ZFS_Dataset_name команда [аргументы]
awgur@0 18 Настройка резервного копирования наборов данных (dataset) ZFS
awgur@0 19 Комманды:
awgur@0 20 enable : Включение копий для текущего набора данных
awgur@0 21 : и вложенных в него наборов, если у них эта настройка
awgur@0 22 : не заданна отдельно
awgur@0 23 disable : Отключение резервного копирования для набора данных ZFS
awgur@0 24 : и вложенных в него наборов, если у них эта насройка
awgur@0 25 : не заданна отдельно
awgur@0 26 set backup_type number : Установить количество хранимых копий для
awgur@0 27 : заданного типа копирования.
awgur@0 28 : Поддерживаются типы (backup_type):
awgur@0 29 : - h - почасовое копирование, делается раз в час, в основном
awgur@0 30 : в начале каждого часа
awgur@0 31 : - d - ежедневное копирование, делается раз в день, в основном
awgur@0 32 : в 00 часов 00 минут по локальному времени системы
awgur@0 33 : number - Число резервных копий - неотрицательное целое число.
awgur@0 34 : Если число равно 0 данный тип резервного копирования
awgur@0 35 : для набора отключается.
awgur@0 36 EOF
awgur@0 37 }
awgur@0 38
awgur@0 39 err_usr () {
awgur@0 40 # Возбуждение исключения, с аварийным завершением работы скрипта
awgur@0 41 # и выдачей сообщения на терминал.
awgur@0 42 # Аргументы:
awgur@0 43 # [exit_code] : Код завершения, по-умолчанию 1
awgur@0 44 # message : Сообщение пользователю
awgur@0 45 local exit_code="$1"
awgur@0 46 local msg="$2"
awgur@0 47
awgur@0 48 if ! [ "$msg" ] ; then
awgur@0 49 msg="$exit_code"
awgur@0 50 exit_code=1
awgur@0 51 fi
awgur@0 52
awgur@0 53 echo "ERROR: $msg"
awgur@0 54 usage
awgur@0 55 exit "${exit_code}"
awgur@0 56 }
awgur@0 57
awgur@0 58 cmd_eanble() {
awgur@0 59 # Обработчик комманды включения резервного попирования
awgur@0 60 zfs_setProp "$arg_ds" "enable" "yes"
awgur@0 61 }
awgur@0 62
awgur@0 63 cmd_disable() {
awgur@0 64 # Обработчик комманды отключения резервного попирования
awgur@0 65 zfs_setProp "$arg_ds" "enable" "no"
awgur@0 66 }
awgur@0 67
awgur@0 68 cmd_set() {
awgur@0 69 # Обработчик комманды на установку количества резервных копий
awgur@0 70 # аргументы:
awgur@0 71 # backup_type : Тип резервного копирования
awgur@0 72 # count : Коилчество копий, целое положительное число
awgur@0 73 local backupType
awgur@0 74 case "$1" in
awgur@0 75 d )
awgur@0 76 backupType="${sys_backupType_d}"
awgur@0 77 ;;
awgur@0 78 h )
awgur@0 79 backupType="${sys_backupType_h}"
awgur@0 80 ;;
awgur@0 81 * )
awgur@0 82 err_usr 2 "Не вреный тип резервного копирования, для которого устанавливается значение: '$1'"
awgur@0 83 ;;
awgur@0 84 esac
awgur@0 85
awgur@0 86 if ! svc_isNum "$2" ; then
awgur@0 87 err_usr 3 "Число резервных копий не является неотрицательным числом: '$2'"
awgur@0 88 fi
awgur@0 89
awgur@0 90 zfs_setProp "$arg_ds" "$backupType" $2
awgur@0 91 }
awgur@0 92
awgur@0 93 # ===
awgur@0 94 # Проверяем в порядке ли аргументы
awgur@0 95 # - Присутствует ли набор данных
awgur@0 96 if ! zfs list -Ho name "$1" > /dev/null 2>&1 ; then
awgur@0 97 err_usr "Набор данных '$1' не существует"
awgur@0 98 fi
awgur@0 99 arg_ds="$1"
awgur@0 100 shift
awgur@0 101
awgur@0 102 # - Проверка комманд
awgur@0 103 arg_cmd="$1"
awgur@0 104 shift
awgur@0 105
awgur@0 106 case "$arg_cmd" in
awgur@0 107 enable )
awgur@0 108 cmd_eanble
awgur@0 109 ;;
awgur@0 110 disable )
awgur@0 111 cmd_disable
awgur@0 112 ;;
awgur@0 113 set )
awgur@0 114 cmd_set "$@"
awgur@0 115 ;;
awgur@0 116 * )
awgur@0 117 err_usr 4 "Комманда не распознана: '$cmd'"
awgur@0 118 ;;
awgur@0 119 esac
awgur@0 120
awgur@0 121
awgur@0 122