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

  • 82

Утилита 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

 


Was this answer helpful?

« Back