The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Использование 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
Ключи: unison, sync, file / Лицензия: CC-BY
Раздел:    Корень / Пользователю / Файлы, копирование, архивация



Обсуждение [ RSS ]
 
  • 1.1, Денис, 08:18, 16/09/2010 [ответить] [смотреть все]    [к модератору]
  • +/
    Было бы интереснее если была раскрыта тема двустронней синхронизации между Windows и Unix серверами.
     
     
  • 2.2, Аноним, 10:52, 16/09/2010 [^] [ответить] [смотреть все]     [к модератору]
  • +/
    Вы не поверите, но unison прекрасно работает и под Windows, без разницы где его ... весь текст скрыт [показать]
     
  • 2.3, Александр, 12:05, 16/09/2010 [^] [ответить] [смотреть все]    [к модератору]  
  • +/
    Синхронизации чего? Что можно между операционками синхронизировать? Настройки, шрифты? :)

    Наверняка вопрос про синк между программами под разными ОС - тогда проблему и название программы бы знать...  

     
     
  • 3.7, Имя, 17:16, 16/09/2010 [^] [ответить] [смотреть все]    [к модератору]  
  • +/
    Ок, хочу синхронизировать CF-карту с FAT32 и директорию ~/boooks
     
     
  • 4.10, bdlog, 17:55, 20/09/2010 [^] [ответить] [смотреть все]    [к модератору]  
  • +/
    Выставите флаг не сохранять аттрибуты и синхронизируйте.
     
  • 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.6, hryak, 17:04, 16/09/2010 [^] [ответить] [смотреть все]    [к модератору]  
  • +/
    http://ru.wikipedia.org/wiki/Inotify + демон,слушающий его и запускающий то, что тебе нужно
     
  • 2.8, devcoder, 17:34, 16/09/2010 [^] [ответить] [смотреть все]    [к модератору]  
  • +/
    % apt-cache search incron
    incron - cron-like daemon which handles filesystem events
     
  • 1.9, segoon, 22:25, 19/09/2010 [ответить] [смотреть все]    [к модератору]  
  • +/
    Интересно, посмотрим...  А я делаю так - в ~/sync лежат все настройки, дотфайлы и директории для синхронизации.  Вместо конфигов симлинки в ~/sync.  Сам ~/sync под гитом.  Если на обоих машинах произошли изменения, то гит поможет смержить обе версии.  Ну и скрипты ~/sync/scripts/ для слияния в одну команду (сам ищет на что надо натравить git rm и пр.).
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor