"- У вас Linux-сервер?
— Вы храните прикрепленные файлы ИБ в файловых томах?
— Тогда мы идем к вам!"
Долгое время у нас резервное копирование обозначенных файлов выполнялось простой упаковкой в архив(ы) с помощью tar, и последующим копированием полученного архива(ов) на сетевое хранилище с целью последующей "утилизации". Количество файлов растет, количество каталогов — тоже, время создания архива превышает час(ы), размер архива — более 10-ков ГБ.
В такой ситуации мы имеем несколькочасовую нагрузку на дисковую подсистему (в процессе создания архива) и последующую нагрузку на сеть (при копировании архива на удаленный сервер). При чем, валидность копии архива на удаленном сервере никак не проверялась, а ведь в процессе копирования могут возникнуть разные ситуации.
Дабы избавится от всего этого благолепия безобразия был состряпан простой скрипт, который синхронизирует каталог на сервере с 1С Предприятием (исходный файловый том) и каталог на удаленном сервере, хранящем "резервную копию". В последующем каталог на удаленном сервере рекомендуется регулярно упаковывать и хранить уже архив.
Как итог:
1. Время синхронизации каталогов меньше времени создания архива;
2. Нет лишней нагрузки на дисковую подсистему;
3. Нет лишней нагрузки на сеть;
4. Валидность удаленной копии обеспечивается средствами rsync;
5. Срипт информирует пользователя о текущих действиях с указанием текущего времени;
6. Лог синхронизации каталога(ов) хранится в файле(ах) /var/log/rsync_<имя_каталога_источника>.log.
Текст скрипта ниже. Все необходимые правки пояснены комментариями.
#!/bin/sh
#
# 1C Enterprise 8.3 Infobase Attachment Files Backup Script
#
# (c) 2024, Alexey Y. Fedotov
#
# Email: fedotov@kamin.kaluga.ru
#
DIR_BACKUP="<каталог_для_монтирования_сетевого_хранилища>" # Например, /mnt/backup
DIR_REMOTE="<сетевой_диск>" # Например, //server/backup
DIR_SOURCE="<каталог_источник_1> <каталог_источник_2> ... <каталог_источник_N>" # каталоги для синхронизации, записанные через пробел
# Например, DIR_SOURCE="/data/ib_first /data/ib_second", в конце не должно быть символа "/"!
# В файле /etc/mnt_backup.conf должны хранится учетные данные для подключеник к удаленному серверу
# username=<имя_пользователя>
# password=<пароль_пользователя>
CMD_MOUNT="$(which mount) -t cifs -o credentials=/etc/mnt_backup.conf"
CMD_UMOUNT=$(which umount)
CMD_RSYNC="$(which rsync) -av"
CMD_DATE=$(which date)
DATE_FORMAT="+%b %d %H:%M:%S"
echo "$(${CMD_DATE} "${DATE_FORMAT}") INFO: Infobase Attachment Files Backup Script is started!"
[[ ! -d ${DIR_BACKUP}/files ]] && ${CMD_MOUNT} ${DIR_REMOTE} ${DIR_BACKUP} && \r
echo "$(${CMD_DATE} "${DATE_FORMAT}") INFO: Network share is mount successfuly!"
for DIR_CURRENT in ${DIR_SOURCE}
do
echo "$(${CMD_DATE} "${DATE_FORMAT}") INFO: Start rsync for ${DIR_CURRENT}"
${CMD_RSYNC} ${DIR_CURRENT} ${DIR_BACKUP}/files > /var/log/rsync_${DIR_CURRENT##*/}.log && \r
echo "$(${CMD_DATE} "${DATE_FORMAT}") INFO: rsync for ${DIR_CURRENT} is complete successfuly ($(grep -ce "${DIR_CURRENT##*/}/.*[#k8SjZc9Dxk/]$" /var/log/rsync_${DIR_CURRENT##*/}.log) files synced)!" || \r
echo "$(${CMD_DATE} "${DATE_FORMAT}") WARNING: Something wrong, when rsync for ${DIR_CURRENT}"
done
${CMD_UMOUNT} ${DIR_BACKUP} && echo "$(${CMD_DATE} "${DATE_FORMAT}") INFO: Network share is unmount successfuly!"
echo "$(${CMD_DATE} "${DATE_FORMAT}") INFO: Infobase Attachment Files Backup Script is complete!"
Все что необходимо сделать, это внести свои значения в обозначенных местах, поместить файл на сервер с 1С Предприятием и добавить его запуск в расписание cron.
Пример использования на сервере с CentOS
1. Размещаем файл скрипта на сервере, к примеру, в каталоге /usr/local/sbin
$ sudo cp backup_files.sh /usr/local/sbin # Копируем файл скрипта
2. Устанавливаем для данного скрипта права на исполнение
$ sudo chmod 755 /usr/local/sbin/backup_files.sh
3. Добавляем символьную ссылку в каталог /etc/cron.daily
$ sudo ln -s /usr/local/backup_files.sh /etc/cron.daily/
P.S. Данный скрипт копирует файлы на удаленный Windows-сервер, поэтому если вам необходим какой-то другой сценарий, то меняйте скрипт в соответствии с вашими нуждами!
А в заключении заметки …
ВОПРОС: а как вы делаете резервные копии прикрепленных файлов? Проверяете ли их логическую целостность с точки зрения информационной базы? Если да, то как?