Как синхронизировать домашнюю папку между несколькими компьютерами?

117

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

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

lamcro
источник
9
Проблема большинства «синхронизирующих» инструментов (включая rsync, если я правильно помню) заключается в том, что они не имеют представления о действиях пользователя. Поэтому, если вы удалите файл на компьютере X, инструмент не будет знать, (а) действительно ли вы удалили файл на компьютере X или (b) что вы добавили этот файл на компьютер Y. Большинство инструментов предполагают, что (b), поэтому после синхронизации они снова добавят файл на компьютер X (вместо удаления на компьютер Y).
Рабарберски
5
@Rabarberski Многие инструменты синхронизации (включая Unison или Syncthing) ведут базу данных со ссылками на существующие данные (по этой причине). Это не поможет вам при синхронизации новых папок в первый раз, но они могут очень хорошо удалить файлы для вас (автоматически). Реальная проблема с большинством инструментов синхронизации заключается в том, что файлы были изменены в двух местах до следующей синхронизации - в этом конфликтном случае вам, как правило, приходится выполнять слияние вручную или, возможно, заменять его самой новой версией.
Крис
2
Синхронизация, когда изменения не могут быть мгновенно скопированы на другие машины, действительно сложна, и я никогда не видел, чтобы какая-либо программа делала это идеально, поэтому будьте готовы к нескольким ошибкам, конфликтам, появлению файлов. Я бы порекомендовал синхронизировать только некоторые конкретные папки, которые, как вы знаете, будут управляться программой синхронизации.
Elzo

Ответы:

90

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

  • Унисон - как уже упоминалось другими, это выполняется вручную, но очень быстро, надежно и эффективно. Требуется, чтобы обе синхронизируемые машины были включены одновременно. Он имеет приятный пользовательский интерфейс, позволяющий вам справляться с почти неизбежными конфликтами, а также правильно отслеживает и распространяет удаления. Графическое приложение / пакет называется 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 - проект GPL v2 на основе Java. Основной веб-сайт выдвигает коммерческие предложения, поэтому неясно, как использовать предоставленный файл .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, стр. 31, «Обзор хостинга хранилищ»

взлом / все /

Тим Абель
источник
У меня есть сервер без корневого доступа (который необходим для установки unison, например). Есть ли на моем клиентском компьютере скрипт, который не нужно устанавливать на моем сервере?
Бен Кусигиан
Я видел программное обеспечение с именем freefilesync ( sourceforge.net/projects/freefilesync ), упомянутое несколько раз здесь и там. Может быть стоит упомянуть в вашем списке?
YoungFrog
28

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

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

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

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

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

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

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

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

nagul
источник
У меня есть некоторые неудачные опыты с унисонами, по некоторым причинам время от времени вместо добавления новых файлов с других компьютеров, они удаляли их, в то время как в других случаях это работало нормально.
jhcaiced
1
Я предлагаю отредактировать пример a / b / c, чтобы следовать рекомендации в руководстве, чтобы не создавать петли.
Тим Абелл
Что касается вашей ссылки на rsync. Нет, это не может надежно сделать двустороннюю синхронизацию. Посмотрите на следующий ответ, чтобы понять, почему unison может обработать случай, который rsync не может: stackoverflow.com/questions/4504357/…
ndemou
19

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

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

Удачи


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

Johan
источник
Хлоп. Идея использования контроля версий для синхронизации файлов действительно заставляет мою кожу сканировать.
JohnD
Да, идея странная, но действительно полезная. Подумайте о директории типа ~ / bin / для приватных вспомогательных скриптов, такая директория отлично подходит для системы контроля версий. В то время как каталог типа .kde, вероятно, будет плохо себя вести в системе контроля версий и будет помещен в список игнорирования для файла, который не обрабатывается.
Йохан
Это отличный способ синхронизировать файлы, вам нужно привыкнуть к идее использования «git add» и «git rm» для добавления / удаления файлов, но он работает очень хорошо.
jhcaiced
Мне нравится эта идея, потому что я контролирую, какая часть файлов в мусоре, которые у меня есть в моем доме, будет распространена. Вопрос только в том, как управлять коммитами. то есть некоторые файлы должны войти в исходную фиксацию и затем отразить изменения, чтобы показать, что они основаны на системе / etc / skel.
оны
Удобно ли поддерживать пару отдельных веток с вашими файлами, когда вы пытаетесь синхронизировать каталоги? Конечно, это работает, но я не рекомендовал бы (g) это для этой задачи. Как правило, вы можете исключить файлы из большинства инструментов синхронизации (по имени, папке и т. Д.), И для того, что вы описываете (используя его только для некоторых важных подкаталогов), это не очень полезно в отношении исходного вопроса.
Крис
6

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

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

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

Ира Кук
источник
5

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

jspeaks
источник
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/*
Мэтт Кофер
источник
Anacron будет синхронизировать, когда машина включена, избегая пропущенных слотов из-за простоя.
Тим Абелл
Это копирует весь ваш локальный корень в удаленную домашнюю папку. Это не то , что просили ОП для, и я не могу себе представить , почему кто - то хочет , что ...
Cerin
4

Проверьте lsyncd

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

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

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

Эрик
источник
2

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

Boxdog
источник
3
Спасибо, но нет. Пробовал уже. Это не то, что я ищу.
Lamcro
Dropbox великолепен, и я использую их бесплатные 2 ГБ для хранения ссылок, фотографий и других важных данных между домом, работой и моими ноутбуками. Это не то, что вам нужно в этой ситуации, но, на мой взгляд, Dropbox определенно имеет свое место.
Мэтт Кофер
2

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

Xenoactive
источник
1

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

Илари Каясте
источник
Я бы сказал, что в данный момент он все еще находится в стадии доработки - каждые несколько дней появляются обновления, поскольку команда Ubuntu устраняет недостатки. Это работает, но я не рекомендовал бы это по Dropbox.
Нагуль
1

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

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

экспорт OOHOST = Мастер

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

kolypto
источник
1

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

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

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

schlypel
источник
0

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

Molly7244
источник
0

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

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

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

Rabarberski
источник
С NAS вы все еще не обращаетесь к тому, как происходит синхронизация. Наличие NAS и двух компьютеров в принципе ничем не отличается от трех компьютеров, о которых спрашивает OP. Если вы предполагаете, что все, что нужно синхронизировать, просто хранится на NAS, то это, как правило, невозможно - рассмотрите, например, синхронизацию конфигурационных файлов - они должны быть на каждой машине.
kba
0

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

Хенк мозговой центр
источник
0

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

Орсирис де Йонг
источник