108

У меня дома три компьютера, и я хочу синхронизировать дерево папок /home/ между ними.
Любые файлы / папки (кроме скрытых), которые были изменены / добавлены / удалены на одном из трех компьютеров, обновляются на двух других.

Достаточно ли для этого rsync ? и как?

16 ответов16

82

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

  • Унисон - как уже упоминалось другими, это выполняется вручную, но очень быстро, надежно и эффективно. Требует, чтобы обе синхронизируемые машины были включены одновременно. Он имеет приятный пользовательский интерфейс, позволяющий вам справляться с почти неизбежными конфликтами, а также правильно отслеживает и распространяет удаления. Графическое приложение / пакет называется unison-gtk.

  • OwnCloud - Облачное хранилище запускается на вашем собственном сервере. Вам понадобится машина, чтобы оставить на. Требуется разумное количество настроек. Запускает полноценный веб-сервер Apache 2 и базу данных SqlLite или MySQL на сервере. Работает аналогично Dropbox с настольным клиентом, но сервер находится под вашим контролем. редактирование: OwnCloud недавно претерпел некоторые изменения в том, как выполняется проект, и теперь имеет новый полностью открытый исходный код (то есть, нет корпоративной версии с закрытым исходным кодом) под видом NextCloud (см. это интервью на YouTube с оригинальным разработчиком OwnCloud Больше подробностей).

  • SparkleShare - использует git для синхронизации файлов. Согласно домашней странице: хорошо для многих небольших файлов, не подходит для большого количества больших файлов, таких как музыка или коллекция фотографий.

  • Seafile - предоставляет серверный компонент, который вы можете установить на локальном компьютере. Seafile использует модель данных, аналогичную git, для отслеживания изменений. Обеспечивает синхронизацию клиентов для настольных компьютеров, планшетов и смартфонов. Сообщение в блоге, описывающее настройку, можно найти по адресу http://openswitch.org/blog/2013/07/18/install-and-configuring-seafile-on-ubuntu-12-dot-04/.

  • Osync - "... инструмент для двунаправленной синхронизации файлов, написанный на bash и основанный на rsync. Он работает в локальных и / или удаленных каталогах через туннели ssh. Он в основном предназначен для запуска в качестве задачи cron "(текст с сайта)

  • PowerFolder - основанный на Java проект GPL v2. Основной веб-сайт выдвигает коммерческие предложения, поэтому неясно, как использовать предоставленный файл .jar.

  • Rsync - быстрая и эффективная, существует уже несколько десятилетий, однако она не сохраняет историю, поэтому вам нужно выбрать направление, чтобы решить, является ли файл новым или удаленным. Доступны графические инструменты, такие как gwRsync.

  • Lsyncd - отслеживает папки / файлы для запуска репликации rsync

  • dvcs-autosync - написан на python, использует git для хранения и обмена изменениями между машинами и XMPP для передачи изменений.

  • git-annex - инструмент командной строки для шунтирования файлов, основанный на git. Здесь есть иллюстративное руководство: http://git-annex.branchable.com/walkthrough/

  • Тонидо - бесплатная. Предоставляет настольное приложение, которое будет обмениваться файлами с другими устройствами. Также предоставьте коммерческие облачные предложения и подключаемый компьютер TonidoPlug.

  • BitTorrent Sync (бесплатная) - синхронизация файлов между равноправными узлами на основе BitTorrent. Я не знаю много об этом, потому что я не буду использовать его, потому что он не является открытым исходным кодом и не доверяет ему хранить мои данные в моей локальной сети, не стесняйтесь редактировать этот ответ с лучшей информацией / реальным опытом.

  • SyncThing - Разработан как альтернатива BitTorrent Sync с открытым исходным кодом. В настоящее время в нем отсутствуют некоторые расширенные функции BitTorrent Sync, такие как ненадежные одноранговые узлы. Он находится в стадии активной разработки.

  • Коммерческие хостинговые сервисы, такие как dropbox, ubuntu one, google drive, apple iCloud, быстро дешевы и удобны, однако все они требуют доверия компании со всеми вашими данными и достаточно быстрого интернет-соединения.

  • Git / Subversion - используйте систему контроля версий напрямую. Полностью ручной и может быть немного сложным, но популярным подходом для некоторых пользователей, знакомых с этими системами, используя их в качестве инструментов программирования.

  • CloudFS - синхронизировать всю файловую систему, основанную на кластерной технологии

  • Монтирование NFS - в основном, ваш дом живет на одной машине, и вы получаете к нему доступ по сети, не подходит для ноутбуков, которые вы берете с собой. Дополнительная информация: http://www.linuxjournal.com/article/4880


Факторы, которые необходимо учитывать при принятии решения:

  • Центральный сервер - некоторые решения требуют, чтобы машина была включена постоянно (или, по крайней мере, когда вам нужно синхронизировать), чтобы другие машины синхронизировались с ней. Это может быть одна из ваших существующих машин или отдельная машина, такая как NAS. Следите за увеличением счетов за электроэнергию.

  • Автоматически / вручную / по расписанию. Лучший способ избежать разрешения конфликтов, когда что-то изменяется не только на машине, - это иметь на каждом компьютере программу, которая отслеживает изменения и сразу же синхронизируется, таким образом, вы уменьшаете возможность появления нескольких версии. С ручными процессами вы всегда должны помнить, чтобы запустить синхронизацию.

  • Удаленный доступ - хотите ли вы синхронизироваться вне вашей локальной сети (также как дома), подумайте о последствиях для безопасности этого.

  • Безопасность - делает ваши данные зашифрованными в вашей сети или нет, насколько безопасна передача между компьютерами. Что делать, если кто-то захватывает ваши данные на ходу, и позже обнаруживается, что шифрование имеет недостатки? Кто контролирует сервер, на котором хранятся ваши данные, зашифрованы ли эти данные, можете ли вы доверять третьим сторонам? Нужно ли тыкать в свой роутер, чтобы получить удаленный доступ. Как долго хранятся «удаленные» файлы и связанные метаданные на синхронизированных устройствах и на центральном сервере. Вы синхронизируете между зашифрованным и незашифрованным хранилищем?

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

  • Емкость диска

  • Резервные копии - синхронизация не является резервной копией. Удалите важный файл по ошибке, и многие из вышеперечисленного удалят все остальные копии. Я рекомендую прочитать статью Мэта Хонана о том, как ее взломали, чтобы понять, что может произойти, если вы, так сказать, положите все свои цифровые яйца в одну цифровую корзину.


Я рекомендую не синхронизировать всю домашнюю папку, а вместо этого выбирать определенные папки для синхронизации, такие как « Documents/ , « Pictures/ т.д. Это избавит вас от необходимости сталкиваться с проблемами скорости / производительности / дискового пространства при автоматической синхронизации всего. Это также позволяет избежать необходимости вести списки исключений.

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

Рекомендации:

  • LinuxFormat - февраль 2014 г. LXF180 p31, "Обзор хостинга хранилищ"

взлом / все /

28

Унисон может быть хорошим кандидатом:

Unison - это инструмент синхронизации файлов для Unix и Windows. Он позволяет хранить две копии набора файлов и каталогов на разных хостах (или разных дисках на одном хосте), изменять их отдельно, а затем обновлять, распространяя изменения в каждой реплике на другую.

Он уже выполняет двухстороннюю синхронизацию. Смотрите обновление ниже.

Я узнал, что существует очень мало вещей, которые rsync не может сделать, и он, вероятно, может предоставить такое же или лучшее решение, но вам придется подождать, пока эксперт rsync не найдет это решение.

Обновление: да, Unison может синхронизировать более 2 машин. Из их руководства пользователя:

Использование Unison для синхронизации более двух машин

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

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

19

Как насчет размещения ваших файлов в системе контроля версий, такой как SubVersion или git?

Я не делаю версию всего моего домашнего каталога, а только несколько дочерних с некоторыми важными вещами. Но я думаю о переходе на git, так как это кажется лучше для этого типа работы. (быстрый поиск отправит вас в правильном направлении).

Удачи


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

6

Ваша главная проблема при попытке сделать это - решить, как объединять изменения, распространять удаления и разрешать конфликты. Это трудно сделать полностью автоматизированным способом, особенно если у вас есть 3 компьютера, которыми пользуются несколько человек.

Если вы разделяете пользователей, все становится намного проще. Поскольку один пользователь не может находиться в двух местах одновременно (и, следовательно, генерировать конфликты), вы можете настроить задание rsync для запуска при входе в систему, чтобы "получать изменения" и выходить из системы, чтобы "выдвигать изменения" ... на одном из ваших компьютеров, который будет хозяином ... так что на этом уровне детализации вы будете синхронизировать /home /myuser каждый раз, а не весь /home /. Дополнительное уточнение (в случае, если люди не выходят из системы) будет запускать push-скрипт после короткого периода бездействия.

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

5

Я думаю, что вы можете добиться того, чего хотите лучше, с помощью NFS, монтирующей общую домашнюю папку. Проверьте эту статью http://www.linuxjournal.com/article/4880

4

Проверьте lsyncd

Lsyncd отслеживает интерфейс монитора событий деревьев локальных каталогов (inotify или fsevents). Он объединяет и объединяет события в течение нескольких секунд, а затем запускает один (или более) процесс (ы) для синхронизации изменений. По умолчанию это rsync. Таким образом, Lsyncd - это легкое решение для живого зеркала, которое сравнительно легко установить, не требующее новых файловых систем или блочных устройств, и не снижающее производительность локальной файловой системы.

Rsync+ssh - это расширенная конфигурация действий, которая использует SSH для действия файла и каталога, перемещается непосредственно на цель, а не ретранслирует пункт назначения перемещения по сети.

Тонкая настройка может быть достигнута через файл конфигурации. Конфигурации пользовательских действий могут даже быть написаны с нуля в каскадных слоях - от сценариев оболочки до кода, написанного на языке Lua language.layers, от сценариев оболочки до кода, написанного на языке Lua.

4

Это не совсем даст решение, но даст вам начало:

Время от времени настраивайте работу cron для повторной синхронизации файлов. Я использую команду как следующее:

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh user@10.10.0.1:/path/to/home/

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

--stats и --progress не обязательны и, вероятно, должны быть исключены из ваших сценариев

содержимое моего файла rsync_backup_excludes.conf:

dev/*
proc/*
lost+found/*
mnt/*
sys/*
2

Смонтировать /home с одного компьютера на два других. Automount работает довольно хорошо для этого.

2

Взгляните на dropbox http://www.getdropbox.com/ Кроссплатформенный Win / Linux / Mac

1

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

1

Попробуйте dvcs-autosync.

Это основано на git, использует XMPP для уведомления подключенных клиентов об изменениях файлов и реагирует на события изменения файлов через изменения inode. Поэтому он всегда получает информацию сразу после изменения файла, в случае конфликтов он использует проверенные методы git.

Я использовал его некоторое время в качестве замены Dropbox через открытые ключи SSH, и это действительно делает свою работу.

1

Если вы также хотите синхронизировать конфиги - упомянутые выше инструменты совершенно беспомощны: конфиги часто меняются, и многие лог-файлы создают конфликты, поэтому их невозможно объединить.
Мое заблуждение простое и глупое :) У меня есть рабочая станция Master, и все файлы из "~" просто копируются на второй "Slave". В тот момент, когда я понимаю, что мне нужно что-то изменить - я делаю это на Master, и Slave синхронизирует эти изменения.

Кроме того, некоторые сценарии bash должны работать по-разному на этих машинах, поэтому я отредактировал мой /etc/bash.bashrc:

export OOHOST=Master

Теперь сценарии знают, какой хост они обслуживают;)

1

Ubuntu One может быть тем, что вы ищете. К сожалению, он все еще находится в бета-фазе, и у меня нет опыта работы с ним, поэтому я не уверен, будет ли он работать для вас.

0

Вы можете использовать скрипт синхронизации, такой как osync, который может распространять удаленные файлы и обновлять только измененные. http://www.netpower.fr/osync osync основан на rsync, но может обрабатывать множество сценариев синхронизации между локальными или удаленными папками через ssh.

0

Я использую SyncTwoFolders для Mac и Syncback для ПК - первый для моих трех компьютеров дома (включая ноутбук), а второй для моего ПК на работе. Обе программы имеют различные опции резервного копирования и синхронизации, что делает это легким делом после настройки предустановок. Очень просто! Я уверен, что есть другие версии аналогичного программного обеспечения для Linux и Ubuntu.

0

Обходные пути я бы рассмотрел:

  • Dropbox.
    Основные недостатки: это не бесплатно для любого разумного количества данных. В остальном работает ИМХО без нареканий

  • NAS-сервер. Поместите свои файлы на сервер NAS, в последнее время они стали достаточно доступными (от 150 долларов или около того), а хороший не потребляет много энергии. Никаких проблем с синхронизацией никогда.
    Главный недостаток: медленнее, чем локальная копия

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .