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


117

У мене є три комп'ютерів на дому, і хотів би мати /home/дерево папок синхронізований між трьома.
Будь-які файли / папки (крім прихованих), які модифікуються / додаються / видаляються на одному з трьох комп'ютерів, оновлюються на двох інших.

Чи rsyncдостатньо для цього? і як?


9
Проблема більшості інструментів синхронізації (включаючи rsync, якщо я добре пам'ятаю) полягає в тому, що вони не мають поняття про дії користувача. Отже, якщо ви видалите файл на комп’ютері X, інструмент не знає, чи (а) ви фактично видалили файл на комп'ютері X, або (b) що ви додали цей файл на комп'ютері Y. Більшість інструментів передбачає (b), тому після синхронізації вони знову додадуть файл на комп'ютер X (замість того, щоб видалити його на комп'ютері Y).
Рабарберські

5
@Rabarberski багато інструментів синхронізації (включаючи Unison або Syncthing) зберігають базу даних із посиланнями на існуючі дані (з цієї причини). Це не допоможе вам уперше синхронізувати нові папки, але вони можуть дуже добре видалити файли (автоматично). Справжня проблема більшості інструментів синхронізації полягає в тому, що файли були змінені в двох місцях до наступної синхронізації - у цьому конфліктному випадку зазвичай потрібно зробити об'єднання вручну або, можливо, замінити його на новітню версію.
Кріс

2
Синхронізація, коли зміни неможливо миттєво скопіювати на інших машинах, справді хитра, і я ніколи не бачив, щоб жодна програма робила це ідеально, тож будьте готові до кількох помилок, конфліктів та повторного появи файлів. Я рекомендую синхронізувати лише деякі конкретні папки, які, як ви знаєте, керуються програмою синхронізації.
Ельзо

Відповіді:


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/installing-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 (freeware) - однорангова синхронізація файлів на основі 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, "Розміщене сховище даних"

злому / все /


У мене є кореневий доступ без сервера (який потрібен, наприклад, для встановлення унисон). Чи є на моїй клієнтській версії сценарій, який не потрібно встановлювати на моєму сервері?
Бен Кушиґян

Я бачив програмне забезпечення під назвою freefilesync ( sourceforge.net/projects/freefilesync ), про яке там і там згадувалося кілька разів. Можливо, варто згадати у своєму списку?
YoungFrog

28

Юнісон може бути хорошим кандидатом:

Unison - це інструмент синхронізації файлів для Unix та Windows. Це дозволяє зберігати дві репліки колекції файлів і каталогів на різних хостах (або різних дисках на одному хості), змінювати їх окремо, а потім оновлювати, поширюючи зміни кожної репліки на інші.

Він уже робить двосторонній синхронізацію. Дивіться оновлення нижче.

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

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

Використання Unison для синхронізації більше ніж двох машин

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

Якщо вам потрібно зробити це, найнадійніший спосіб налаштування - це упорядкування машин у «зіркову топологію», з однією машиною, яка позначається як «маточина», а решта - як «спиці», а кожен синхронізований автомат синхронізується тільки з маточиною. Великою перевагою зіркової топології є те, що вона виключає можливість плутати "фальшиві конфлікти", що виникають із-за того, що Unison підтримує окремий архів для кожної пари хостів, які вона синхронізує.


У мене є поганий досвід роботи з унісоном, чомусь час від часу замість того, щоб додавати нові файли з інших комп’ютерів, вони видаляли їх, тоді як в інших випадках це працювало чудово.
jhcaiced

1
Я пропоную редагувати приклад a / b / c, щоб дотримуватися рекомендацій у посібнику не створювати циклів.
Тім Абел

Щодо вашої посилання на rsync. Ні, це не може надійно зробити двосторонню синхронізацію. Подивіться на таку відповідь , щоб побачити , чому унісон може обробляти випадок , який Rsync не може: stackoverflow.com/questions/4504357 / ...
ndemou

19

Як щодо розміщення файлів у такій системі контролю версій, як SubVersion або git?

Я не версію свого цілого домашнього редактора, а лише кілька примірників з деякими важливими речами. Але я думаю про перетворення на git, оскільки, здається, це краще для такого типу роботи. ( швидкий пошук направить вас у правильному напрямку ).

Удачі


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


Yikes. Ідея використання управління версіями для синхронізації файлів дійсно змушує мою шкіру сканувати.
JohnD

Так, ідея дивна, але дійсно корисна. Подумайте про dir, як ~ / bin / для приватних скриптів помічників, такий тип dir чудово підходить для системи контролю версій. Незважаючи на те, що, наприклад, .kde, напевно, буде вести себе погано в системі контролю версій і буде внесений у список ігнорування для файлів, які не обробляються.
Йоган

Це прекрасний спосіб синхронізувати ваші файли, ви повинні звикнути до ідеї використання "git add" та "git rm" для додавання / видалення файлів, але працює дуже добре.
jhcaiced

Мені подобається ця ідея, тому що я контролюю, яка частина файлів у смітті, що я маю вдома, буде спільною. Питання лише в тому, як керувати документами. тобто деякі файли повинні перейти до початкової фіксації, а потім відобразити зміни, щоб показати, що вони базуються на системі / etc / skel.
ony

Чи справді зручне підтримання пари окремих гілок з вашими файлами, коли ви намагаєтеся синхронізувати каталоги? Звичайно, це працює, але я б не рекомендував (g) це завдання. Як правило, ви можете виключати файли з більшості інструментів синхронізації (як за назвою, папкою тощо), так і для того, що ви описуєте (використовуючи його лише для деяких важливих підкаталогів), це не дуже корисно щодо початкового питання.
Кріс

6

Ваша основна проблема при спробі зробити це - вирішити, як об’єднати зміни, розповсюдити видалення та вирішити конфлікти. Це важко зробити повністю автоматизованим способом, особливо якщо у вас є три комп'ютерні установки, якими користуються кілька людей.

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

Є багато інших потенційних рішень, але жодне, яке магічно вирішує цю проблему, наскільки мені відомо. Перший крок - це, мабуть, продумати, як ви користуєтесь машинами, і придумати політику синхронізації, щоб відповідати поведінці вашого користувача.



4

Це не повністю забезпечить рішення, але воно почне:

Налаштовуйте роботу cron так часто, щоб rsync файли. Я використовую таку команду, як наступна:

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

Це використовуватиме rsync лише для копіювання необхідних змін, а не копіювати все щоразу, коли команда виконується.

--stasta та --progress - необов’язкові, і, ймовірно, їх слід виключити зі своїх сценаріїв

вміст мого файлу rsync_backup_excludes.conf:

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

Anacron синхронізується, коли машина увімкнена, уникаючи пропущених прорізів через час простою.
Тім Абел

Це копіює весь ваш локальний корінь у віддалену домашню папку. Це не те, чого просили ОП, і я не можу собі уявити, чому хтось цього хотів би ...
Серін

4

Перевірте lsyncd

Lsyncd спостерігає інтерфейс монітора подій дерев локальних каталогів (ініціювати чи fsevents). Він агрегує та поєднує події протягом декількох секунд, а потім породжує один (або більше) процес (и) для синхронізації змін. За замовчуванням це rsync. Таким чином, Lsyncd - це легке живе дзеркальне рішення, яке порівняно просто встановити, не вимагаючи нових файлових систем або блокових пристроїв і не перешкоджаючи роботі локальної файлової системи.

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

Дрібнозернистий налаштування може бути досягнуто за допомогою файлу config. Спеціальні конфігурації дій можуть бути записані з нуля на каскадних шарах, починаючи від скриптів оболонки до коду, написаного на мові Lua.Заступники - від скриптів оболонки до коду, написаного мовою Lua.


2

Погляньте на http://www.boxdropbox.com/ Кроссплатформа Win / Linux / Mac


3
Дякую, але ні. Спробував це вже. Це не те, що я шукаю.
lamcro

Dropbox чудовий, і я використовую їхні безкоштовні 2 Гб для зберігання посилань, фотографій та інших важливих даних, що не належать місії, між домом, роботою та моїми ноутбуками. Це не те, що вам потрібно в цій ситуації, але, на мою думку, Dropbox безумовно має своє місце.
Метт Кофер


1

Ubuntu One може бути тим, що ви шукаєте. На жаль, він все ще знаходиться в бета-фазі, і я не маю цього досвіду, тому не знаю, чи спрацювало б це для вас.


Я б сказав, що на даний момент це все ще у важкому розвитку - оновлення відбувається кожні кілька днів, коли команда Ubuntu виправляє перепони. Це працює, але я не рекомендував би його через Dropbox.
nagul

1

Якщо ви також хочете синхронізувати конфігури - згадані вище інструменти абсолютно безпорадні: конфігурації часто змінюються, і багато журналів створюють конфлікти, щоб їх не було об'єднано.
Моя обманка проста і дурна :) У мене є робоча станція Master, а всі файли з "~" просто копіюються на другу "Slave". У той момент, коли я усвідомлюю, що мені потрібно щось змінити - я роблю це на Master, і Slave фіксує ці зміни синхронізуючи.

Крім того, деякі сценарії bash повинні працювати на цих машинах різними, тому я редагував свій /etc/bash.bashrc:

експортувати OOHOST = Master

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


1

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

Це засновано на git, використовує XMPP для сповіщення пов'язаних клієнтів про зміни файлів та реагує на події зміни файлів за допомогою змін inode. Тому він завжди отримує інформацію відразу після зміни файлу, у разі конфлікту покладається на перевірені методи git.

Я вже деякий час використовую його як заміну Dropbox за допомогою відкритих ключів SSH, і це справді справляється з цим.


0

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


0

Я вирішу вирішу:

  • Dropbox.
    Основні недоліки: це не безкоштовно для будь-якої розумної кількості даних. В іншому випадку це працює бездоганно IMHO

  • Сервер NAS. Помістіть ваші файли на сервер NAS, останнім часом вони стали досить доступними (від 150 доларів або більше), і хороший не витрачає багато енергії. Жодних проблем із синхронізацією.
    Основний недолік: повільніше, ніж локальна копія


У NAS ви все ще не звертаєтесь до того, як відбувається синхронізація. Наявність NAS та двох комп’ютерів, в принципі, нічим не відрізняється від наявності трьох комп'ютерів, про які просить ОП. Якщо ви припускаєте, що все, що потрібно синхронізувати, просто зберігається в NAS, то це взагалі неможливо - розглянемо, наприклад, синхронізацію файлів конфігурацій - вони повинні бути на кожній машині.
kba

0

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


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.