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








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

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

Приемы работы в Ubuntu.
Глава 8: Администрирование

Оригинал: "Ubuntu Hacks: Chapter 8 - Administration"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: октябрь 2010 г.

Совет # 86: Синхронизация файлов, размещенных на различных машинах

Если вы постоянно пользуетесь несколькими машинами, то возникает проблема с отслеживанием, на какой системе установлена последняя версия файла. Используйте свободный пакет Unison File Synchronizer для того, чтобы синхронизировать все ваши системы, в том числе машины с Windows и Mac.

Есть старая поговорка, которую следует принять близко к сердцу: "Есть две группы компьютерных пользователей: те, которые уже потеряли свои данные, и те, которые их еще не потеряли". Я принадлежу к первой группе, но это был только один неприятный случай, когда случайно была удалена курсовая работа, что заставило меня принять решение, никогда не позволить этому случиться снова. Та давняя ночь, когда я потерял плоды моих трудов по анализу великого фильма Raising Arizona, научила, что резервное копирование имеет важное значение. И хотя обычные резервные копии [Совет # 79] жизненно важны, если вы пользуетесь двумя или большим количеством машин с синхронизацией, то это не только обеспечит вам дополнительную безопасность, но и позволит легко переключаться от системы к системе, не запоминая, где у вас находится последняя копия файла.

Если новичок в Linux начинает спрашивать более опытных пользователей о том, как синхронизировать свои данные, то он, скорее всего, услышит о чудесном инструменте, называемом rsync. Rsync был разработан Эндрю "Патроном" Тридгеллом (Andrew "Tridge" Tridgell), тем же самым человеком, который стоит за Samba; на самом деле, он сказал, что потомки будут благодарить его за rsync гораздо больше, чем за Samba, и, возможно, он прав. Тем не менее, rsync, хотя и отличное, не обязательно самое лучшее программное обеспечение для синхронизации двух репозитариев, с которыми вы активно работаете.

Проблема с rsync

rsync действительно превосходная программа, и она действительно стоит того времени, которое вы на нее потратите. Тем не менее, я не использую rsync для своих повседневных нужд. Вместо этого я использую пакет Unison, который в своей основе использует rsync. Почему Unison вместо rsync? Потому что Unison выполняет синхронизацию одновременно в двух направлениях, тогда как rsync выполняет синхронизацию только в одном направлении.

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

Очевидно, что мне нужно синхронизировать на двух машинах все 10 ГБ данных. Если я удаляю файл на настольном компьютере, мне нужно удалить его на ноутбуке. Если я изменяю файл на ноутбуке, то нужно, чтобы на настольном компьютере не потребовалось дополнительно его открывать и делать в нем изменения. Это неразумно.

Так почему я не могу использовать rsync? Потому что я должен синхронизировать обе машины таким образом, чтобы каждая из них одновременно выступала как источник синхронизации, так и машина, на которой выполняется синхронизация. Вот один пример: на моем ноутбуке я перемещаю файл widgets из директория foo в директорий bar. Однако на моем настольном компьютере файл widgets все еще находится в директории foo. Если я запускаю rsync с ноутбука в качестве источника синхронизации и указываю настольный компьютер, как компьютер, на котором нужно выполнить синхронизацию, то пока все хорошо: файлы widgets теперь находятся в директориях bar как на ноутбуке, так и на настольном компьютере. Но файл widgets все еще находится в директории foo на настольном компьютере. В следующий раз, когда я запускаю rsync на настольном компьютере в качестве источника синхронизации и синхронизирую с ним ноутбук, файл widgets копируется из директория foo, расположенного на настольном компьютере, и помещается в директорий foo на ноутбуке, в результате чего файлы widgets оказываются как в директории foo, так и в директории bar, из-за чего возникает настоящий беспорядок.

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

Unison решает эту проблему. Вы определяете источник синхронизации и указываете компьютер, на котором нужно выполнить синхронизацию, а затем запускаете Unison. Через некоторое время Unison начинает задавать вам вопросы о файлах, которые он обнаружил: скопировать этот файл из ноутбука на настольный компьютер? Скопировать другой файл с настольного компьютера на ноутбук? Удалить этот файл на ноутбуке, поскольку он был удален на настольном компьютере? Вы можете подтвердить догадки Unison, указав куда надо делать копию, или даже попросить Unison пропустить этот файл и нечего с ним не делать до завтра. При помощи Unison синхронизация двух директориев, которые размещены на разных машинах, становится достаточно простой задачей. И, в качестве приятного дополнения, Unison является кросс-платформенным, так как он работает на компьютерах с Linux, Mac OS X (с некоторыми оговорками, смотрите раздел "Дополнительная информация о пакете Unison" в конце настоящего совета), Unix и Windows.

Синхронизация файлов на двух машинах по SSH с помощью пакета Unison

Установка пакета Unison выполняется просто (впрочем, убедитесь, что у вас есть доступ к репозитарию universe [Совет # 60]). Запустите следующую команду, и все будет выполнено:

$ sudo apt-get install unison unison-gtk

Теперь у вас есть как основная программа Unison, работающая из командной строки, так и графический интерфейс на базе GTK.

Пора выполнить синхронизацию группы файлов с копиями тех же самых файлов на другой машине. Для дополнительной безопасности, я собираюсь воспользоваться SSH, возможностью, которая встроена Unison. К сожалению, Unison не создает пунктов в меню приложений в GNOME или в меню K в KDE, поэтому вам потребуется добавить их самостоятельно. Тем не менее, вы можете ввести в командной строке команду unison-gtk. Когда программа откроется, вы увидите диалоговое окно (см. рис 8-17), в котором вам нужно будет выбрать или создать профиль.

Выбираем или создаем профиль Unison

Рис.8-17. Выбираем или создаем профиль Unison

Нажмите кнопку "Create new profile" ("Создать новый профиль"), и вас попросят ввести имя нового профиля. Поскольку я собираюсь синхронизировать мой директорий, в котором находится работа, выполняемая для этой книги, я благоразумно назову этот профиль ubuntu_hacks и нажму кнопку "ОК". Теперь будут два профиля - default и ubuntu_hacks. Я дважды щелкаю по ubuntu_hacks, откроется маленькое окно, показанное на рис. 8-18, и я получу запрос на ввод локального директория, с которым я хочу выполнять синхронизацию.

Выбираем локальный директорий для Unison

Рис.8-18. Выбираем локальный директорий, который мы хотим синхронизировать

Поскольку я не люблю вводить текст, когда этого можно избежать, я вместо этого нажму кнопку "Browse" ("Найти") и перейду в директорий:

/home/rsgranne/documents/clientele/aaa_current/OReilly/ubuntu_hacks

Я щелкаю по кнопке "OK", и открывается еще одно окно, показанное на рис. 8-19. В нем будет задан вопрос о директории, расположенной на удаленном компьютере.

Выбираем удаленный директорий для Unison

Рис.8-19. Выбираем удаленный директорий, который мы хотим синхронизировать

Обратите внимание, что я могу синхронизировать локальный директорий (который может быть директорием, доступным через Samba и NFS и смонтированным на этой машине), или директорий, находящийся на другой машине и доступный через SSH, RSH или сокеты. В данном случае я использую SSH, так что я ввожу адрес удаленного хоста, в данном случае - 192.168.0.14 и имя пользователя, которым является rsgranne. Наконец, я набираю удаленный директорий, который хочу синхронизировать:

/media/data/zzz_rsg/documents/clientele/aaa_current/OReilly/ubuntu_hacks

Я нажимаю кнопку ОК, и поскольку это первый раз, когда я синхронизирую данные директории, Unison предупреждает меня, что он должен создать эти два директория с нуля. Это не проблема, так что я нажимаю кнопку ОК. Откроется главное окно Unison и Unison перейдет к работе, сравнивая два директория (а также все его поддиректории, поскольку программа автоматически будет работать рекурсивно). Будьте терпеливы, когда начнется этот процесс. Может показаться, что Unison заблокирован, но просто для того, чтобы просмотреть все файлы и директории, может потребоваться определенное время. Чем больше данных, тем дольше будет работать Unison. В конце концов, появится информация, показанная на рис.8-20.

Синхронизация файлов в Unison

Рис.8-20. Вы можете синхронизировать файлы, копируя их по различным направлениям

Интерфейс Unison сам по себе достаточно понятен, стрелки указывают направление, в котором будет происходить копирование. Если я хочу изменить направление, в котором будет копироваться файл, я просто выделяю его и нажимаю кнопку "Right to Left" ("Справа налево)" или "Left to Right" ("Слева направо"). Если я хочу, чтобы Unison игнорировал файл, я нажимаю кнопку "Skip" ("Пропустить"). Если я хочу вызвать программу типа diff для действительного сравнения содержимого двух файлов (это, конечно, работает только с текстовыми файлами и им подобными), а затем избирательно объединить различия, я щелкаю по кнопке Diff, а затем — по кнопке "Merge" ("Объединить"). Когда я уверен, что все будет так, как я хочу, я нажимаю кнопку "Go" чтобы сообщить Unison начинать копировать файлы и папки. В действительности есть много других вариантов, доступных через меню "Actions" ("Действия"), так что было бы хорошо с ними всеми ознакомиться.

Настраиваем ваши профили

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

Для того, чтобы добавить эти настройки, вам нужно будет с помощью вашего любимого текстового редактора открыть ваши профили. В моем случае, я буду открывать и изменять файл ubuntu_hacks.prf, расположенный в директории /home/rsgranne/.unison.

Для начала, я добавлю в файл следующее (не важно, где вы поместите эту строку, но я хочу расположить ее в верхней части файла после двух моих корневых директориев root и перед строками"ignore"):

times = true

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

Подсказка

При такой настройке выполняется копирование временных меток только для файлов, но не для директориев.

Аналогичным образом вы можете добавить следующее:

owner = true
group = true

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

Если вы хотите синхронизировать файлы по их принадлежности пользователям и группам, указываемым в виде номеров, которые использует ваша система Ubuntu, а не в виде имен, которыми пользуемся мы, люди (другими словами, как 1000, а не как rsgranne; если вы не знаете, о чем я говорю, посмотрите файл /etc/passwd и запустите команду man 5 passwd), то добавьте в ваш профиль также следующий параметр:

numericids = true

Если вы используете Unison только для синхронизации компьютеров с Linux, вы можете пропустить следующую настройку. Но если в вашем процессе синхронизации присутствуют машины с Windows, скажем, вы выполняете синхронизацию с рабочей станции Windows на машину с Linux, либо из персонального компьютера с Windows на рабочую станцию с Linux, вы, вероятно, захотите использовать команду fastcheck (однако внимательно прочитайте следующий параграф):

fastcheck = yes

Возможно, вы захотите пользоваться, в основном, настройкой fastcheck = yes, но каждый раз, когда вы захотите закомментировать эту строку при помощи символа #, который указывается в начале строки, запустите Unison, а затем удалите этот символ. Позвольте мне объяснить, почему следует делать именно так.

Возможно, вы уже задавали себе очень важный вопрос: как Unison знает, что файл был изменен? Для файлов в компьютере с Linux, Unison смотрит на номера их инодов и время их модификации; если что-нибудь из этого отличается, то Unison считает, что файл был изменен. В компьютерах с Windows номеров инодов, конечно, нет, поэтому по умолчанию Unison в Windows сканирует содержимого каждого файла, чтобы узнать, есть ли изменения. Это, конечно, надежный метод, но если у вас на компьютере с Windows находится большое количество файлов, которые надо просканировать, то на это потребуется много времени. Если в этом случае вы отмените настройку fastcheck, либо установите ее равной fastcheck = default, то в результате может произойти не то, что вы, вероятно, хотели сделать.

Подсказка

Не знаете, что такое номер инода? Смотрите следующее подробное объяснение: http://en.wikipedia.org/wiki/Inode.

Однако, если вы установите fastcheck равным yes, то на ваших машинах с Windows Unison будет действовать по другому: он вместо того, чтобы сканировать содержимое каждого файла, смотрит время его модификации (на Linux правила обработки файлов не меняются: проверяются номера их инодов и время модификации). В результате сканирование фалов на вашем компьютере с Windows будет выполняться гораздо быстрее, но в очень редких случаях (файл был изменен, но вы каким-то образом не сумели обновить время его создания, время его модификации и его длину — получить такой результат довольно трудно), Unison на компьютере с Windows может отказаться делать обновление некоторых файлов.

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

Поскольку это так, я бы рекомендовал почти всегда оставлять fastcheck установленным в yes, но каждый раз, когда вы закомментируете эту настройку с помощью символа #, Unison при следующем запуске в Windows будет полностью проверяться содержимое файлов. Затем, после того, как вы удостоверитесь в том, что все в порядке, раскомментируйте fastcheck = yes и вернитесь к более быстрому методу.

Изменяем месторасположение директория с вашим журнальным файлом

Когда вы запускаете Unison, программа создает журнальный файл, который может оказаться очень полезным. Однако, по умолчанию, этот файл с именем unison.log создается в вашем домашнем директории, что конкретно меня сильно раздражает, поскольку я стараюсь держать мой домашний директорий в порядке. Если это вас не волнует, то оставьте все так, как есть. Но если вы, подобно мне, хотите изменить место, где запоминается журнал, то укажите следующий параметр:

logfile = $HOME/.unison/unison.log

Мне нравится, когда журнал записывается в скрытый директорий .unison, но вы можете изменить его так, как это вам нравится.

Дополнительная информация о пакете Unison

Основной сайт, где можно найти все об Unison, это - http://www.cis.upenn.edu/~bcpierce/unison/. Надеюсь, что однажды это сайт получит более крутой URL.

На основном сайте Unison вы можете ознакомиться с полной и очень информативной документацией по Unison (если вы действительно перейдете к использованию Unison, вам потребуется узнать, как его запускать без графического интерфейса; в документации рассказано все, что вам требуется знать, хотя, на самом деле, графический интерфейс - это хороший способ узнать основы). Если этого будет недостаточно, есть хороший FAQ, где рассмотрен ряд важных вопросов и, в том числе, тот, который заинтересовал меня: "Работает ли Unison на Mac OS X?" Обязательно прочитайте полностью этот ответ, прежде чем пытаться использовать Unison на этой ОС!

Дальнейшую поддержку можно получить на нескольких списках рассылки, к которым вы можете присоединиться, либо, если вы не хотите никуда присоединяться, просто поискать в группах на Yahoo!. Группа Unison-users является именно такой: список пользователей Unison. В настоящее время она насчитывает более 600 членов, и они публикуют, в среднем, по 100 сообщений в месяц, так что это не слишком много. Вы можете получить более подробную информацию о списке по следующей ссылке http://groups.yahoo.com/group/unison-users/. Если вы разработчик, то вы, возможно, захотите посмотреть группу Unison-hackers по ссылке http://lists.seas.upenn.edu/mailman/listinfo/unison-hackers. Если все, что вы хотите, это знать, когда выпускается новая версия, то вы должны подписаться на группу Unison-announce, в которой очень небольшое количество сообщений (одно сообщение в месяц) и которую можно найти по ссылке http://groups.yahoo.com/group/unison-announce, либо можно просто отправить пустое сообщение по адресу unison-announce-subscribe@groups.yahoo.com.

Наконец, в журнале Open - "еженедельном электронном журнале по Linux и системам с открытым исходным кодом, используемым на предприятиях", есть хорошая статья об Unison, которая доступна по ссылке http://www.open-mag.com/features/Vol_53/synch/synch.htm. В ней описано о том, как настроить Unison для работы в Windows и в Linux, и рассказаны некоторые технические подробности об отказоустойчивости, которые обеспечивает Unison.

Примечание ред. Вы можете также прочитать статью Federico Kereki (перевод А.Тарасова) "Ноутбук в Unison с ПК", которая была опубликована на нашем сайте в 2007 г.


Назад Оглавление Вперед