среда, 6 мая 2009 г.

Синхронизация файлов с использованием Unison-gtk

Для чего нужна синхронизация?

У меня есть компьютер на работе, дома, а также есть ноутбук, который тоже порой необходим. Хорошо, если работать надо только находясь на работе, в рабочее время. Но зачастую это не так. Как быть, если вы исправили на работе кучу файлов и хотите с ними продолжить возиться ещё и дома? Каким образом перенести их домой с наименьшими затратами? Можно, конечно, скопировать их на сменный носитель отдельно, но если их много и разбросанных по разным директориям, то этот вариант едва ли осуществим, ведь порой копировать весь большой каталог, в котором заведомо лежат все изменённые файлы, весьма напряжно (с этим ещё можно смириться в крайнем случае). Более того, есть риск удалить с флешки что-либо, что вы могли не перенести на рабочий компьютер (а вот с этим гораздо сложнее!). На помощь приходит синхронизация файлов. Проведя синхронизацию двух директорий, вы получите заведомо одинаковые файлы в обеих директориях. Старые заменятся на новые, те, которые вы удалили, будут удалены и в новой директории. Таким образом, вы избавитесь от необходимости вручную отслеживать что и где вы поменяли, чтобы потом безболезненно перенести результаты своей работы домой.

Unison - программа для синхронизации файлов и директорий

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

Для пользователей KDE, вероятно подойдёт возможность синхронизации в файловом менеджере krusader. О такой возможности можно почитать на официальном сайте.

А для тех, у кого KDE нет я могу посоветовать Unison. Выдержки с официальной страницы:

  • Программа работает как на машинах с Unix-подобными операционными системами, так и с Windows, более того позволяет работать между платформами, производя синхронизацию между машинами с разными осями.
  • В отличие от простого зеркалирования Unison может работать с обновлениями на обоих, так сказать, «концах». Возможные конфликты будут подсвечены.

Допустим, на рабочем компьютере есть директория Dir, в которой содержатся файлы b, c, d. А на флешке директория Dir_flash содержит файлы b, c, e. Отличие заключается в том, что в Dir есть d, но нет e, а в Dir_flash есть e, но нет d. После синхронизации обе директории будут иметь b, c, d, e, что и требовалось.

  • Unison работает между любой парой компьютеров, подключённых к интернету. Трансферы малых обновлений больших файлов оптимизированы благодаря использованию сжатого протокола, аналогичного rsync.

Судя по всему, то, что надо. Более того, программа имеет графический интерфейс gtk, что даёт возможность совсем не напрягаться с настройкой и работой.

Установка Unison в Debian

В Debian имеется две версии программы: с графическим интерфейсом (unison-gtk) и без него (unison). Установим Unison с GUI:

sudo aptitude install unison-gtk

Запускаем. Будет предложено создать профиль, потому что до этого ещё профилей не было. Необходимо указать две директории, в которых нужно произвести синхронизацию (Обращаю внимание, что флешка должна быть примонтирована). Если вдруг вы создали не тот профиль, что хотелось, то удалить его, находясь в графическом режиме не удастся. Профили лежат в директории ~/.unison и имеют формат:

$ cat ~/.unison/devel.prf
root = /home/maxim/devel
root = /media/usb/devel
То есть можно просто переименовать файл профиля и поменять пути простым редактированием файла.

Программа после запуска выглядит так (предлагается выбрать профиль):

Если вы синхронизируете директории впервые, то появится следующее окно, в котором просто сообщается о том, что синхронизация производится впервые. Жмите «OK».

В случае возникновения конфликтов, можно разрешить их вручную, нажав кнопки «Right to Left» или «Left to Right», в зависимости от того, в какую сторону хотите разрешить конфликт. Если файлы текстовые, то посмотреть их различие можно, нажав на кнопку «Diff». Копирование файлов запускается после нажатия кнопки «Go».

Очень полезной особенностью является возможность игнорировать определённые директории или файлы. Для этого надо выбрать в меню «Ignore» соответствующий пункт:

  • «Permanently ignore this path» для того, чтобы всегда пропускать этот путь при сканировании
  • «Permanently ignore files with this extension», чтобы пропускать файлы с данным расширением

При этом в профиле это отображается строкой:

ignore = Path {/your/path/to/ignore}
ignore = Name {,.}*{.tmp}

Вторая строка для того, чтобы пропускать файлы с расширением tmp

Советую посмотреть возможные опции в подменю «Actions», там есть весьма полезные опции типа разрешения конфликтов в пользу определенной директории или в пользу более новых файлов. Думаю, разобраться что пункты этого меню означают весьма легко, английский ведь мы знаем :).

Подводные камни

Без подводных камней здесь тоже не обошлось.

Права доступа

Как известно, в файловых системах Unix используются права доступа для хозяина, для группы и других пользователей. На флешке, обладающей файловой системой fat32 из-за необходимости обмениваться данными с виндовыми компьютерами, такой возможности нет. Поэтому если вы попытаетесь записать с помощью Unison на флешку файлы с правами, отличающимися от 644, то получите, скорее всего сообщение о невозможности синхронизации.

Замечу, что у меня флешка монтируется через /etc/fstab таким образом:
/dev/sda1 /media/usb auto rw,user,noauto,showexec 0 0
я использую параметр showexec, чтобы файлы не были исполняемыми, таким образом, все файлы у меня на флешке имеют права 644.

Конечно в данном случае можно привести все файлы к требуемому виду с помощью утилиты find:

find . -type f -exec chmod 644 \{} \;
Но это не выход.

Другое решение состоит в том, чтобы добавить в профиль строку

perms = 0

После этого права доступа будут игнорироваться.

Не удалите случайно свои файлы!

Если вы не подмонтирете флешку, то при попытке просканировать на ней директорию получите предупреждение:

То есть одна из директорий пуста, поэтому программа предлагает удалить вторую! Это явно не то, что надо. Поэтому быстрее жмите отмену.

Я проэкспериментировал, нажав «OK», а затем «Go». Программа удалила директорию целиком. При повторной синхронизации с уже подмонтированной флешкой, все вернулось обратно, что радует, но лучше не рисковать с этим.

Резюме

Я очень привык к этой программе, что уже не понимаю, как раньше мне удавалось со всем справляться без неё. Советую на неё посмотреть. Простой интерфейс позволит с наименьшими усилиями переносить файлы между компьютерами, что существенно упростит вашу жизнь.

Копируете статью - поставьте ссылку на оригинал!

4 комментария:

  1. Со статьей про UNISON ты меня профессионально опередил :-) Давно хочу написать, всё руки не доходят.

    Unison действительно удобен, только вот консольный интерфейс у него не такой простой, на мой взгляд.

    P.S. Есть предложение сделать радиоактивного пингвина ссылкой на RSS-канал.

    P.P.S. Унёс ссылку на RSS-фид к себе в агрегатор :-)

    ОтветитьУдалить
  2. Ну я написал как я эту программу использую, с консольным вариантом совсем не разбирался. Если кто-нибудь напишет - будет очень здорово. А вообще, было бы интересно почитать и про Ваш вгляд на проблему синхронизации файлов.

    Пингвина, вроде, сделал.
    Рад новым читателям :).

    ОтветитьУдалить
  3. Ну я написал как я эту программу использую,Статья хороша тем, что к ней и добавить-то нечего. Остаётся только поставить ссылку на видном месте :-)

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

    А вообще, было бы интересно почитать и про Ваш вгляд на проблему синхронизации файлов.Лучше unison не нашёл. И только в графическом режиме, ибо ключи его постоянно забываю. И Максим, я не такой старый - лучше на ты :-) А то чувствую себя академиком с тросточкой.

    Пингвина, вроде, сделал.Где-нибудь можно фидбёрнеровский feedcount повесить, чтоб читатель точно без фида не ушёл.

    ОтветитьУдалить
  4. У меня Unison НЕ удаляет удаленные файлы\каталоги ни на источнике, ни на втором каталоге. Создать-создает, удаляешь - восстанавливает.

    ОтветитьУдалить