没有中央服务器的类似Dropbox的文件同步[关闭]


22

我正在寻找一种方法来通过互联网同步两台Mac上的辅助驱动器。我在两台Mac之间拥有一致的VPN连接,并且可以像访问它们一样彼此访问它们。

我正在寻找一种实现Dropbox般体验的方法,如果我在一台Mac上修改文件,该文件将被推送到另一台Mac(反之亦然)。我还需要调节带宽的能力(因此,我们的1兆比特上传管道不会超载)。有什么建议么?

哦,由于我的驱动器为500GB,因此暂时无法使用Dropbox。谢谢!


检查“ rsync”端口,此端口仅是用于Linux的工具。它可以在每次运行时同步文件;那么您仅需要一种方法,只要sg发生更改即可触发此操作。
dkellner 2014年

是否要同步所有500GB?
cubuspl42 2014年

5
这将是有关软件建议的主题。看到这个问题(不具体到Mac):softwarerecs.stackexchange.com/questions/129/...
尼古拉斯·拉乌尔·

您也需要吗?“如果我在任一台计算机上删除了文件,也应该从另一台计算机上删除该文件,而不是重新创建。”
Patrick M

Answers:


30

查看Bittorrent Sync。它具有Dropbox之类的同步功能,但没有云。


缺点:两台机器必须同时在线才能同步。
杰拉尔德·施耐德

18
@GeraldSchneider您知道没有限制的东西吗?
谢尔瓦库2014年

2
@shelvacu,不可能。如果要同步而不需要使两台计算机都联机,则需要云存储(与OP请求相对应)。
HalosGhost 2014年

5
不一定是云存储。您需要一个始终在线的节点。它可以是计算机,NAS,云服务,劳伦斯建议的您自己托管的OwnCloud实例或任何类似的解决方案。但是,只要您没有一个节点始终在线,此限制始终适用。
杰拉尔德·施耐德

3
我使用BitTorrent Sync,我强烈推荐它-我将它与Dropbox结合使用,用于太大的文件,不值得在那里占用空间。不过要考虑的一件事是,它不能很好地处理文件的同时编辑-没有像Dropbox那样的冲突处理-最后编辑的文件只会胜出。不一定是问题,但这取决于您的要求。
zelanix 2014年

16

如果您想成为铁杆,可以在OsX中原生使用rsync命令,例如* nix staff。

在进行所有操作之前,您必须具有通过ssh访问远程主机的权限。OpenSSH服务器已预装在Mac OsX上,您不需要安装任何其他软件包。只需要做一些系统设置。要在Mac OS X上启用OpenSSH服务器,请打开“ 系统偏好设置”,然后单击“共享”。然后,选中“远程登录”框以启用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"

在本地访客计算机中创建访问密钥之后,您需要将访客的公共密钥复制到主机的authorized_keys文件中。您可以使用简单的终端命令执行此操作,该命令将公钥追加到授权密钥列表中:

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,但是问题就出在这里:“如果30分钟后rsync没有完全完成怎么办?” 我不希望同时发生两个rsync。有没有办法解决?
muncherelli 2014年

1
@muncherelli:在rsync周围编写一个小的“锁定”机制来防止同时同步是相对容易的。基本上,将rsync调用包装在bash脚本中,您可以随意执行任何操作。
unperson325680

我添加了示例脚本。希望对您有所帮助。
Sencer H.

这是一个很棒的脚本。非常感谢帮忙。由于简单和带宽限制,我决定使用BitTorrent Sync。(我知道您可以使用rsync设置最大带宽使用率,但是BTS更加直观)。
muncherelli 2014年

8

如果您想要基于Web的访问,则Owncloud是可行的解决方案。

您将需要自己的服务器来托管Owncloud,但是,它更多是基于服务器的解决方案,您的2个客户端可以随意访问他们所需的内容,但是只有一个相关文件的副本,该副本位于服务器上。 Owncloud服务器。


仍然只能连接到一个owncloud吗?例如,我不能拥有自己的一个,并不能与我的兄弟共享另一个?
托马斯·韦勒2014年

现在至少桌面同步客户端现在支持多个同时的云连接。而且在一台服务器内,您也只能共享特定的文件/目录,而不必共享所有文件/目录。
ojdo 2014年


2

如果是Windows,则有一个SyncToy工具,可以通过三个步骤来完成。如果是Mac,则与ChronSync工具或三备份工具有关


您好Ruslan,您可以编辑答案以解释为什么ChronSync或Tri-Backup将是OP的理想解决方案吗?现在,它是一个非常低质量的答案,实际上并没有回答是如何的问题。谢谢
加拿大卢克REINSTATE MONICA 2014年

你好,谢谢你的提问。好吧,我并不是说这些程序是理想的解决方案,但是我认为这很容易,因为它们具有GUI,这也意味着任何人都可以在不深入了解命令行魔术拼写的情况下进行操作。我也相信,如果有人在使用列出的程序时遇到问题,应该在一个单独的问题中提出问题,例如他所做的事情,错在哪里\奇怪。它不是在不询问任何特定问题的情况下为其复制文档。
Ruslan Gerasimov

2

考虑Unison。它处理双向文件同步。您可以使用cron或其他一些计划应用程序在计划中进行设置。

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

Unison是用于Unix和Windows的文件同步工具。它允许将文件和目录集合的两个副本存储在不同的主机(或同一主机上的不同磁盘)上,分别进行修改,然后通过将每个副本中的更改传播到另一个副本来使其更新。

Unison与工具共享许多功能,例如配置管理包(CVS,PRCS,Subversion,BitKeeper等),分布式文件系统(Coda等),单向镜像实用程序(rsync等)以及其他同步器。 (Intellisync,协调等)。但是,有几点不同:


1
+1:需要双向同步时,这显然胜过rsync,同时具有所有出色的功能。
ojdo 2014年

1

我在同一个LAN上使用两台PC的GoodSync感到很幸运,但是我敢打赌,在您的情况下它仍然可以正常工作。

这是他们的产品说明:

  • GoodSync在您的计算机,移动设备,FTP,SFTP,Amazon S3,Google Drive,SkyDrive,WebDAV,Azure之间同步文件。
  • GoodSync将文件备份到便携式驱动器,移动设备以及FTP,S3,GDocs,SkyDrive,DAV或另一台计算机。
  • 直接P2P同步:GoodSync Connect可直接在计算机之间同步文件,而不会因通过第三方服务器进行同步而造成速度缓慢。
  • GoodSync速度非常快,它可以定期,按计划或实时(在文件更改时)同步命令中的文件。

您只需要在一台PC上设置GoodSync;它处理双向同步,并且它的同步类型是可定制的。另外,CNet强烈建议使用。


乔恩,您好,您可以编辑答案以解释为什么GoodSync是OP的理想解决方案吗?现在,它是一个非常低质量的答案,实际上并没有回答是如何的问题。谢谢
加拿大卢克REINSTATE MONICA 2014年

1

另一个可能的解决方案是AeroFS

AeroFS在设备之间双向同步数据,而仅将数据存储在设备上-数据永远不会靠近服务器。AeroFS维护文件的修订历史记录,因此您可以在必要时还原到以前的版本,并且它提供了解决冲突的工具。

AeroFS可在Windows,Mac,Linux,iOS和Android上运行,因此应该涵盖所有内容。


0

因此,如果您原则上不反对云存储,那么有两种用于外部驱动器的硬件解决方案:

Space Monkey使用了一个有趣的范例。它分配磁盘的一部分来存储其他人的小数据,也将您的数据存储在许多其他人的驱动器上(当然是加密的)。这样,在发生灾难的情况下会有很多冗余,并且您的计算机不需要能够看到彼此,甚至不需要同时连接。

文件传输器稍微简单一点,因为数据仅在您专门设置为要同步的其他文件传输器驱动器上同步过。

两种选择均适用于大量数据,您只需购买一次硬件即可,无需支付订阅费。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.