Linux синхронизация локальных папок

Установка и настройка сервиса Lsyncd на Linux

Обновлено

Обновлено: 19.08.2022 Опубликовано: 13.10.2020

Используемые термины: rsync, Linux, CentOS, Ubuntu. Lsyncd позволяет отслеживать состояние каталога с помощью подсистемы ядра inotify, и при помощи утилиты синхронизации rsync, менять содержимое другого каталога, таким образом, приводя оба каталога к единому виду. Это может использоваться для зеркалирования кластерной системы или создания оперативного бэкапа (не путать с полноценной резервной копией). В данной инструкции нами будет рассмотрен процесс установки и настройки Lsyncd на компьютер с Linux CentOS версий 8 и 7, а также Ubuntu. Мы настроим синхронизацию папок как на локальном компьютере, так и удаленных по сети.

Установка и тестовый запуск

Выполним установку lsyncd на Linux, а также настроим сервис для синхронизации двух каталогов на локальном компьютере.

Установка

В зависимости от типа операционной системы, наши действия будут отличаться. а) RPM (Rocky Linux, CentOS):

Настройка и запуск

settings <
logfile = «/var/log/lsyncd.log»,
statusFile = «/var/log/lsyncd.stat»,
statusInterval = 5,
insist = true,
nodaemon = false,
>

sync default.rsync,
source=»/tmp/source»,
target=»/tmp/target»,
>

  • settings — общие настройки.
    • logfile — путь до файла логов.
    • statusFile — файл, в который заносятся изменения, найденные с помощью inotify.
    • statusInterval — интервал в секундах для обновления statusFile.
    • insist — позволяет продолжить работу сервиса, даже если одна или несколько целевых директорий недоступны.
    • nodaemon — отключаться или нет от вызывающей стороны. Проще говоря, если разрешить, то будет больше информации по его работе. Для боевого режима можно отключить.
    • default.rsync — должен использоваться протокол для синхронизации rsync.
    • source — источник, откуда синхронизируем данные.
    • target — куда синхронизируем.

    * в данном примере мы синхронизируем два каталога на локальном компьютере. Таким же образом, можно синхронизировать данные и в подмонтированных каталогах, например, по nfs или cifs (smb).

    Создадим два тестовых каталога:

    Перезапускаем сервис lsyncd:

    Пробуем создать тестовый файл к каталоге-источнике:

    Ждем 5-10 секунд. Проверяем содержимое каталога-цели:

    Синхронизация по сети (SSH)

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

    SSH без пароля (по сертификату)

    На компьютере, с которого будем передавать файлы (lsyncd) генерируем ключи:

    . на все запросы просто нажимаем Enter.

    Переносим id_rsa.pub на целевой компьютер (куда будем передавать данные с помощью lsyncd):

    scp /root/.ssh/id_rsa.pub dmosk@192.168.1.15:/home/dmosk/.ssh/authorized_keys

    * если мы получим ошибку scp: /home//.ssh/authorized_keys: No such file or directory, необходимо на удаленном компьютере создать каталог .ssh в профиле пользователя, которому мы пытаемся передать ключ. Например, командами, mkdir /home/dmosk/.ssh и chown dmosk:dmosk /home/dmosk/.ssh.
    * обратите внимание, что мы передаем созданный ключ в каталог пользователя dmosk. Это значит, что мы будем подключаться к целевому компьютеру от этого пользователя. Важно, чтобы у последнего были подходящие права для редактирования файлов в целевой папке, в которую мы будем синхронизировать данные.

    Пробуем подключиться к удаленному компьютеру:

    Мы должны подключиться по SSH без ввода пароля. В противном случае, на целевом компьютере (к которому у нас не получилось подключиться) открываем конфигурационный файл для ssh:

    И приводим опцию AuthorizedKeysFile к следующему значению:

    Источник

    Rsync: копирование и синхронизация файлов с удаленным сервером

    date

    21.04.2020

    user

    VyacheslavK

    directory

    CentOS, Linux

    comments

    комментариев 5

    Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.

    Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл. Другая важная особенность rsync – файлы передаются в один поток, не создается отдельный поток для каждого файла (что вызывает проблему при передаче большого количества маленьких файлов в других утилитах).

    В данной статье мы рассмотрим варианты использования rsync для синхронизации и копирования каталогов и файлов, и приведем примеры его расширенных настроек.

    Установка и основные параметр rsync

    Установка rsync не отличается от установки, любого другого пакета. В CentOS пакет rsync присутствует в базовом репозитории и устанавливается через yum (или dnf в CentOS 8):

    Синтаксис команды выглядит следующим образом:

    # rsync опции источник приемник

    В качестве источника и приемника можно указать локальную или удаленную директорию на другом сервере.

    • -v – вывести подробную информацию о процессе
    • -c – проверка контрольных сумм файлов
    • -q – минимальная информация

    Rsync: локальное копирование/синхронизация каталогов

    Rsync можно использовать для копирования файлов между локальными директориями сервера. Если вам нужно скопировать файлы из одной директории в другую, выполните команду:

    # rsync /var/www/html/package.zip /var/www/tmp/

    В этом случае файл package.zip был просто скопирован в директорию /var/www/tmp/.

    Можно добавить несколько опций для выполнения копирования. Например, чтобы перед выполнением копирования предварительно сжать файл, вывести подробную информацию и прогресс копирования файла, выполните:

    # rsync -vz —progress /var/www/html/package.zip /var/www/tmp/

    rsync - копирование файлов с отображением прогресса

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

    # rsync -zvr /var/www/site /backup/

    Мы скопировали директорию /var/www/site в директорию для резервных копий, опция -r позволила рекурсивно скопировать все вложенные директории и файлы.

    Чтобы сохранить все атрибуты файлов при копировании, например, дату изменения и дату создания файлов, добавьте ключ -a:

    # rsync -zvra /var/www/site /backup/

    rsync синхронизация с сохранением атрибутов

    Если вы хотите скопировать только измененные файлы, добавьте опцию -c:

    # rsync -zvrac /var/www/site /backup/

    Я изменил только один файл и запустил команду. В результате в целевую директорию, был скопирован только измененный файл.

    rsync -zvrac копирование только измененных файлов

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

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

    # rsync -zvrac —delete /var/www/site /backup/

    rsync копирование с удалением

    Rsync: настройка синхронизации с удаленным сервером

    Чаще всего копирование/синхронизация rsync с удаленным сервером используется для резервного копирования или синхронизации конфигурации нод кластера. Можно выполнять автоматическую синхронизацию данных с рабочего сервера на резервный, и в случае проблем на продуктивном севере быстро все перевести на резервный. Это довольно удобный и простой в настройке вариант.

    В современных версиях rsync протокол SSH используется для передачи файлов по-умолчанию. Однако вы можете использовать и демон rsyncd. Для этого клиент rsync должен быть установлен на удаленном компьютере, и его демон добавлен в автозагрузку:

    Конфигурационный файл rsync — /etc/rsyncd.conf. В этом файле можно настроить параметры rsync и настройки для синхронизации для разных ресурсов.

    Для синхронизации через демона rsync адрес удаленного сервера указывается так rsync://. Например:

    # rsync -av /var/www/site/package.zip rsync://192.168.1.32/backup

    Чтобы скопировать файл на удаленный сервер, используйте команду:

    # rsync -az /var/www/site/package.zip [email protected]:/backup/

    Где IP, это адрес удаленного сервера. После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авотризации нужно настроить SSH ключи.

    Скопируем директорию с локального сервера на удаленный:

    # rsync -zvra /var/www/site [email protected]:/backup/

    бэкап на другой сервер по сети с помощью rsync

    То есть, все тоже самое, что и с локальными директориями, только мы указываем адрес удаленного сервера.

    Так же вы можете синхронизировать файлы и с удаленного сервера на локальный, команда для этого немного изменится:

    rsync backup

    Для принудительного использования SSH протокола для копирования файлов, укажите это в вашей команде (для выбора транспортного протокола копирования файлов используется опция –e):

    # rsync -zvrae ssh [email protected]:/backup/ /backup

    Если удаленный SSH сервер имеет отличный от стандартного порт, его так же можно указать:

    # rsync -zvrae «ssh -p 2222» [email protected]:/backup/ /backup

    Другие примеры использования rsync

    Если в рамках сессии синхронизации вы передаете много информации и важно ограничить скорость передачи, задайте это дополнительной опцией –bwlimit (указывается скорость в КБ/с):

    # rsync -zvra —bwlimit=100 /var/www/site [email protected]:/backup/

    При передаче файлов на удаленный сервер, вы можете ограничить максимальный размер файлов, которые нужно скопировать. Например, вы хотите скопировать все файлы, кроме файлов размером более 1 Мб:

    # rsync -zvra —max-size=’1m’ /var/www/site [email protected]:/backup/

    Если у вас на сервере нужна односторонняя синхронизация и после переноса файлов на удаленный сервер нужно удалить файлы с исходного сервера, воспользуйтесь опцией —-remove-source-files:

    # rsync -zvra —remove-source-files —progress /var/www/site/package.zip [email protected]:/backup/

    После выполнения команды, файл был скопирован на удаленный сервер и удален на источнике:

    rsync remove-source-files

    Так же очень удобный опции —include и —exclude, с помощью этих опций, можно делать исключения по копированию директорий или файлов:

    # rsync -zvra —exclude=administrator/ /var/www/site [email protected]:/backup/

    исключения в rsync

    В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.

    # rsync -zvra —include=’*.php’ —exclude=’*’ /var/www/site/administrator/ [email protected]:/backup/

    rsync exclude

    Добавлением опции —include мы смогли задать фильтр по файлам, скопировали только файлы с расширением php.

    Резервное копирование в Linux с помощью rsync

    В своей рабое я часть использую rsync для автоматических задач резервного копирования в Linux. Можно написать простые bash скрипты или просто добавить команду rsync в cron и выполнять по расписанию.

    Например, можно добавить в cron команду:

    01 30 * * * rsync -zvra [email protected]:/backup/ /backup

    В резульатате каждый день в 1-30 ночи, будет выполняться синхронизация каталогов локального и удаленного серверов.

    Стоит учесть, что для выполнения команды rsync на удаленном сервер через cron, желательно настроить авторизацию серверов по SSH ключу. Примеры скриптов для бэкапа, мы приводили в статье «Скрипты для бэкапа файлов из Linux в облако», там как раз используется rsync для копирования файлов в подключенные облачные хранилища.

    Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

    Источник

    Читайте также:  Linux for windows developers
Оцените статью
Adblock
detector