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

149956
lamcro

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

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

102
Проблема большинства «синхронизирующих» инструментов (включая rsync, если я правильно помню) заключается в том, что они не имеют представления о действиях пользователя. Таким образом, если вы удалите файл на компьютере X, инструмент не будет знать, (а) действительно ли вы удалили файл на компьютере X или (b) что вы добавили этот файл на компьютер Y. Большинство инструментов предполагает, что (b), поэтому после синхронизации они снова добавят файл на компьютер X (вместо удаления на компьютер Y). Rabarberski 13 лет назад 7
@Rabarberski Многие инструменты синхронизации (включая Unison или Syncthing) ведут базу данных со ссылками на существующие данные (по этой причине). Это не поможет вам при синхронизации новых папок в первый раз, но они могут очень хорошо удалить файлы для вас (автоматически). Реальная проблема с большинством инструментов синхронизации заключается в том, что файлы были изменены в двух местах до следующей синхронизации - в этом конфликтном случае вам, как правило, приходится выполнять слияние вручную или, возможно, заменять его самой новой версией. Chris 8 лет назад 3
Синхронизация, когда изменения не могут быть мгновенно скопированы на другие машины, действительно сложна, и я никогда не видел, чтобы какая-либо программа делала это идеально, поэтому будьте готовы к нескольким ошибкам, конфликтам, появлению файлов. Я бы порекомендовал синхронизировать только некоторые конкретные папки, которые, как вы знаете, будут управляться программой синхронизации. Arno 6 лет назад 1

16 ответов на вопрос

77
Tim Abell

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

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

взлом / все /

У меня есть сервер без корневого доступа (который необходим для установки unison, например). Есть ли на моем клиентском компьютере скрипт, который не нужно устанавливать на моем сервере? Ben Kushigian 8 лет назад 0
Я видел программное обеспечение с именем freefilesync (http://sourceforge.net/projects/freefilesync), упомянутое несколько раз здесь и там. Может быть стоит упомянуть в вашем списке? YoungFrog 8 лет назад 0
27
nagul

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

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

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

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

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

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

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

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

У меня есть некоторые неудачные опыты с унисонами, по какой-то причине время от времени вместо добавления новых файлов с других компьютеров он удалял их, в то время как в других случаях он работал нормально. jhcaiced 12 лет назад 0
Я предлагаю отредактировать пример a / b / c, чтобы следовать рекомендации в руководстве, чтобы не создавать петли. Tim Abell 10 лет назад 1
Что касается вашей ссылки на rsync. Нет, это не может надежно сделать двустороннюю синхронизацию. Посмотрите на следующий ответ, чтобы понять, почему unison может обрабатывать случай, который rsync не может: http://stackoverflow.com/questions/4504357/how-does-unison-decide-which-way-to-sync-a-file ndemou 8 лет назад 0
19
Johan

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

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

Удачи


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

Хлоп. Идея использования контроля версий для синхронизации файлов действительно заставляет мою кожу сканировать. JohnD 12 лет назад 0
Да, идея странная, но действительно полезная. Подумайте о директории типа ~ / bin / для приватных вспомогательных скриптов, такая директория отлично подходит для системы контроля версий. В то время как каталог типа .kde, вероятно, будет вести себя плохо в системе контроля версий и будет помещен в список игнорирования для файла, который не обрабатывается. Johan 12 лет назад 0
Это отличный способ синхронизировать ваши файлы, вы должны привыкнуть к идее использования «git add» и «git rm» для добавления / удаления файлов, но работает очень хорошо. jhcaiced 12 лет назад 0
Мне нравится эта идея, потому что я контролирую, какая часть файлов в мусоре, которые у меня есть в моем доме, будет распространена. Вопрос только в том, как управлять коммитами. то есть некоторые файлы должны войти в исходную фиксацию и затем отразить изменения, чтобы показать, что они основаны на системе / etc / skel. ony 10 лет назад 0
Удобно ли поддерживать пару отдельных веток с вашими файлами, когда вы пытаетесь синхронизировать каталоги? Конечно, это работает, но я не рекомендовал бы (g) это для этой задачи. Как правило, вы можете исключить файлы из большинства инструментов синхронизации (по имени, папке и т. Д.), И для того, что вы описываете (используя его только для некоторых важных подкаталогов), это не очень полезно в отношении исходного вопроса. Chris 8 лет назад 0
Согласился, что использование VCS имеет приятный побочный эффект - синхронизировать файлы, но обычно вы не хотите помещать файлы под контроль версий, которые там не принадлежат. В идеале, вы должны использовать лучший инструмент для работы, которую вы пытаетесь сделать; если мерзавец служит этой цели, то отлично. Просто имейте в виду, что то, что делается для git, должно быть в репо навсегда, так что это не будет работать для меня, так как часто я загружаю огромные ISO-образы или установщики, которые сидят пару месяцев, а затем удаляются или архивируются в лучший дом. Нет смысла добавлять их в репо. jia103 8 лет назад 0
6
Ira Cooke

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

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

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

5
jspeaks

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

4
Matt Cofer

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

Время от времени настраивайте работу 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 будет синхронизировать, когда машина включена, избегая пропущенных слотов из-за простоя. Tim Abell 10 лет назад 0
Это копирует весь ваш локальный корень в удаленную домашнюю папку. Это не то, о чем просил ОП, и я не могу представить, почему кто-то захочет этого ... Cerin 8 лет назад 0
4
eric

Проверьте lsyncd

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

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

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

2
Boxdog

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

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

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

1

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