Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
На главную -> MyLDP -> Тематический каталог -> Создание удобной рабочей среды в Linux

Синхронизация вашей жизни

Оригинал: Synchronizing Your Life
Автор: Daniel Bartholomew
Дата: 3 ноября 2008
Перевод: Александр Тарасов aka oioki
Дата перевода: 3 марта 2009

Было время, когда одного компьютера было вполне достаточно. На нем хранились все документы, рядом в одном месте была стопка дискет или компакт-дисков, и этого было достаточно. Но эти дни прошли.

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

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

Другой способ - копировать файлы с помощью scp или чего-нибудь подобного:

scp -rP /home/me/Documents me@192.168.0.2:/home/me/

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

Недостатком scp является и то, что программа всегда копирует все файлы, даже если на удаленном компьютере уже имеется точная копия файла. Но эту проблему решает rsync. Следующая команда делает то же самое, что и предыдущая:

rsync -avP /home/me/Documents me@192.168.1.2:/home/me

При использовании rsync файлы, которые существуют на удаленном компьютере, не будут переданы вхолостую. Это значительно увеличивает скорость передачи. Однако остается проблема при изменении файлов на обеих сторонах. По умолчанию, rsync смотрит, различаются ли файлы по размеру и по дате изменения. Вопрос о том, какой файл новее, не рассматривается - если файл на удаленном компьютере отличается, то он будет перезаписан. Можно передать rsync флаг '--update', тогда файл на удаленном компьютере не будет перезаписан, если он свежее, чем локальный файл. Однако это верно лишь для файлов одного и того же типа. К примеру, если исходный файл - это обычный файл, а на удаленном компьютере он представляется в виде символьной ссылки, тогда файл на том конце будет жестко перезаписан, независимо от времени правки. Но флаг --update не решает проблемы, ведь все, что он делает - это пропускает свежие файлы на том конце, но не скачивает их на локальный компьютер.

Большим недостатком scp и rsync является отсутствие контроля версий. Когда файлы перезаписаны, то уже нет пути назад, и невозможно посмотреть, что было раньше.

Здесь напрашивается решение установить одну из множества систем контроля версий. На данный момент наиболее популярными являются Git и Bazaar. Хотя эти системы достаточно сложны в изучении, но в ряде случаев они удобны. Пакеты для обеих систем можно найти в репозитариях современных дистрибутивов. К примеру, в Ubuntu пакеты для Git и Bazaar называются соответственно git-core и bzr.

Чтоб поддерживать синхронное состояние ваших файлов, последовательность работы должна быть примерно такой. В следующем примере я воспользуюсь системой Git, но работа с Bazaar ничуть не сложнее. В примере компьютеру 1 назначен ip-адрес 192.168.0.1, а компьютеру 2 - 192.168.0.2.

Начнем работу с первого компьютера:

cd /home/me/Documents/shared
git init
git add *
git commit -a

Здесь я перехожу в каталог, который хочу поместить в систему контроля версий. С помощью команды git init я превращаю каталог в git-репозиторий. Далее я командую git add *, тем самым планируя поместить в репозиторий все содержимое каталога. Наконец, последней командой собственно фиксируем изменения в репозитории. Теперь на втором компьютере нужно отдать следующие команды:

cd /home/me/Documents
git clone ssh://192.168.0.1/home/me/Documents/shared

Каталог shared будет склонирован с компьютера 1 на компьютер 2. Теперь можно редактировать файлы на компьютере 2. После этого можно сохранить результаты на компьютере 2 следующим образом:

git commit -a

Допустим, я вернулся к компьютеру 1 и хочу получить изменения, которые я сделал на компьютере 2:

cd /home/me/Documents/shared
git pull ssh://192.168.0.2/home/me/Documents/shared

Итак, файлы на обеих компьютерах теперь синхронизированы. В том редком случае, когда один и тот же файл изменяется на обеих компьютерах, git оповестит меня. Такая ситуация называется конфликтом слияния (merge conflict). Как правило, эти конфликты легко разрешаются пользователем, ведь Git ведет историю изменений и можно всегда откатить репозиторий до какого-то момента в прошлом.

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

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

В качестве альтернативы я обратился к Wua.la. Этот сервис позволяет пользователям обмениваться дисковым пространством. При этом обеспечивается шифрование данных и интеграцию в файловую систему через встроенный NFS-сервер. Я уже писал об этой системе здесь: http://www.linuxjournal.com/content/online-storage-wuala (перевод здесь). Я попользовался сервисом некоторое время, но потом отказался от него, потому что он показался мне немного сыроватым. Хотя можно воспользоваться Wua.la для резервного копирования, но фоновую синхронизацию я бы ей не доверил. Кроме того, в ней нет контроля версий.

Я хочу простую систему, которая бы выполняла синхронизацию в фоне, интегрировалась в мой файловый менеджер (Nautilus). Она должна "просто работать".

Есть такая программа-сервис, которая замечательно подходит под все мои критерии. Это Dropbox.

Dropbox позволяет хранить файлы в интернете, и синхронизировать их между всеми вашими компьютерами. Имеются клиенты для операционных систем Windows, Macintosh и Linux, так что можно назвать ее кросс-платформенной.

Чтобы установить Dropbox в Linux, необходимо установить расширение файлового менеджера nautilus-dropbox, а также демона dropboxd, который осуществляет коммуникацию с серверами Dropbox. На сайте проекта (http://getdropbox.com) можно скачать пакеты для дистрибутивов Fedora 9, Ubuntu 7.10 и Ubuntu 8.04. Расширение Nautilus распространяется по лицензии GPL, так что можно скачать исходные файлы и скомпилировать их вручную. Сборка из исходных файлов потребует наличия библиотек GTK 2.12 или выше, GLib 2.14 или выше, Nautilus 2.16 или выше, Libnotify 0.4.4 или выше и Wget версии от 1.10. К сожалению, демон dropboxd является проприетарной программой с закрытым исходным кодом. Пользоваться программой на архитектурах, отличных от x86 или x86_64, невозможно.


Рисунок 1. Установка Dropbox

Когда пакет установлен, запустить Dropbox можно, перезапустив Nautilus. К примеру, с помощью консольной команды killall nautilus, либо можете перезайти в систему.


Рисунок 2. Настройка Dropbox

После перезапуска в области уведомления появится значок и запустится мастер настройки. После простой процедуры регистрации (или подключению к существующей учетной записи) в вашем домашнем каталоге появится каталог "Dropbox", и вам предложат пройти ознакомительный тур. При нажатии правой кнопкой мышки по каталогу Dropbox или его подкаталогам появляется контекстное меню, из которого можно вызывать различные операции.


Рисунок 3. Ознакомительный тур

Каждый файл, который вы помещаете в каталог Dropbox, автоматически синхронизируется с вашей учетной записью Dropbox на сайте getdropbox.com, и оттуда на все компьютеры, на которых установлен Dropbox. Синхронизация происходит автоматически, это происходит каждый раз, когда файл сохраняется, перемещается или обновляется любым другим способом.

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


Рисунок 4. Статус элементов отображается в виде эмблем

Dropbox - это веб-технология, поэтому, естественно, у него есть веб-интерфейс для доступа к файлам. Это удобно, когда я сижу за чужим компьютером и хочу получить доступ к своим документам.


Рисунок 5. Веб-интерфейс Dropbox - еще один способ доступа к файлам

Еще один приятный момент Dropbox - возможность контроля версий. С помощью веб-интерфейса можно видеть все прошлые версии и по необходимости производить откат.


Рисунок 6. С помощью веб-интерфейса Dropbox можно востанавливать старые версии файлов

Казалось бы, Dropbox - это все, что нужно. Он синхронизирует файлы между всеми моими компьютерами, делает это незаметно для меня и даже позволяет вернуться к прошлым версиям файлов, когда это будет необходимо. Однако Dropbox не лишен недостатков.

Во-первых, программа плохо работает с регистами в именах файлов. У меня в каталоге Dropbox был подкаталог writing, а я захотел переименовать его в Writing (с большой буквы). Сразу после этого Dropbox как будто сошел с ума - стал создавать все каталоги, пытаясь разрешить конфликт. Эти новые каталоги все создавались, пока я не остановил Dropbox вручную. Мне пришлось удалить лишние копии и переименовать Writing в My Writing.

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

Но самым большим недостатком Dropbox является то, что это закрытый проект. Дополнение к Nautilus открыт, но он бесполезен без демона. Итак, сервисный демон dropboxd закрыт, но что если Evenflow (компания, придумавшая Dropbox) перестанет существовать? Я не знаю, какая у них сейчас финансовая ситуация, но в нынешнем экономическом климате все возможно. Далее, то, что я отдаю на хранение в Dropbox, является моими данными, и хотя разработчики говорят, что все шифруется и надежно защищено, но причин для безграничного доверия нет (это можно отнести к любым подобным сервисам, а не только к Dropbox). Я наслышан о многих страшных историях, когда происходила утечка личных и (как казалось) защищенных данные.

Было бы здорово, если бы я мог установить свой собственный Dropbox-сервер на своем компьютере, и контролировать защищенность своих данных самостоятельно.

Итак, Dropbox - замечательная полезная программа, однако вопросы личных данных и доверия ограничивают области применения. Так, я использую Dropbox лишь в тех случаях, когда удобство преобладает над тем, насколько данные носят личный характер.

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



Комментарии