# Создание резервных копий при помощи Rsync

Создание резервных копий — один из самых важных пунктов в любой работе, связанной с веб-разработкой, администрированием или поддержанием работоспособности веб-проектов.

Для создания резервных копий существует очень много инструментов — от встроенных системных утилит и приложений до предлагаемых хостинговыми компаниями сервисов.

В этой статье мы рассмотрим работу одной из устанавливаемых утилит — Rsync. Она довольно просто настраивается, а синтаксис её команд интуитивно понятен и не вызывает вопросов в большинстве случаев.

Для начала работы нам понадобится только подготовленный к работе сервер на одной из операционных систем — Ubuntu или CentOS. Синтаксис команд не различается для разных операционных систем — отличаться будут только способы установки.

# Установка и запуск Rsync

Устанавливать Rsync будем с помощью стандартных пакетных приложений, поэтому синтаксис команд будет стандартным:

# Ubuntu
sudo apt install rsync

#CentOS
sudo dnf install rsync rsync-daemon

В случае с CentOS установку после этого можно считать законченной — Rsync не потребует никакой дополнительной настройки, кроме активации:

sudo systemctl enable rsync

Для Ubuntu же потребуется дополнительно изменить конфигурационный файл Rsync:

sudo vim etc/default/rsync

Здесь найдём строчку RSYNC_ENABLE= и укажем в ней значение true. После этого создадим пустой конфигурационный файл — его можно будет заполнить позже, но без него программа не заработает:

sudo vim /etc/rsyncd.conf

Теперь программу также можно запускать:

sudo systemctl enable rsync

Проверить активность rsync можно стандартной командой:

sudo systemctl status rsync

Также можно посмотреть список прослушиваемых портов:

sudo netstat -tulpn

# Output
…
tcp       0      0 0.0.0.0:873             0.0.0.0:*                         LISTEN      63555/rsync
tcp6      0      0 :::873                        :::*                        LISTEN      63555/rsync

Как видим, rsync прослушивает строго определённый порт — 873.

Для правильной работы Rsync не забудьте добавить этот порт в список исключений фаервола, если он у вас запущен:

# Ubuntu
sudo ufw allow 873

# CentOS
sudo firewall-cmd --zone=name --add-port=873

Готово! Rsync установлен и готов к работе.

# Начало работы

Один из основных инструментов при работе с Rsync — командная строка. Команда rsync с различными комбинациями флагов позволяет создавать разные версии резервных копий.

Например, вот самая простая команда:

sudo rsync -r direktory1/ direktory2

Она копирует всё содержимое папки direktory1 в direktory2.

В команде есть флаг -a:

sudo rsync -a direktory1/ direktory2

Файлы скопируются с полным сохранением всех зависимостей — символьных ссылок, свойств файлов, прав на них и т.д.

Важно отметить небольшую особенность синтаксиса. Слэш / в конце первой директории означает, что сохраняться в бэкап будут только файлы. Вы можете не указать слэш в конце директории:

sudo rsync -r direktory1 direktory2

Тогда в бэкап будут добавлены не только файлы, но и сама папка, их содержащая. В данном случае структура бэкапа будет следующей: direktory2direktory1files.

# Создание резервных копий по SSH

Одна из интересных и полезных возможностей rsync — создание бэкапов по ssh. Вы можете самостоятельно создать резервные копии нужных данных, поместив их на свой удалённый сервер.

Для этого используется следующая команда:

sudo rsync -avz --progress --delete -e "ssh -p 2022" user@12.34.56.78/~/backup_data

Здесь:

  • --delete— ключ, указывающий на удаление в хранилище тех файлов, которых нет в источнике. Обычно он используется для создания «зеркал» — точных копий источника.

  • --progress — директива, добавляющая к процессу копирования файлов прогресс-бар. Это может быть полезно при копировании большого числа файлов.

  • ssh -p 2022 — указание на использование ssh-протокола для копирования файлов и номер порта для подключения.

  • user@12.34.56.78 — имя пользователя и адрес хоста для подключения по ssh к серверу, на котором будет храниться наш бэкап.

  • /~/backup_data — адрес директории, где будет храниться бэкап.

# Настройка исключений

При создании бэкапа можно создать список исключений — файлов, которые не будут сохраняться. Это можно сделать с помощью ключей --exclude и --exclude-from. В первом случае сразу после этого ключа указываются файлы, которые не нужно сохранять, например, --exclude *.png. В случае с --exclude-from после флага указывается адрес, в котором указан список исключений.

Различия в командах очевидны — первая используется, когда список исключений небольшой или когда нужно исключить только файлы определённого типа, вторая — при большом списке исключений.

В следующей инструкции мы расскажем, как автоматизировать создание бэкапов при помощи rsync — напишем скрипты и конфигурационые файлы для сервера-источника и сервера-хранилища, добавим наш скрипт в cron для регулярного выполнения задач.