Перейти к содержимому

Dropbox-Like File Sync без центрального сервера

22

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

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

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

6 373 просмотра
muncherelli спросил 12 лет назад
M 1 014

9 ответов

30
Принятый ответ

Check out Bittorrent Sync. It has the sync functionality like Dropbox, but without the cloud.

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

Gerald Schneider · 12 лет назад · 0

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

Shelvacu · 12 лет назад · 18

@shelvacu, не возможно. Если вы хотите, чтобы он синхронизировался без необходимости подключения обеих машин к сети, вам необходимо облачное хранилище (в отличие от запроса OP).

HalosGhost · 12 лет назад · 2

Не обязательно облачное хранилище. Вам нужен один узел, который всегда онлайн. Это может быть компьютер, NAS, облачный сервис, собственный экземпляр OwnCloud, предложенный Лоуренсом, или любое подобное решение. Но до тех пор, пока у вас не будет одного узла, всегда подключенного к сети, это ограничение всегда применяется.

Gerald Schneider · 12 лет назад · 5

Я лично использую Raspberry Pi, подключенный напрямую к моему маршрутизатору, и веб-интерфейс BT Sync (поэтому мне не нужен монитор, подключенный к Pi). Внешний жесткий диск и у вас есть полное «личное облако». Более подробная информация здесь: http://blog.bittorrent.com/2013/05/23/how-i-created-my-own-personal-cloud-using-bittorrent-sync-owncloud-and-raspberry-pi/ (раскрытие : БТ мой работодатель)

Jay · 12 лет назад · 0

@GeraldSchneider "облако" - это модное слово "Интернет". OwnCloud (то, что я использую) - это облако, равно как Dropbox, Google Drive, One Drive или общий доступ к вашим файлам на NAS.

Canadian Luke · 12 лет назад · 0

Я использую BitTorrent Sync и очень рекомендую его - я использую его вместе с Dropbox для файлов, которые слишком велики и не стоят там места. Однако следует учитывать, что он плохо справляется с одновременным редактированием файлов - нет обработки конфликтов, как в Dropbox, - последний отредактированный файл просто выигрывает. Не обязательно проблема, но это зависит от ваших требований.

zelanix · 12 лет назад · 3

Чтобы проиндексировать новые файлы с помощью BitTorrent Sync, нужны годы. Вы можете держать службу синхронизации всегда в сети, если можете добавить свою папку синхронизации на сервер.

Mikuz · 12 лет назад · 0

Это именно то, что я ищу. Спасибо!

muncherelli · 12 лет назад · 0
Oskar Persson ответил 12 лет назад
O 708
16

If you want to go hardcore, you can use rsync command natively in OsX, like *nix staff.

Before everything, you must have the permission to access to the remote host by ssh. OpenSSH server is preinstalled on Mac OsX and you don't need to install any additional package. Just need to do some system settings. To enable the OpenSSH server on Mac OS X, open System Preferences and click to Sharing. And than, check the Remote Login box to enable SSH, then select the radio button labeled All Users from the Allow Access For section.

You can now access to the remote host by ssh.

Now, you must create a public access key for passwordless access from local guest machine to remote host over ssh. For that you must get your hand dirty a little bit. :)

First, determine if you already have authentication keys. In the Terminal, run:

sudo ls -la /var/root/.ssh

If you see "id_dsa" and id_dsa.pub, then you can skip the rest of this section.

On the client machine, run the following in the Terminal:

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

AFter created access key in local guest machine, you need to copy the guest's public key to the host's authorized_keys file. You can do this with a simple Terminal command that appends the public key to the list of authorized keys:

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

The command below that will perform an incremental backup of your root filesystem in local guest machine on to your remote host:

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

You can change parameters of rsync for change synchronization behaviors. If you add this command into crontab, synchronization can be run in any time cycles. For example:

sudo crontab -e

append line below to 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

This will be run synchronization in every half hour.

Here is the sample Python script:

#!/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 происходили одновременно. Есть ли способ обойти это?

muncherelli · 12 лет назад · 0

@muncherelli: относительно безболезненно написать небольшой механизм блокировки вокруг rsync, чтобы предотвратить одновременную синхронизацию. По сути, оберните вызов rsync в скрипт bash, и вы сможете делать все, что захотите.

progo · 12 лет назад · 1

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

Sencer H. · 12 лет назад · 0

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

muncherelli · 12 лет назад · 0
Sencer H. ответил 12 лет назад
S 796
8

Owncloud is a possible solution if you want web based access.

You will need your own server to host Owncloud on, however it's more of a server based solution where your 2 clients can access what they need at will, but there will only be 1 copy of the file in question, which will be situated on the Owncloud server.

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

Thomas Weller · 12 лет назад · 0

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

ojdo · 12 лет назад · 0
Lawrence ответил 12 лет назад
L 3 047
4

Я недавно наткнулся на Syncthing. Много классных особенностей.

http://syncthing.net/

user5522 ответил 12 лет назад
U 41
2

If Windows, there is a SyncToy tool which does it in three steps. if Mac, it is about ChronSync tool or tri-backup tool

Привет, Руслан, можешь ли ты [отредактировать] свой ответ, чтобы объяснить, почему ChronSync или Tri-Backup будут идеальным решением для OP? Прямо сейчас, это очень низкое качество ответа, и на самом деле * не отвечает * на ** как ** вопроса. Спасибо

Canadian Luke · 12 лет назад · 0

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

Ruslan Gerasimov · 12 лет назад · 0
Ruslan Gerasimov ответил 12 лет назад
R 1 916
2

Consider Unison. It handles two-way file synchronization. You can set it on a schedule with cron or some other scheduling app.

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

Unison is a file-synchronization tool for Unix and Windows. It allows two replicas of a collection of files and directories to be stored on different hosts (or different disks on the same host), modified separately, and then brought up to date by propagating the changes in each replica to the other.

Unison shares a number of features with tools such as configuration management packages (CVS, PRCS, Subversion, BitKeeper, etc.), distributed filesystems (Coda, etc.), uni-directional mirroring utilities (rsync, etc.), and other synchronizers (Intellisync, Reconcile, etc). However, there are several points where it differs:

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

ojdo · 12 лет назад · 1
Chloe ответил 12 лет назад
C 2 349
1

I've had good luck with GoodSync with two PC's on the same LAN, but I bet it would still work well in your situation.

Here is their product description:

  • GoodSync syncs files between your computer, mobile devices, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure.
  • GoodSync backs up files to portable drives, mobile devices and to FTP, S3, GDocs, SkyDrive, DAV or another computer.
  • Direct P2P Sync: GoodSync Connect syncs files directly between your computers, without slowness introduced by syncing via 3rd party servers.
  • GoodSync is very fast and syncs files on your command, periodically, by a schedule or in real time (on file change).

You only need GoodSync set up on one of your PC's; it handles two-way synchronization and the kind of sync it does is customizable. Also, it is highly recommended by CNet.

Привет, Джон, можешь ли ты [отредактировать] свой ответ, чтобы объяснить, почему GoodSync будет идеальным решением для OP? Прямо сейчас, это очень низкое качество ответа, и на самом деле * не отвечает * на ** как ** вопроса. Спасибо

Canadian Luke · 12 лет назад · 0
Jon Onstott ответил 12 лет назад
J 193
1

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

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

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

chritohnide ответил 12 лет назад
C 188
0

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

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

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

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

tfinniga ответил 12 лет назад
T 141