Блог ИТ склеротика. Синхронизация данных. Просто и со вкусом

Страницы

Расширенный поиск в статьях блога

28 февраля 2012 г.

Синхронизация данных. Просто и со вкусом


Интернет вездсущ. Так-то оно так, только всё ещё встречаются на наших широтах места, где не то что DSL, но и хоть какой-нибудь GPRS  днём с огнём не сыщешь. В частности я, иногда выбирающийся подальше от цивилизации, всё равно беру ноутбук с собой, чтобы иной раз, при случае, поработать в тени речных ив. И тут, само собой возникает определённое неудобство. Что делать, когда вдали от домашней сети наваял что-то новенькое, удалил старенькое, но всё это происходит «локально», то бишь, изменения в структуре хранимых на жёстком диске данных, никак не «отмечаются» в домашнем хранилище? Данная проблема и побудила описать этот простой и элегантный, на мой взгляд, способ синхронизации данных между двумя Linux-хостами.


Итак, задача: реализовать двухстороннюю синхронизацию между двумя Linux-хостами. Скажу сразу, я не маялся в поисках подходящих GUI-утилит (коих множество), а пошёл по пути наименьшего сопротивления, воспользовавшись присутствующим в каждом Linux-дистрибутиве инструментом — старой-доброй rsync.
В моём случае имеется следующее: рабочая станция (стационарный компьютер, работающий дома под управлением Ubuntu 10.10) и ноутбук, который я везде таскаю, работающий под управлением Debian 5.0.6.

Настройка сервера rsync

Первым делом необходимо настроить rsync-сервер на обоих компьютерах. В моих системах пакет rsync установлен по умолчанию. Если в вашей системе это не так, установите его способом, принятым в вашей системе. Для Debian-подобных систем будет достаточно команды:
sudo apt-get install rsync
После установки пакета, необходимо разрешить его автозапуск в файле/etc/default/rsync:
RSYNC_ENABLE=true
И убедиться в том, что скрипт запуска вызывается при старте системы:
sudo update-rc.d rsync defaults
Далее, необходимо открыть доступ для клиентов rsync к нужным каталогам. В моём случае понадобилось предоставить доступ лишь к домашним каталогам на ноутбуке и рабочей станции. Вот пример моего файла настроек /etc/rsyncd.conf (имейте ввиду, что по умолчанию этого файла нет в системе, даже пустого):
[ashep]
 comment = ashep
 path = /home/ashep
 use chroot = true
 uid = ashep
 gid = users
 log file = /var/log/rsyncd/ashep.log
 read only = false
 write only = false
 hosts allow = adesktop.ashep
 hosts deny = *
 transfer logging = true
Используемые параметры описаны здесь. В данном же случае хочу обратить ваше внимание на следующее:
  • параметр log file можно не указывать, если вам это не нужно. Я же предпочитаю протоколировать всё, что только можно;
  • если вы не определите параметр log file, то нет смысла в определении transfer logging;
  • transfer logging в большинстве случаев полезен лишь на стадии тестирования, поэтому его можно и не включать в целях экономии ресурсов системы;
  • обратите внимание на значение параметра hosts allow в примере и замените его на соответствующее вашему случаю имя компьютера или IP-адрес;
  • тоже самое касается и параметров uid и gid.
Всё, сервер можно считать настроенным. Перезапустите его, чтобы сделать готовым принимать входящие подключения:
sudo /etc/init.d/rsync restart

Синхронизация

Теперь, когда rsync-серверы настроены на обоих хостах, можно выполнять синхронизацию. Сперва «зальём» копию домашнего каталога с рабочей станции на ноутбук (команда выполняется с рабочей станции):
rsync -vr /home/ashep/ rsync://alaptop.ashep/ashep
Обратите внимание на завершающий слеш при указании локального пути (/home/ashep/). Наличие этого слеша говорит rsync о том, что необходимо копировать каталоги,находящиеся внутри каталога /home/ashep/. Если не завершить локальный путь завершающим слешем, то на получателе будет создан каталог /home/ashep/ashep/, что неприемлемо в рассматриваемом случае.
Теперь, представим, что мы какое-то время находились с ноутбуком в деревне у бабушки, плодотворно поработали и хотим синхронизировать изменённые файлы на рабочую станцию. Сделать это можно как с рабочей станции:
rsync -vr -del rsync://alaptop.ashep/ashep /home/ashep
так и с ноутбука:
rsync -vr -del /home/ashep/ rsync://adesktop.ashep
Обратите внимание на ключ -del, который приводит к тому, что файлы, отсутствующие в источнике, будут удалены на получателе, если они там окажутся. И не забывайте о завершающих слешах при указании локального пути источника!

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free