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