# Создание бэкапа удалённого сервера при помощи Rsync
Эта инструкция — продолжение нашего руководства по установке и настройке Rsync. В этой части мы расскажем, как при помощи Rsync создать бэкап сервера и сохранить его на другой машине и как делать это регулярно — добавим задачу в планировщик задач cron.
Мы будем описывать настройку работы Rsync на сервере с Ubuntu. Для CentOS и Debian процедура настройки будет аналогичной.
# Настройка сервера-клиента
Здесь мы расскажем о том, как настроить сервер, для которого будем создавать бэкап.
Если на машине нет Rsync, тогда установите его. Как это сделать — читайте в нашей инструкции по установке и настройке Rsync.
После установки открываем конфигурационный файл:
sudo vim /etc/rsyncd.conf
При первичной настройке мы только создали файл и оставили его пустым. Сейчас заполним его:
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = true
munge symlinks = yes
[data]
path = /var/log
uid = root
read only = yes
list = yes
comment = Data backup Dir
auth users = backup
secrets file = /etc/rsyncd.scrt
Здесь мы указываем следующие параметры:
pid file
— указание пути к файлу, в котором будет сохранён идентификатор процесса;log file
— указание пути к файлу с логами работы программы;transfer logging
— указание на ведение логов процесса (включает логирование выполнения);munge symlinks
— указание на модификацию символьных ссылок, которая сохраняет символьные ссылки, но не позволяет их использовать, пока они находятся в бэкапе (одно из усилений безопасности).
Строка [data] — обозначение начала отдельного блока данных, в котором мы описываем параметры сохраняемых в бэкап данных:
path
— путь к папке, содержащей нужные данные;uid
— пользователь, от имени которого будет производиться резервное копирование;read only
— указание прав доступа к копируемым ресурсам (только чтение);list
— указание на вывод списка копируемых файлов (доступ пользователей к списку копируемых файлов);comment
— комментарий к копируемым данным;auth user
— имя пользователя для подключения к этому серверу;secrets file
— путь к файлу, в котором хранится имя пользователя и пароль в форматеuser:password
.
После указания всех необходимых данных сохраняем и закрываем конфигурационный файл.
Теперь создаём файл, содержащий в себе учётные данные пользователя, от имени которого будет производиться резервное копирование:
sudo vim /etc/rsyncd.scrt
В открывшийся пустой файл добавляем учётные данные нашего пользователя:
backup:password
Теперь устанавливаем права на доступ к этому файлу только для root-пользователя:
chmod 0600 /etc/rsyncd.scrt
После этого осталось только перезапустить rsync, и он будет полностью готов к работе:
sudo systemctl restart rsync
Сервер, бэкап которого будем создавать, настроен. Переходим к его настройке.
# Настройка хранилища
Здесь нам нужно написать скрипт, который будет по SSH подключаться к серверу, на котором настроен клиент rsync, и «забирать» определённые данные. Чтобы написать скрипт, воспользуемся любым текстовым редактором:
sudo vim /bin/server_backup.sh
В открывшееся окно добавим следующую информацию:
date
syst_dir=/backup/
srv_name=server1
srv_ip=10.10.1.55
srv_user=backup
srv_dir=data
echo "Start backup ${srv_name}"
mkdir -p ${syst_dir}${srv_name}/increment/
/usr/bin/rsync -avz --progress --delete --password-file=/etc/rsyncd.scrt ${srv_user}@${srv_ip}::${srv_dir} ${syst_dir}${srv_name}/current/ --backup --backup-dir=${syst_dir}${srv_name}/increment/`date +%Y-%m-%d`/
/usr/bin/find ${syst_dir}${srv_name}/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
date
echo "Finish backup ${srv_name}"
Здесь мы описали следующие параметры:
syst_dir
— директория, в которой будем сохранять бэкап (заранее убедитесь, что под неё выделено достаточно дискового пространства);srv_name
— имя сервера, бэкап которого будем создавать;srv_ip
— адрес сервера, к которому будем подключаться;srv_user
— имя пользователя rsync, которое мы указали на предыдущем этапе, создавая конфигурационный файл на сервере-клиенте;srv_dir
— данные, которые будем сохранять — в данном случае указываем data, поскольку именно этот блок описан в конфигурационном файле сервера-клиента.
Это основные директивы, определяющие параметры подключения к серверу-клиенту. Далее идёт описание самого процесса создания резервной копии. В качестве дополнительного параметра, позволяющего следить за объёмом занимаемого дискового пространства, мы добавили в скрипт процедуру, удаляющую резервные копии старше 30 дней.
Сохраняем и закрываем наш скрипт. После этого делаем его исполняемым файлом:
sudo chmod 0744 /bin/server_backup.sh
Теперь нужно создать файл, в котором будет указан пароль для авторизации на сервере-клиенте:
sudo vim /etc/rsyncd.scrt
Здесь указываем только пароль для доступа к серверу: password
.
После этого передаём права на доступ к этому файлу пользователю root:
sudo chmod 0600 /etc/rsyncd.scrt
Всё готово. Можно проверять работу нашего скрипта, просто запустив его:
sudo sh /bin/server_backup.sh
Если все настройки произведены правильно, то в консоли мы увидим сведения о количестве переданных байт, скорость обмена ими, их список и т.д.:
# Output
…
zabbix/zabbix_server.log
1,252,925 100% 1.75MB/s 0:00:00 (xfr#6, to-chk=0/69)
sent 70,661 bytes received 103,374 bytes 116,023.33 bytes/sec
total size is 86,776,026 speedup is 498.61
Tue 05 Apr 2022 02:23:26 PM +05
Finish backup server_name
Скрипт, создающий резервные копии наших данных, готов. Осталось только добавить его к списку задач cron, чтобы резервные копии создавались автоматически.
# Добавление скрипта в Cron
В Linux есть встроенный механизм выполнения заданий по расписанию — планировщик задач Cron. Это универсальный инструмент, позволяющий создавать расписание для выполнения скриптов, что значительно упрощает администрирование и позволяет перевести часть рутинных процессов в фоновый режим.
Перед началом работы с Cron следует ознакомиться с синтаксисом файла, где создаются задачи.
Добавляется задача в одну строку: * * * * * path/to/script
. Основные параметры здесь — параметры времени, указанные в строке звёздочками. На месте звёздочек указываются минуты, часы, числа месяца, номер месяца и номер дня недели, в которые нужно запускать данный скрипт.
Например:
30 * * * * path/to/script
— скрипт запускается каждые 30 минут;0 12 15 * * path/to/script
— задание выполняется каждый месяц, 15 числа, в 12:00;15 10 * * 2 path/to/script
— задание выполняется по вторникам в 10:15.
Теперь добавим наш скрипт в Cron:
sudo crontab -e
Эта команда откроет файл, описывающий синтаксис добавления команд в cron, и сам список выполняемых заданий. Добавляем наш скрипт в этот файл после закомментированных строк:
…
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
30 12 * * * /root/bin/backup-server1.sh
Здесь мы указали следующее задание — выполнять резервное копирование каждый день в 12:30.