Синхронізація файлів Dropbox без центрального сервера [закрито]


22

Я шукаю спосіб синхронізувати вторинні накопичувачі на моїх двох Mac через Інтернет. Я підтримую VPN-зв’язок між двома Mac, і я можу отримати доступ до них так, ніби вони сидять поруч.

Я шукаю спосіб реалізувати схожий на Dropbox досвід, коли, якщо я модифікую файл на одному Mac, файл переходить на інший Mac (і навпаки). Мені також потрібна можливість зменшити пропускну здатність (тому наша маленька 1-мегабітна труба для завантаження не перевантажується). Будь-які пропозиції?

О, і використання дроп-боксу - це щось не викликає сумніву на даний момент, оскільки мій накопичувач становить 500 Гб. Спасибі!


Перевірте порт "rsync", який є інструментом Linux для цього. Він може синхронізувати ваші файли на кожному запуску; тоді вам потрібен лише спосіб запустити це кожного разу, коли зміниться sg.
dkellner

Ви хочете синхронізувати всі 500 ГБ?
cubuspl42

5
Це буде тематично щодо рекомендацій із програмного забезпечення. Дивіться це запитання (не стосується Mac): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul

Вам це теж потрібно? "Якщо я видалю файл на будь-якій машині, його слід також видалити з іншої машини, замість того, щоб його знову створювали."
Патрік М

Відповіді:


30

Перевірте синхронізацію Bittorrent . Він має функцію синхронізації, як Dropbox, але без хмари.


Знизу: обидві машини мають бути одночасно в Інтернеті, щоб мати змогу синхронізуватися.
Джеральд Шнайдер

18
@GeraldSchneider Чи знаєте ви про те, що не має цього обмеження?
Шельваку

2
@shelvacu, неможливо. Якщо ви хочете, щоб він синхронізувався, не потребуючи обох машин в Інтернеті, вам потрібно хмарне зберігання (протилежне запиту OP).
HalosGhost

5
Не обов'язково хмарне сховище. Вам потрібен один вузол, який завжди в мережі. Це може бути комп'ютер, NAS, хмарний сервіс, ваш власний екземпляр OwnCloud, запропонований Лоуренсом, або будь-яке подібне рішення. Але якщо у вас немає одного вузла завжди в Інтернеті, це обмеження завжди діє.
Джеральд Шнайдер

3
Я використовую BitTorrent Sync, і настійно рекомендую його використовувати разом із Dropbox для файлів, які занадто великі і не варто займати місця там. Однак слід врахувати одне, що він не справляється з одночасним редагуванням файлів - немає конфліктів, як з Dropbox - останній редагований файл просто виграє. Не обов'язково проблема, але це залежить від ваших вимог.
zelanix

16

Якщо ви хочете перейти на хардкор, ви можете використовувати команду rsync спочатку в OsX , наприклад * nix staff.

Перш за все, ви повинні мати дозвіл на доступ до віддаленого хоста за допомогою ssh. Сервер OpenSSH попередньо встановлений на Mac OsX, і вам не потрібно встановлювати будь-який додатковий пакет. Просто потрібно виконати деякі системні налаштування. Щоб увімкнути сервер OpenSSH на Mac OS X, відкрийте Налаштування системи та натисніть Надіслати. І тоді встановіть прапорець Віддалений вхід, щоб увімкнути SSH, а потім виберіть перемикач із написом Усі користувачі у розділі Дозволити доступ для .

Тепер ви можете отримати доступ до віддаленого хоста за допомогою ssh.

Тепер ви повинні створити відкритий ключ доступу для доступу без пароля від локальної гостьової машини до віддаленого хоста через ssh. Для цього потрібно трохи забруднити руку. :)

Спочатку визначте, чи є у вас вже ключі аутентифікації. У Терміналі запустіть:

sudo ls -la /var/root/.ssh

Якщо ви бачите "id_dsa" та id_dsa.pub , ви можете пропустити решту цього розділу.

На клієнтській машині виконайте наступне в Терміналі:

sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"

Після того, як створений ключ доступу в локальній гостьовій машині, потрібно скопіювати відкритий ключ гостя у файл дозволеного_кейта хоста. Це можна зробити за допомогою простої команди Terminal, яка додає відкритий ключ до списку авторизованих ключів:

sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'

Команда нижче, яка виконає додаткове резервне копіювання вашої кореневої файлової системи в локальній гостьовій машині на віддаленому хості:

/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Ви можете змінити параметри rsync для поведінки синхронізації змін. Якщо ви додасте цю команду в crontab , синхронізацію можна запустити в будь-який часовий цикл. Наприклад:

sudo crontab -e

додайте рядок нижче до crontab:

*/30 * * * * /usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Це буде запускатися синхронізацією кожні півгодини.

Ось зразок сценарію Python:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Cron automated synchronization script.

Desc: Synchronize remote folder into local machine. Duplicate processes 
      are disallowed until running process finished.

Usage:
    :: Change required variables as _user, _password, _domain etc.
    :: Edit crontab 
    # crontab -e

    :: Append line below.
    */30 * * * * python synchronizator.py 2>&1 &

Author: Sencer HAMARAT (RecNes)
E-Mail: sencerhamarat@gmail.com
"""

import shlex
from subprocess import Popen, PIPE
import logging as log
import sys

__author__ = "Sencer HAMARAT"

_user = 'username'
_password = 'password'
_domain = 'example.com'

_expectation = "Enter passphrase for key \'/home/%s/.ssh/id_rsa\':" % _user
_rsync = '/usr/bin/rsync --partial --progress -avvz -e'
_pub_key = '/home/%s/.ssh/id_rsa.pub' % _user
_ssh = '/usr/bin/ssh -i %s' % _pub_key
_remoteDir = '/home/%s/backup/' % _user
_localDir = '/home/%s/backup/' % _user
_command = '%s %s %s@%s:%s %s' % (_rsync, _ssh, _user, _domain, _remoteDir, _localDir)
run_command = shlex.split(_command)

_logFile = "logfile.log"
_logFormat = "%(asctime)s %(levelname)s %(name)s %(process)d %(threadName)s %(module)s:%(lineno)d %(funcName)s() " \
             "%(message)s\n"
log.basicConfig(filename=_logFile, level=log.DEBUG, format=_logFormat)

log.debug(u'Command will run: %s' % _command)

try:
    running_command = Popen(run_command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    if running_command.poll():
        log.debug(repr(running_command.poll()))
        sys.exit()
    if _expectation in running_command.communicate():
        running_command.communicate(_password)
    print running_command.communicate()
except Exception as e:
    log.debug(repr(e))
finally:
    sys.exit()

Я розглядав можливість використання rsync, проте проблема полягає тут: "Що робити, якщо rsync не закінчиться повністю через 30 хвилин?" Я не хочу, щоб два rsyncs виникали одночасно. Чи є спосіб обходити це?
мюнчереллі

1
@muncherelli: відносно безболісно писати невеликий "фіксуючий" механізм навколо rsync для запобігання одночасних синхронізацій. В основному, загорніть виклик rsync у сценарій bash, і ви можете робити все, що завгодно.
unperson325680

Я додав зразок сценарію. Сподіваюся, це допоможе.
Сенсер Х.

Це чудовий сценарій. Дякую за допомогу. Я вирішив перейти з BitTorrent Sync через простоту та зменшення пропускної здатності. (Я знаю, що ви можете встановити максимальне використання пропускної здатності за допомогою rsync, але BTS набагато інтуїтивніше).
muncherelli

8

Owncloud - це можливе рішення, якщо ви хочете отримати доступ через Інтернет.

Вам знадобиться власний сервер для розміщення Owncloud, однак це більше серверне рішення, де ваші 2 клієнти можуть отримати доступ до того, що їм потрібно за бажанням, але буде лише 1 копія відповідного файлу, який буде розташований на Власний сервер.


Чи все ж таки так, що ви можете підключитися лише до одного власногокладу? Наприклад, я не можу мати свого власного і ділитися іншим з братом?
Томас Веллер

Принаймні клієнти для синхронізації з настільним комп’ютером тепер підтримують декілька одночасних хмарних з'єднань. Але також в межах одного сервера ви можете ділитися лише певними файлами / каталогами, не обов'язково все.
ojdo


2

Якщо в Windows є інструмент SyncToy , який робить це в три етапи. якщо Mac, мова йде про ChronSync інструменту або три- резервного інструменту


Привіт Руслане, чи можете ви відредагувати свою відповідь, щоб пояснити, чому ChronSync або Tri-Backup були б ідеальним рішенням для ОП? Прямо зараз, це дуже низька якість відповіді, і на самому ділі не відповісти на хау питання. Спасибі
канадський Люк REINSTATE MONICA

Привіт, дякую за запитання. Ну, я не кажу, що ці програми є ідеальним рішенням, але я думаю, що це досить просто, оскільки у них є графічний інтерфейс, це також означає, що кожен може це зробити без глибокого розуміння набору командних рядків магічних написань. Також я вважаю, що якщо у когось є питання щодо використання перелічених програм, його слід задати окремим запитанням, наприклад, що він зробив, що не так \ дивно. Це замість того, щоб копіювати тут документацію для них, не задаючи жодних конкретних питань.
Руслан Герасимов

2

Розглянемо Унісон. Він обробляє двосторонню синхронізацію файлів. Ви можете встановити його за розкладом за допомогою cronчи іншого програмного планування.

http://www.cis.upenn.edu/~bcpierce/unison/

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

Unison ділиться рядом функцій з такими інструментами, як пакети управління конфігурацією (CVS, PRCS, Subversion, BitKeeper тощо), розподілені файлові системи (Coda тощо), однонаправлені утиліти дзеркального відображення (rsync тощо) та інші синхронізатори (Intellisync, Reconcile тощо). Однак є кілька моментів, де вона відрізняється:


1
+1: Коли потрібна двонаправлена ​​синхронізація, вона очевидно перемагає rsync, маючи при цьому всі її цікаві функції.
ojdo

1

Мені пощастило з GoodSync з двома комп'ютерами в одній локальній мережі, але я думаю, що він все одно буде добре працювати у вашій ситуації.

Ось їх опис продукту:

  • GoodSync синхронізує файли між вашим комп’ютером, мобільними пристроями, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure.
  • GoodSync створює резервну копію файлів на портативних накопичувачах, мобільних пристроях і на FTP, S3, GDocs, SkyDrive, DAV або іншому комп'ютері.
  • Пряма синхронізація P2P: GoodSync Connect синхронізує файли безпосередньо між вашими комп'ютерами, без повільності, що вводяться синхронізацією через сторонні сервери.
  • GoodSync дуже швидко і синхронізує файли за вашою командою, періодично, за графіком або в режимі реального часу (при зміні файлів).

Вам потрібно лише налаштувати GoodSync на одному з ПК; він обробляє двосторонню синхронізацію, і тип синхронізації він налаштовується. Також він настійно рекомендує CNet.


Привіт Джон, ви можете редагувати свою відповідь, щоб пояснити, чому GoodSync був ідеальним рішенням для проведення ОП? Прямо зараз, це дуже низька якість відповіді, і на самому ділі не відповісти на хау питання. Спасибі
канадський Люк ВІДНОВЛЕНО МОНИЦА

1

Ще одне можливе рішення - AeroFS .

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

AeroFS працює на Windows, Mac, Linux, iOS та Android, тому це повинно вас охоплювати.


0

Отже, якщо ви принципово не проти хмарного сховища, є два апаратних рішення для зовнішніх накопичувачів:

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

Перенесення файлів дещо простіше, оскільки дані синхронізуються лише на інших дисках файлових транспортерів, які ви спеціально налаштували для синхронізації.

Обидва варіанти корисні для великих обсягів даних, і ви просто купуєте обладнання один раз без передплати.

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