Синхронизация директорий с помощью утилиты Unison

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

Полная процедура синхронизации файлов включает в себя следующие этапы:

  1. Создание SSH ключей;

  2. Установка Unison;

  3. Установка SSHFS и монтирование каталога для синхронизации;

  4. Копирование файлов с помощью Rsync;

  5. Создание конфига Unison;

  6. Постановка задачи в cron на запуск синхронизации.

Создание SSH ключей

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

 

ssh-keygen


Далее следует ввести путь файла в который будут помещены ключи, например $HOME/.ssh/id_rsa. Для того что оставить путь по умолчанию необходимо нажать Enter.

 

Для ограничения доступа к закрытому ключу используется passphrase (пароль). Пункт создания пароля можно пропустить нажав клавишу Enter, но в таком случае надёжность ключа существенно снижается, т.к. в случае потери его смогут использовать третьи лица.

 

При успешном создании пары ключей вы увидите randomart image.

 

Открытые ключи хранятся в файле /$HOME/.ssh/id_rsa.pub, закрытые — /$HOME/.ssh/id_rsa.

 

Далее необходимо скопировать ключ на сервер в директорию /$HOME/.ssh/authorized_key. Эту операцию можно выполнить следующим образом:

 

cat ~/.ssh/id_rsa.pub | ssh user@host %22cat >> ~/.ssh/authorized_keys%22

 

После выполнения всех вышеописанных операций вы получите доступ к серверу по SSH ключу.

Установка Unison

Установка Unison осуществляется с помощью следующих команд:

 

sudo apt update

sudo apt install unison

 

Важно чтобы версия Unison была одинакова на всех системах, вплоть до x.xx в номере версии.

Установка SSHFS и монтирование каталога для синхронизации

Чтобы установить SSHF необходимо выполнить команды:

 

sudo apt update

sudo apt install SSHFS

 

Теперь необходимо создать директорию для монтирования удаленного раздела к локальному:

 

sudo mkdir /mnt/destinationdirectory

 

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

 

sudo sshfs username@host:/path/to/remote/directory /mnt/destinationdirectory

Копирование файлов с помощью Rsync

Для того чтобы скопировать необходимые директории и файлы с исходными правами владельца и доступа с исходного сервера на сервер назначения необходимо выполнить следущую команду:

 

rsync -rctuvpogz /path/on/source /mnt/destinationdirectory

 

Таким образом создаётся валидная копия файлов на сервере назначения с которой можно работать с помощью программы Unison.

Создание конфига Unison

Официальная документация по использованию и конфигурированию Unison доступна по ссылке. В данном материале предлагается пример конфигурации при которой:

  • синхронизация происходит в заданых каталогах (#Directories to sync);

  • сохраняются права доступа и владельца (#Leave chown and chmod);

  • при необходимости могут синхронизироваться только выбранные директории, исключая остальные  (#List of included Directories);

  • можно исключать из синхронизации определенные типы файлов (#Excluding file types);

  • для избежания конфликтов при синхронизации, разные версии файлов можно выгружать в отдельную директорию, для дальнейшего их анализа (#Backing up modified files);

  • для отладки можно задать формат вывода разницы версий файлв (# showing backup files differences);

  • возможно включить логирование с указанием пути к файлу лога (#Logging the process ).

 

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

 

nano ~/.unison/$UNISONCONFIGNAME.prf

 

Далее вносим соответствующие параметры:

 

#Directories to sync

root = /path/to/source/directory/

root = /path/to/destination/directory/

 

#Leave chown and chmod

owner = true

times = true

 

#List of included Directories (excluding the rest), if needed

#path = cgi-bin

#path = htdocs

#path = conf

 

#Excluding file types

ignore = Name *~

ignore = Name .*~

ignore = Name *.o

ignore = Name *.tmp

ignore = Name {,.}*{.old}

 

#Backing up modified files (to avoid sync conflict)

backup = Name *

backups = true

backupdir = /path/to/backup/directory/

 

# showing backup files differences

#diff = diff -y -W 79 --suppress-common-lines

 

#Logging the process 

log = true

logfile = ./path/to/log/directory/unison.log

Постановка задачи в cron на запуск синхронизации

Открываем crontab для редактирования следующей командой

 

crontab -e

 

Далее добавляем строки

 

SHELL=/bin/bash

* * * * * unison -force newer -times -batch $UNISONCONFIGNAME

 

Чтобы привести файл к виду:

 

# For more information see the manual pages of crontab(5) and cron(8)                                                SHELL=/bin/bash

 # m h  dom mon dow   command

 

* * * * * unison -force newer -times -batch $UNISONCONFIGNAME

 

Помог ли вам данный ответ?

 Распечатать статью

Также читают

Нет доступа по RDP: “Службы удаленных рабочих столов затратили слишком много времени на загрузку пользовательской конфигурации”

В случае недоступности сервера по RDP и обнаружения в логах windows сообщения “Службы удаленных...

Какие IP можно пропинговать, чтобы увидеть время ответа ваших серверов?

Для того, чтобы пропинговать и увидеть время ответа наших серверов Вы можете использовать...

Проверка состояния RAID-массива на аппаратном LSI

Управление дисковым массивом работающего на аппаратном контроллере LSI MegaRAID, мы рекомендуем...

Какую панель управления можно установить на Windows 2012 Server?

На ОС Windows 2012 Server можно установить панель управления Plesk.Стоимость от 6.6 евро в месяц

Как прописать PTR, обратную IP запись для своего VPS сервера?

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