Файловая репликация — различия между версиями

Материал из YourcmcWiki
Перейти к: навигация, поиск
(Новая страница: «'''Evsync''' — простой инструмент для «непрерывной» rsync-образной синхронизации файлов. В некот...»)
 
м
Строка 1: Строка 1:
'''Evsync''' — простой инструмент для «непрерывной» rsync-образной синхронизации файлов. В некотором смысле, лишённый недостатков [http://code.google.com/p/lsyncd/ lsyncd]/[http://bb.xnull.de/projects/inosync/ inosync], написанный, к тому же, на Perl’е.
+
'''Evsync''' — простой инструмент для «непрерывной» rsync-образной синхронизации файлов. В некотором смысле, лишённый недостатков [http://code.google.com/p/lsyncd/ lsyncd] или [http://bb.xnull.de/projects/inosync/ inosync], написанный, к тому же, на Perl’е.
  
Недостатки inosync:
+
== Недостатки inosync и lsyncd ==
 +
 
 +
Недостатки '''inosync''':
 
* Не умеет следить за несколькими каталогами сразу.
 
* Не умеет следить за несколькими каталогами сразу.
 
* Не поддерживаются фильтры rsync’а, что приводит к лишним его вызовам.
 
* Не поддерживаются фильтры rsync’а, что приводит к лишним его вызовам.
Строка 9: Строка 11:
 
* Написан на Python, дописывать неохота. А учитывая исключительную простоту (меньше 200 строк кода), и дописывать-то особенно нечего.
 
* Написан на Python, дописывать неохота. А учитывая исключительную простоту (меньше 200 строк кода), и дописывать-то особенно нечего.
  
Недостатки lsyncd:
+
Недостатки '''lsyncd''':
 
* Существуют лимиты на корректность имён файлов.
 
* Существуют лимиты на корректность имён файлов.
 
* Существует лимит на количество наблюдаемых файлов (открывается только 1 дескриптор inotify).
 
* Существует лимит на количество наблюдаемых файлов (открывается только 1 дескриптор inotify).
Строка 33: Строка 35:
 
</tab>
 
</tab>
  
== Флаги Inotify ==
+
=== Флаги ===
  
 
<tab sep=tab class=simpletable head=left>
 
<tab sep=tab class=simpletable head=left>
Строка 57: Строка 59:
 
IN_UNMOUNT Ошибка обработки!
 
IN_UNMOUNT Ошибка обработки!
 
</tab>
 
</tab>
 +
 +
== Ссылки ==
 +
 +
См. также:
 +
* http://linux.die.net/man/2/inotify - man 2 inotify.
 +
* http://code.google.com/p/lsyncd/ - домашняя страница lsyncd.
 +
* http://bb.xnull.de/projects/inosync/ - домашняя страница inosync.
 +
* http://wiki.opennet.ru/Incrontab - демон, запускающий программы в качестве реакций на события inotify.
  
 
[[Категория:Разработка]]
 
[[Категория:Разработка]]

Версия 23:58, 23 января 2010

Evsync — простой инструмент для «непрерывной» rsync-образной синхронизации файлов. В некотором смысле, лишённый недостатков lsyncd или inosync, написанный, к тому же, на Perl’е.

Недостатки inosync и lsyncd

Недостатки inosync:

  • Не умеет следить за несколькими каталогами сразу.
  • Не поддерживаются фильтры rsync’а, что приводит к лишним его вызовам.
  • Rsync всегда вызывается целиком на каталоге, а не на отдельных файлах, что вряд ли приведёт к хорошей производительности.
  • Не очень корректная схема работы — спим 10 секунд, просыпаемся, анализируем события, снова спим… И т.п. С одной стороны, может синхронизировать файлы в середине записи в них, с другой стороны, неидеально «уменьшает поток» событий в случае большого числа модификаций.
  • Не обрабатывает перемещения файлов — они приводят к передаче файлов целиком.
  • Написан на Python, дописывать неохота. А учитывая исключительную простоту (меньше 200 строк кода), и дописывать-то особенно нечего.

Недостатки lsyncd:

  • Существуют лимиты на корректность имён файлов.
  • Существует лимит на количество наблюдаемых файлов (открывается только 1 дескриптор inotify).
  • Не обрабатывает перемещения файлов — они приводят к передаче файлов целиком.
  • Также может синхронизировать файлы посреди записи в них по событиям IN_.
  • Написан на C, дописывать неохота.

События Inotify

IN_ACCESSЧтение из файла.
IN_ATTRIBИзменение метаданных файла — прав доступа, владельца и группы, времени доступа, количества жёстких ссылок (в версиях ядер >= 2.6.25) и т. п.
IN_CLOSE_WRITEЗакрытие файла, ранее открытого для записи.
IN_CLOSE_NOWRITEЗакрытие файла без записи.
IN_CREATEФайл/каталог создан внутри наблюдаемого каталога.
IN_DELETEФайл/каталог внутри наблюдаемого каталога удалён.
IN_DELETE_SELFУдалён сам наблюдаемый файл/каталог.
IN_MODIFYЗапись в файл.
IN_MOVE_SELFПеремёщён сам наблюдаемый файл/каталог.
IN_MOVED_FROMПеремещение файла («из» указанного в событии).
IN_MOVED_TOПеремещение файла («в» указанный в событии). Пары связанных событий IN_MOVED_TO и IN_MOVED_FROM обозначаются одинаковым атрибутом «cookie».
IN_OPEN Открытие файла.

Флаги

IN_IGNOREDНаблюдение отменено — либо явно, либо автоматически при удалении файла или размонтировании ФС.
IN_ISDIRСубъект данного события — каталог.
IN_Q_OVERFLOWПереполнение очереди событий.
IN_UNMOUNTРазмонтирование файловой системы, содержащей субъект события.

Корректные реакции на события

Начало мониторингаrsync всего каталога.
IN_CREATErsync отдельного файла.
IN_DELETEУдалить файл на удалённой стороне. Rsync с этим, бывает, тормозит.
IN_DELETE_SELFВидимо, также удалить, либо ошибка обработки.
IN_MODIFYНичего не делать! Событий модификации может быть много, а завершатся они, только когда записывающий процесс закроет файл — событием IN_CLOSE_WRITE.
IN_ATTRIBrsync с флагами -lptEAX и, возможно, -og (если удалённый rsync работает под рутом)
IN_CLOSE_WRITErsync, ибо файл изменился.
IN_MOVE_SELFЛибо удалить, либо ошибка обработки.
Пара IN_MOVED_*Переместить файл на удалённой стороне. Если целевой файл на удалённой стороне существует — переименовать его в «имя.(n+1)» (n — число). Rsync этого не умеет, придётся открывать отдельное соединение и ставить демон на удалённую сторону.
IN_Q_OVERFLOWЧасть событий потеряна, так что rsync всего каталога после небольшой задержки, ибо мы не знаем, какие файлы поменялись.
IN_UNMOUNTОшибка обработки!

Ссылки

См. также: