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


22

Я ищу способ синхронизации дополнительных дисков на двух моих Mac через Интернет. У меня есть постоянное VPN-соединение между двумя компьютерами, и я могу получить к ним доступ, как если бы они находились рядом друг с другом.

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

О, и об использовании Dropbox в данный момент не может быть и речи, поскольку мой диск емкостью 500 ГБ. Благодарность!


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

Хотите ли вы синхронизировать все 500 ГБ?
cubuspl42

5
Это будет по теме «Рекомендации по программному обеспечению». См. Этот вопрос (не относится только к Mac): softwarerecs.stackexchange.com/questions/129/…
Николас Рауль,

Вам это тоже нужно? «Если я удаляю файл на любом компьютере, его следует удалить и с другого компьютера, а не создавать заново».
Патрик М,

Разве это не то, для чего iCloud? hints.macworld.com/article.php?story=20120803092156975
Blazemonger

Ответы:


30

Проверьте Bittorrent Sync . Он имеет функцию синхронизации, как Dropbox, но без облака.


Недостаток: обе машины должны быть подключены одновременно, чтобы иметь возможность синхронизации.
Джеральд Шнайдер

18
@GeraldSchneider Знаете ли вы что-то, что не имеет этого ограничения?
Shelvacu

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"

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

Я добавил образец сценария. Надеюсь, это поможет.
Sencer H.

Это отличный сценарий. Большое спасибо за помощь. Я решил использовать BitTorrent Sync из-за простоты и регулирования полосы пропускания. (Я знаю, что вы можете установить максимальную пропускную способность с помощью rsync, но BTS гораздо более интуитивно понятен).
Манчерелли

8

Owncloud является возможным решением, если вы хотите доступ через Интернет.

Вам понадобится ваш собственный сервер для размещения Owncloud, однако это скорее серверное решение, где ваши 2 клиента могут получить доступ к тому, что им нужно, но будет только 1 копия рассматриваемого файла, которая будет расположена на Собственный облачный сервер.


Это все еще тот случай, когда вы можете подключиться только к одному собственному облаку? Например, я не могу иметь свой собственный и поделиться другим с моим братом?
Томас Уэллер

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


2

Если Windows, есть инструмент SyncToy , который делает это в три этапа. если Mac, речь идет об инструменте ChronSync или инструменте резервного копирования


Привет, Руслан, можешь отредактировать свой ответ, чтобы объяснить, почему ChronSync или Tri-Backup будут идеальным решением для OP? Прямо сейчас, это очень низкое качество ответа, и на самом деле не ответить на хау вопроса. Спасибо
канадец Люк ВОССТАНОВИТЬ МОНИКУ

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

2

Рассмотрим Унисон. Он обрабатывает двустороннюю синхронизацию файлов. Вы можете установить его по расписанию cronили с помощью другого приложения для планирования.

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

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

Unison имеет ряд общих функций с такими инструментами, как пакеты управления конфигурацией (CVS, PRCS, Subversion, BitKeeper и т. Д.), Распределенные файловые системы (Coda и т. Д.), Утилиты однонаправленного зеркалирования (rsync и т. Д.) И другие синхронизаторы. (Intellisync, согласовать и т. Д.). Однако есть несколько моментов, в которых он отличается:


1
+1: когда требуется двунаправленная синхронизация, она явно выигрывает у rsync, сохраняя при этом все свои интересные функции.
Ойдо

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 будет идеальным решением для OP? Прямо сейчас, это очень низкое качество ответа, и на самом деле не ответить на хау вопроса. Спасибо
канадец Люк ВОССТАНОВИТЬ МОНИКУ

1

Другое возможное решение - AeroFS .

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

AeroFS работает на Windows, Mac, Linux, iOS и Android, так что вы должны быть в курсе.


0

Итак, если вы не против принципиально облачного хранилища, есть два аппаратных решения для внешних накопителей:

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

Транспортер файлов немного проще, потому что данные синхронизируются только на других дисках файловых транспортеров, которые вы специально настроили для синхронизации.

Оба варианта хороши для больших объемов данных, и вы просто покупаете оборудование один раз без абонентской платы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.