Файлы в унисон

0

Если приходится часто работать на разных копьютерах очень быстро наскучит вручную переносить файлы. Если системы соединены между собой сетью, то проще организовать автоматическую синхронизацию данных между ними. Посмотрим, что есть для этого в Linux.

Вообще в Unix довольно много утилит позволяющих организовать резервное копирование изменившихся файлов, которых можно настроить в режиме синхронизации данных. Самым популярным решением является rsync (rsync.samba.org). Эта утилита умеет рекурсивно выполнять синхронизацию файлов и каталогов, причем используемый алгоритм позволяет минимизировать трафик, возможно и сжатие информации. Администраторы давно и с успехом используют эту утилиту, например чтобы создать копию домашнего каталога на удаленной системе достаточно ввести:

$ rsync -Hbaz -e ssh /home/grinder/ grinder@comp2:backup

Для удобства можно запустить демон, который будет в фоне выполнять поставленную задачу. Но обычный пользователь вряд ли буде в восторге от процесса настройки, тем более что с синхронизацией придется чуток повозиться. Поэтому вводим в консоли «apt-cache search synchronization» и смотрим, что попало в наши сети.

Проект Unison

Программа Unison (http://www.cis.upenn.edu/~bcpierce/unison/) изначально разработана Бенджамином Пиерсом (Benjamin C. Pierce), американским профессором преподавателем компьютерных наук в университете в Пенсильвании. При написании использовался современный объектно-ориентированный язык OCaml. При его создании использовался алгоритм rsync, поэтому в другой каталог передаются только отличия файлов, что экономит трафик. Unison может быть использован в двух вариантах. Первый подобен rsync, то есть создается зеркальная копия исходного каталога. Второй так называемый режим двухсторонней синхронизации, когда изменившие файлы синхронизируются в обоих направлениях. Программа может работать как в клиент-серверном варианте, так и в одиночном режиме. Возможен запуск с командной строки, так и с использованием простого и понятного GUI. Для удобства пользователь создает профили, в которых определяются каталоги для синхронизации, типы файлов которые следует игнорировать и прочие настройки. Профили хранятся в виде обычных текстовых файлов с расширением *.prf в скрытом каталоге ~/.unison.

Еще один плюс Unison доступен в версиях для нескольких операционных систем: Linux, *BSD, Mac OS X, Solaris, есть даже пакет для Compaq IPAQ и Sharp Zaurus. Каталоги и файлы синхронизируются как локально, так и используя защищенное SSH соединение. Распространяется по лицензии GNU GPL. В настоящее время активная работа над проектом прекращена, устраняются лишь найденные ошибки, хотя последняя версия датирована январем 2008 года.

Пробуем в работе

Так как Unison это обычная программа, не требующая перекомпиляции ядра установка ее очень проста. Тем более что в большинстве пакетных репозитариев она имеется. В Ubuntu для установки достаточно ввести:

$ sudo apt-get install unison unison-gtk

Как видите графический интерфейс в Ubuntu (и Debian) поставляется в отдельном пакете. Для того чтобы синхронизировать два каталога в командной строке, достаточно ввести команду:

$ unison /home/grinder/source /home/grinder/destination

Учтите, что при синхронизации проверяются (и сохраняются) права доступа. К удаленной Unix системе можно подключиться при помощи SSH использовав такую конструкцию:

$ unison /home/grinder/source ssh://username@remotehostname/dest

Если синхронизируются большие каталоги, то в первый раз некоторые время придется подождать. В процессе работы утилита выводит таблицу в которой показаны изменения между каталогами.

Вывод изменений

Предлагаемое действие показано стрелочкой < или > в зависимости от того, где найдено отличие, нажав «?» можно получить подсказку по командам. Действие f является рекомендуемым Unison. Например:

dir1 dir2

file —-> file1 [f]

<—- file file2 [f]

changed —-> file3 [f]

changed <-?-> changed file4 []

Proceed with propagating updates? [] ?

Commands:

y or g Yes: proceed with updates as selected above

n No: go through selections again

q exit unison without propagating any changes

Для того чтобы разрешить указанные действия выбираем y.

Proceed with propagating updates? [] y

Единственная ситуация с которой не сможет справиться Unison без вашей подсказки это когда изменились оба файла. Такие ситуации помечаются как <-?->. Нажав клавишу «d» можно просмотреть различия выданные командой diff.

changed <-?-> changed file1 [] d

diff -u ‘/home/grinder/dir2/file1’ ‘/home/grinder/dir1/file1’

— /home/grinder/dir2/file1 2008-02-23 14:59:18.000000000 +0200

+++ /home/grinder/dir1/file1 2008-02-23 14:59:10.000000000 +0200

@@ -1 +1 @@

-2222

+1111

Клавиша «х» подскажет дату изменений, чтобы проигнорировать этот файл нажимаем «I». И наконец чтобы объединить изменения нажимаем «m».

dir2 dir1

changed <-M-> changed file1 [] m

Синхронизиовать два каталога в Linux и Windows можно несколькими способами. Если все действия производятся в Windows, то просто подключаемся по SSH (в Ubuntu необходимо установить пакет openssh, так как SSH сервера в поставке по умолчанию нет). Если наоборот, то мне кажется, что проще смонтировать Windows ресурс. Для удобства прописываем строку для монтирования в файле /etc/fstab:

//win_computer/shared /mnt/win cifs noauto,users,password=,iocharset=utf8,codepage=cp866 0 0

Если для доступа к удаленному каталогу требуется пароль, не забудьте указать его в строке после password= или указывайте вручную при монтировании. Я также использую параметр noauto, чтобы ресурс не монтировался автоматически. Иначе если он не будет доступен при загрузке, это увеличит время. И в iocharset укажите правильную кодировку, чтобы имена файлов на кириллице показывались правильно. Кстати в некоторых случаях Unison не хотел работать с такими файлами, так что привычка обзывать файлы латинскими буквами не будет лишней. Теперь монтируем Windows каталог:

$ sudo mount /mnt/win

И синхронизируем, как два обычных локальных каталога.

Чтобы в процессе команда задавала меньше вопросов, используем параметр -batch или -auto.

Профили

Программа имеет большое количество параметров, просмотреть их можно введя «unison -help«, более подробно они описаны в документации http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html. Чтобы не вводить их каждый раз, удобнее создать профили. Как уже говорилось профиль это обычный текстовый файл. В нем записаны все команды которые необходимо выполнить, причем профили могут ссылаться друг, на друга для чего используется директива include. Поэтому общие для всех параметры лучше определить в одном файле.
$ kate ~/.unison/default.prf

# команда для объединения конфликтных файлов

merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW

# шаблон для файлов

backup = Name *

# журнал никогда не был лишним

log = true

logfile = /home/knan/.unison/unison.log

# шаблоны файлов которые будут игнорированы

ignore = Name temp.*

ignore = Name *~

Теперь второй профиль, в котором указываем уже каталоги.

$ kate ~/.unison/work.prf

# каталоги для синхронизации

root = /home/grinder/work

root = /media/work

# подключаем профиль

include = default default.prf

ignore = Name *mp3

# задает меньше вопросов

auto = true

Теперь чтобы синхронизировать каталоги, указанные в этом профиле достаточно ввести «unison work«.

Работа с GUI

Большинство пользователей наверное предпочтет все-таки графический интерфейс. Если устанавливался пакет unison-gtk, то в меню К (если KDE) появится нужный пункт.

GUI

Из консоли вызвать графическую версию Unison можно использовав параметр -ui.

$ unison -ui graphic или unison-gtk

Если ранее были созданы профили, программа запросит выбрать один из них, иначе вначале необходимо будет создать новый профиль. Для этого указываем исходный (локальный) каталог и второй каталог, в настройках которого можно уже указать удаленное подключение. После создания профиля будут проверены оба каталога, если они не синхронизированы, появится окно с предупреждением о том, что будет сравнено их содержимое. Нажимаем ОК и ждем пока Unison соберет и выведет информацию о каталогах. Стрелка укажет, в каком направлении будет произведена синхронизация. Если будет обнаружен конфликт (например, Unison не может их перезаписать, хотя файлы и изменились или изменились оба файла) такая пара отмечается вопросительным знаком. Для их слияния нажимаем кнопку Merge. Чтобы синхронизировать все одним махом, достаточно нажать кнопку Go. Используя кнопки на передней панели можно указать направление изменения справа-налево (Right to Left) или слева-направо Left to Right.

Что еще?

Unison не единственная, хотя скажу, по моему мнению самая удобная утилита позволяющая синхронизировать каталоги. Такую функцию имеет и файловый менеджер Krusader. Достаточно в нем открыть нужные каталоги в панелях и выбрать в меню пункт Инструменты — Синхронизировать каталоги (Ctrl -Y), появится окно Синхронизация каталогов, в котором можно указать дополнительные функции: задать шаблон имени файла, время последнего доступа или изменения, тип файла, размер, права и другие.

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

Некоторые типы файлов можно сравнивать и по содержанию. После нажатия на кнопку Сравнить, будет произведен анализ и выдан результат, нажимаем Синхронизировать и каталоги теперь одинаковы.

В моем любимом Midnight Commander нет такой функции, но ее легко можно добавить самостоятельно. Для этого в файл настройки меню этого файлового менеджера пользовательский ~/.mc/menu или системный /etc/mc/mc.menu добавляем такую строку:

U unison directories

unison -batch %d %D

Теперь зайдя в MC достаточно нажать F2 и затем клавишу U и каталоги, открытые в противоположных панелях будут без лишних вопросов синхронизированы средствами Unison.

Программа Komparator (http://sourceforge.net/projects/komparator) написана с использованием Qt библиотек. Чтобы ее установить достаточно ввести:

$ sudo apt-get install komparator

Теперь в Правый URL и Левый URL указываем каталоги которые нужно сравнить и нажимаем Искать. Результат после анализа будет показан в трех вкладках в панели внизу: Файлы-дубликаты, Новые файлы и Отсутствующие файлы. Как и в Krusader можно задать шаблон имени, размер, время изменения и другие параметры поиска. Для удобства задаются предустановки, вызвав любой можно быстро сравнить каталог.

Komparator

Программа Conduit (www.conduit-project.org) построенная на гномьих библиотеках хотя, также предназначена для синхронизации, но ее функция несколько шире. Кроме синхронизации файлов между компьютерами, она позволяет снхронизировать фотографии, электронную почту, данные контактов, заметки, календарь и другую информацию со многими он-лайн сервисами и электронными устройствами (мобильные телефоны, iPod, PDA и другие). При необходимости данные автоматически конфертируются в нужный формат. Список сервисов, о которых знает Conduit довольно приличный: Flickr, Picasa, SmugMug, ShutterFly и другие.

Conduit

Так как в пользователь Linux не редко использование нескольких браузеров не лишним будет небольшая программа BookmarkBridge (bookmarkbridge.sourceforge.net) позволяющая синхронизировать закладки. В Ubuntu она устанавливается командой «sudo apt-get install bookmarkbridge«.

bookmarkbridge

В репозитарии нашлась еще одна специализированная консольная утилита tra, но по сравнению с Unison она мне показалась не достаточно понятной.

Я думаю, проблемы с синхронизацией данных у вас не будет. Linux forever!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *