# Создание бэкапа удалённого сервера при помощи 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.