Использование unison для двусторонней синхронизации файлов |
[исправить] |
Для решения задачи по синхронизации данных между двумя машинами, в ситуации
когда изменения могут появиться на каждом из компьютеров, прекрасно подходит
утилита unison (http://www.cis.upenn.edu/~bcpierce/unison/). При синхронизации
между удаленными машинами в качестве транспорта может использоваться ssh. При
обнаружении конфликтов, например, когда на обоих машинах отредактирован один и
тот же файл, unison пытается разрешить конфликт автоматически, а если это не
удается предоставляет пользователю интерфейс для принятия решения.
Устанавливаем unison.
Fedora/RHEL/CentOS:
sudo yum install unison
Debian/Ubuntu:
sudo apt-get install unison
FreeBSD:
# cd /usr/ports/net/unison/ && make install
Синхронизируем две локальные директории:
unison /test1 /test2
В процессе будет выводиться статистика и задаваться вопросы, касающаяся
синхронизации и разрешения конфликтов, направление копирования будет указано стрелкой.
Для синхронизации с удаленной директорией необходимо указать:
unison /test1 ssh://testserver.test.ru//test1
Чтобы выполнить синхронизацию автоматически, без интерактивного взаимодействия
с пользователем необходимо использовать опцию "-batch". В случае конфликта,
выполнение будет прервано с выводом соответствующего уведомления.
Для определения сложной политики синхронизации можно создать файл конфигурации
с определением параметров.
Например, создаем файл ~/.unison/test.prf:
# Определяем список директорий, которые будут синхронизированы
root = /home/project
root = /mnt/NFS/home/project
# Указываем сохранять права доступа и владельца
owner = true
times = true
# Определяем список поддиректорий, которые нужно синхронизировать, остальное игнорируем:
path = cgi-bin
path = htdocs
path = conf
# Определяем маски для файлов, которые не нужно синхронизировать
ignore = Name .htaccess
ignore = Name *~
ignore = Name .*~
ignore = Path conf/project.conf
ignore = Path htdocs/rrd
ignore = Path htdocs/mon
ignore = Name *.o
ignore = Name *.tmp
ignore = Name *.log
ignore = Name *.gz
ignore = Name *.iso
ignore = Name {,.}*{.old}
# Копируем в резервные копии изменяемых файлов в отдельную директорию
backup = Name *
backups = true
backupdir = /home/project/backup
# Определяем свою команду для отображения отличий между копиями файлов при конфликте
#diff = diff -y -W 79 --suppress-common-lines
# Сохраняем лог с результатами работы в отдельном файле
log = true
logfile = ./sync.log
При необходимости синхронизировать описанные в файле конфигурации директории, выполняем:
unison test
|
|
|
14.09.2010
|
Раздел: Корень / Пользователю / Файлы, копирование, архивация |
1.1, Денис (??), 08:18, 16/09/2010 [ответить]
| +/– |
Было бы интереснее если была раскрыта тема двустронней синхронизации между Windows и Unix серверами.
| |
|
2.2, Аноним (-), 10:52, 16/09/2010 [^] [^^] [^^^] [ответить]
| +/– |
>Было бы интереснее если была раскрыта тема двустронней синхронизации между Windows и
>Unix серверами.
Вы не поверите, но unison прекрасно работает и под Windows, без разницы где его запускать и инструкции те же самые.
| |
2.3, Александр (??), 12:05, 16/09/2010 [^] [^^] [^^^] [ответить]
| +/– |
Синхронизации чего? Что можно между операционками синхронизировать? Настройки, шрифты? :)
Наверняка вопрос про синк между программами под разными ОС - тогда проблему и название программы бы знать...
| |
|
3.7, Имя (?), 17:16, 16/09/2010 [^] [^^] [^^^] [ответить]
| +/– |
Ок, хочу синхронизировать CF-карту с FAT32 и директорию ~/boooks
| |
|
|
1.4, Р (?), 13:19, 16/09/2010 [ответить]
| +/– |
ftp есть? а если только в одну сторону делать зеркало? под винду тоже консоль? демоны с обоих сторон надро запускать? или достаточно с одной?:)
| |
1.5, www (??), 16:28, 16/09/2010 [ответить]
| +/– |
Я так понимаю что когда надо синхронизовать - тогда надо запускать эту утилитку. А как синхронизировать два каталога (с подкаталогами), чтоб после копирования и/или редактирования файла в каталог (или подкаталог) автоматически запускалась синхронизация? Думаю такой эфект можна получить используя watch -n 0,1 unison /test1 ssh://testserver.test.ru//test1, но это както муторно
| |
|
2.8, devcoder (ok), 17:34, 16/09/2010 [^] [^^] [^^^] [ответить]
| +/– |
% apt-cache search incron
incron - cron-like daemon which handles filesystem events
| |
|
1.9, segoon (ok), 22:25, 19/09/2010 [ответить]
| +/– |
Интересно, посмотрим... А я делаю так - в ~/sync лежат все настройки, дотфайлы и директории для синхронизации. Вместо конфигов симлинки в ~/sync. Сам ~/sync под гитом. Если на обоих машинах произошли изменения, то гит поможет смержить обе версии. Ну и скрипты ~/sync/scripts/ для слияния в одну команду (сам ищет на что надо натравить git rm и пр.).
| |
|