Тариф успешно добавлен в корзину
В корзину
url image

Установка, настройка и примеры синхронизации rsync

Важность обмена информацией в современном мире невозможно переоценить. От сохранности данных зачастую зависит не только IT-бизнес, но и частная жизнь. Мы уже рассказывали о резервном копировании в Linux — самой популярной операционной системе, используемой на серверах. Теперь давайте подробнее рассмотрим утилиту командной строки rsync (Remote Synchronization, удаленная синхронизация) — программу с открытым исходным кодом, предназначенную для передачи файлов и синхронизации данных между удалёнными компьютерами, с помощью которой можно легко и быстро сохранить и восстановить данные на сервере или персональном компьютере.

Особенности rsync

Rsync — очень мощная утилита, которая позволяет:

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

Среди ключевых особенностей этой программы можно выделить:

  • Скорость. При копировании файлов rsync применяет алгоритм, позволяющий передавать только изменившиеся блоки данных. Все файлы отправляются одним потоком. Кроме того, при передаче информации можно использовать сжатие на лету. В совокупности эти методы работы дают не только выигрыш по скорости, но и минимальный сетевой трафик, а также экономию ресурсов системы и повышение производительности в целом.
  • Гибкость. Программу можно использовать для удалённой и локальной синхронизации файлов. Rsync прекрасно поддаётся автоматизации: его можно запускать вручную и по расписанию. При синхронизации каталогов можно на выбор сохранять или удалять устаревшие версии файлов, исключать отдельные файлы или целые каталоги по маске и так далее.
  • Надёжность. При передаче файлов и каталогов сохраняются их метаданные, а процесс передачи данных можно контролировать. Программа также поддерживает режим эмуляции передачи, значительно облегчающий процесс отладки.
  • Безопасность. При передаче данных по сети rsync по умолчанию использует безопасный протокол SSH, но для подключения можно также использовать собственную службу. Поддерживается авторизация по ключу, не требующая отправки пароля. Запуск rsync не требует прав суперпользователя root, что снижает риски при резервном копировании. При необходимости возможно подключение без пароля (анонимный Rsync).

Как установить rsync

Rsync входит в состав большинства дистрибутивов Linux. Установить его можно через стандартный менеджер пакетов системы, например apt для deb-based дистрибутивов (Debian, Ubuntu и так далее):

sudo apt install rsync

В современных rpm-based дистрибутивах (CentOS Stream, Fedora и других) используется пакетный менеджер dnf:

sudo dnf install rsync

Для персональных компьютеров при желании можно дополнительно установить графический интерфейс, например Grsync.

Приступаем к работе

Синтаксис rsync

Запуск rsync имеет очень простой синтаксис:

Синтаксис rsync

И источник, и приёмник могут быть локальными или удалёнными директориями, доступными по протоколам SSH, rsync, ftp или samba. Конечно, вместо использования сетевых протоколов удалённую директорию можно просто примонтировать к существующей файловой системе и использовать её как обычный каталог.

Обратите внимание, что для запуска rsync не обязательны права суперпользователя root, достаточно иметь права доступа к источнику и приёмнику.

Копирование и синхронизация файлов на локальном компьютере

Теперь давайте попробуем rsync в работе. Для примера создадим в домашнем каталоге папки test1 и test2:

cd ~ && mkdir test{1,2}

Добавим в первый каталог test1 десяток пустых файлов:

touch test1/file{1..10}

Теперь чтобы синхронизировать каталоги test1 и test2, достаточно выполнить команду rsync с параметром -a, указав в качестве аргументов пути каталога-источника test1 и приёмника test2:

rsync -a test1/ test2

Параметр -a (--archive) означает архивный режим, при котором все файлы и каталоги из источника (test1) записываются в каталог назначения (test2), сохраняя при этом всю служебную информацию — владельца, права доступа, время правки и так далее. Убедиться, что всё так, как ожидалось, можно с помощью команды «ls -l test2»:

Терминал Linux, команда ls
Терминал Linux, команда ls

Другим полезным параметром при отладке синхронизации может быть -v (--verbose), включающий подробный вывод информации. Чтобы проверить работу rsync без реальной записи файлов, можно указать параметр -n (--dry-run). В этом случае программа только сообщит о действиях, которые могли бы быть выполнены. Вот вывод программы с набором параметров аnv:

Терминал Linux, команда rsync в режиме DRY RUN
Терминал Linux, команда rsync в режиме DRY RUN

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

Синхронизация с удалённым сервером

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

rsync -a ~/test1 <логин_пользователя>@<IP_адрес_сервера>:/<каталог_на_сервере>

Эта команда доставит данные из каталога test1 в домашней папке пользователя на локальном компьютере в папку «каталог_на_сервере». Обратите внимание, что для работы удалённой синхронизации должен быть настроен SSH-доступ по ключу.

Обратная операция, выполняющая загрузку данных с удалённого сервера на локальный компьютер, может выглядеть примерно так:

rsync -a <логин_пользователя>@<IP_адрес_сервера>:/<каталог_на_сервере> ~/test1

Как видите, в любом варианте первым аргументом rsync является источник данных, а вторым — место назначения.

Параметры rsync

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

В качестве примера можно привести параметр --delete, удаляющий файлы из каталога назначения в том случае, если они удалены из источника:

rsync -a --delete <источник> <приёмник>

Ещё одним полезным параметром может стать --exclude, исключающий из передачи файлы или каталоги по заданному шаблону:

rsync -a --exclude=<шаблон_для_исключения> <источник> <приёмник>

Например, --exclude='.*' исключит из синхронизации скрытые файлы и папки, которые могут содержать чувствительные данные, что важно для обеспечения информационной безопасности. Также для экономии места на диске и сетевого трафика из передачи можно исключить временные файлы и другие данные, не представляющие ценности. Конечно, параметров --exclude может быть несколько.

Вы также можете ограничить максимальный размер передаваемых файлов с помощью параметра --max-size=РАЗМЕР.

При необходимости можно также ограничить скорость передачи файлов, указав параметр --bwlimit=СКОРОСТЬ. Скорость здесь задаётся в килобайтах в секунду. Ограничение скорости передачи может быть полезно в случае низкой пропускной способности канала связи.

После успешной передачи rsync может удалить исходные файлы. Для этого нужно добавить параметр --remove-source-files.

Другие полезные параметры:

  • --include="<шаблон_для_игнорирования_исключения>" — не исключать файлы по шаблону.
  • -z, --compress — сжимать поток передачи данных.
  • -l, --links — при обнаружении символьной ссылки пересоздать её на приёмной стороне.
  • -H, --hard-links — пересоздать жесткие ссылки на стороне получателя в соответствии с тем, что имеется в источнике.
  • -r, --recursive — рекурсивно переносить подкаталоги.
  • -o, --owner — сохранять владельца.
  • -g, --group — сохранять группу.
  • -p, --perms — сохранять разрешения.
  • -t, --times — сохранять время правки.
  • -D, --devices --specials — сохранять файлы устройств и специальные файлы.
  • -P, --partial --progress — выводить информацию о ходе передачи и сохранять частично переданные файлы.
  • -e, --rsh=КОМАНДА — использовать указанную команду удалённой оболочки (remote shell). По умолчанию используется SSH, что соответствует параметру -e ssh. Также в значении этого параметра можно передавать дополнительную информацию, например порт, расположение ключа авторизации и так далее.
  • -h, --human-readable — выводить числа в «человекочитаемом» формате.

Приведённый выше параметр -а эквивалентен набору -rlptgoD.

Подробно ознакомиться со всеми параметрами rsync можно в официальной документации или по команде man rsync.

Служба rsync

Для большего контроля над процессом синхронизации rsync позволяет вместо протокола SSH использовать собственную службу rsync-daemon (rsyncd).

Настройка службы rsync выполняется в файле /etc/rsyncd.conf, который может выглядеть примерно так:

Терминал Linux, файл конфигурации rsyncd.conf
Терминал Linux, файл конфигурации rsyncd.conf

Предположим, мы хотим запускать резервное копирование домашней директории с локального компьютера с IP-адресом 192.168.1.123 на сервер с адресом 192.168.1.1 в папку /backups/my. Для этого добавим в файл блок [my-backup], в котором укажем путь к архиву и IP-адрес, которому разрешён доступ:

[my-backup]
# Необязательный комментарий
comment = My backup directory on this server
# Путь к архиву
path = /backups/my
# Разрешим доступ к этому модулю только с IP-адреса одного локального компьютера
hosts allow = 192.168.1.123
hosts deny = *

Конечно, перед внесением правок в файл лучше сделать резервную копию:

sudo cp /etc/rsyncd.conf /etc/rsyncd.conf.orig

Теперь можно запустить службу rsyncd:

sudo systemctl start rsyncd

Проверить состояние службы rsyncd можно командой «systemctl status»:

Терминал Linux, статус службы rsyncd
Терминал Linux, статус службы rsyncd

Если мы всё сделали правильно, rsync может вывести список доступных модулей по команде «rsync rsync://localhost»:

Терминал Linux, модули службы rsyncd
Терминал Linux, модули службы rsyncd

Файл rsyncd.conf на локальном компьютере в этом случае может иметь такой вид:

# Пользователь, от имени которого производятся операции с файлами, и его группа
uid = <пользователь>
gid = <группа>
# Разрешим доступ к службе только с IP-адреса сервера
hosts allow = 192.168.1.1
hosts deny = *
read only = no
[my-home-dir]
comment = Home directory on my computer
# Путь к каталогу для синхронизации
path = /home/<пользователь>

После сохранения файла можно запустить службу rsyncd на локальном компьютере.

Теперь пользователь локального компьютера может выполнить резервное копирование на сервер:

rsync -av /home/<пользователь> 192.168.1.1::my-backup

Это так называемая «push» операция. Восстановление из резервной копии доступно с помощью обратной «pull» операции:

rsync -av 192.168.1.1::my-backup /home/<пользователь>

Аналогичные операции можно выполнить и на стороне сервера:

# сохранение резервной копии (pull)
rsync -av 192.168.1.123::my-home-dir /backups/my
# восстановление резервной копии (push)
rsync -av /backups/my/ 192.168.1.123::my-home-dir

Обратите внимание, что по умолчанию клиенты могут подключаться к службе rsyncd без пароля, то есть в режиме «анонимный rsync». Это поведение можно переопределить параметром «auth users», указав в нём логины пользователей, которым разрешён доступ. Пароли пользователей в этом случае задаются в файле «secrets file». Например, предыдущий файл конфигурация в этом случае может быть таким:

uid = <пользователь>
gid = <группа>
# Требовать ввод пароля для подключения к службе на этом компьютере
auth users = <логин администратора>
# Расположение файла с логинами и паролями
secrets file = /etc/rsyncd.secrets
[my-home-dir]
comment = Home directory on my computer
path = /home/<пользователь>

Пару логин и пароль нужно разместить в указанном файле /etc/rsyncd.secrets в виде простой строки вида

<логин администратора>:<пароль>

Теперь при вводе команд pull и push нужно указать логин администратора, например:

rsync -av <логин администратора>@192.168.1.123::my-home-dir /backups/my

После ввода этой команды система запросит пароль, заданный в файле /etc/rsyncd.secrets.

Как видите, rsync позволяет очень гибко настроить резервное копирование. Конечно, эти операции можно легко автоматизировать с помощью shell-скриптов и таймеров systemd или планировщика cron.

Разумеется, в этом простом примере мы рассмотрели далеко не все возможности rsyncd. Подробное описание и полный список параметров службы доступны по команде

man rsyncd.conf

Безопасность данных

Используя любые системы переноса или синхронизации информации, тщательно контролируйте сохранность данных. Например, если по какой-либо причине копируемая директория окажется пустой или будет содержать повреждённые файлы, копия также окажется повреждённой. Также советуем с осторожностью использовать параметры, удаляющие исходные файлы.

Заключение

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

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!