it-swarm.xyz

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

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

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

112
lamcro

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

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

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

взлом/все /

86
Tim Abell

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

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

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

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

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

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

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

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

28
nagul

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

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

Удачи


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

19
Johan

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

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

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

6
Ira Cooke

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

5
jspeaks

Проверить lsyncd

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

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

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

4
eric

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

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

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh [email protected]:/path/to/home/

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

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

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

dev/*
proc/*
lost+found/*
mnt/*
sys/*
4
Matt Cofer

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

2
Xenoactive

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

2
Boxdog

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

1
Molly7244

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

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

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

1
schlypel

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

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

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

Теперь сценарии знают, на каком хосте они работают;)

1
kolypto

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

1
Ilari Kajaste

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

0
Orsiris de Jong

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

0
Henk the ThinkTank

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

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

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

0
Rabarberski