如何在多台计算机之间同步主文件夹?


117

我家里有三台计算机,并且希望在三台计算机/home/之间同步文件夹树。
在三台计算机之一中修改/添加/删除的所有文件/文件夹(隐藏的文件/文件夹除外)在其他两台计算机中更新。

是否rsync足以做到这一点?如何?


9
大多数“同步”工具(如果我没记错的话,包括rsync)的问题在于它们没有用户操作的概念。因此,如果您删除计算机X上的文件,该工具将不知道(a)您实际上是删除了计算机X上的文件,还是(b)您在计算机Y上添加了该文件。大多数工具会假设(b),因此,同步后,他们将再次在计算机X上添加文件(而不是在计算机Y上删除文件)。
Rabarberski

5
@Rabarberski许多同步工具(包括Unison或Syncthing)使数据库具有对现有数据的引用(因此)。首次同步新文件夹时,它不会为您提供帮助,但是它们可以很好地为您(自动)删除文件。大多数同步工具的真正问题是,在下一次同步发生之前在两个位置更改了文件-在这种情况下,您通常必须进行手动合并或用最新版本替换。
克里斯

2
当无法在其他计算机上即时复制更改时,同步确实很棘手,而且我从未见过任何程序能够完美地完成同步,因此请为一些错误,冲突和重新出现的文件做好准备。我建议仅同步一些您知道可由同步程序管理的特定文件夹。
Elzo

Answers:


90

以下列出了可能解决此问题的事物,每种事物平衡了您必须进行不同的权衡,因此您必须做出自己的选择并自己尝试解决问题:

  • Unison-正如其他人所提到的,它是手动运行的,但是非常快速,可靠和有效。要求同时同步两台计算机。它具有一个不错的用户界面,可让您处理几乎不可避免的冲突,并正确跟踪和传播删除内容。图形应用程序/程序包称为unison-gtk。

  • OwnCloud-云存储在您自己的服务器上运行。您需要一台机器才能继续。需要合理数量的设置。在服务器上运行完整的Apache 2 Web服务器和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/

  • Tonido-免费软件。提供将与其他设备共享文件的桌面应用程序。还提供商业云产品和TonidoPlug插件计算机。

  • BitTorrent同步(免费)-基于BitTorrent的对等文件同步。我对此不太了解,因为我不会使用它,因为它不是开源的,并且不信任它将数据保存在局域网中,请随时使用更好的信息/真实的经验来编辑此答案。

  • SyncThing-作为BitTorrent Sync的开源替代品而开发。目前,它缺少BitTorrent Sync的某些高级功能,例如不受信任的同级。它正在积极发展中。

  • 商业托管服务,例如Dropbox,Ubuntu One,Google Drive,Apple iCloud都是快速便宜且方便的方法,但是它们都需要将所有数据与公司信任,并且需要相当快速的Internet连接。

  • Git / Subversion-直接使用源代码控制系统。完全手动,对于一些熟悉这些系统的用户来说,将它们用作编程工具可能有点复杂,但却很流行。

  • CloudFS-同步整个文件系统,基于集群技术

  • NFS挂载-基本上您的房屋位于一台计算机上,并且可以通过网络访问它,这对随身携带的笔记本电脑不利。更多信息:http : //www.linuxjournal.com/article/4880


做出决定时要考虑的因素:

  • 中央服务器-某些解决方案要求一台计算机始终处于开机状态(或至少在需要同步时),其他计算机才能与之同步。这可能是您现有的计算机之一,也可能是诸如NAS之类的单独计算机。当心增加电费。

  • 自动/手动/预定-避免解决冲突的最佳方法是在多台机器上进行更改时,每台机器上都应有一个程序来监视更改并立即进行同步,这样您就减少了多次失败的机会版本。对于手动过程,您始终必须记住要运行同步。

  • 远程访问-您是否想从LAN(又称家庭)中进行同步,请考虑一下这对安全性的影响。

  • 安全性-您的数据是否使网络保持加密状态,计算机之间传输的安全性如何。如果有人在移动中捕获了您的数据,后来发现加密存在缺陷怎么办?谁控制保存数据的服务器,数据是否加密,您可以信任任何第三方吗?您是否需要在路由器上戳孔才能进行远程访问。“已删除”文件和相关元数据在同步设备和中央服务器上保留多长时间。您是否正在加密和未加密存储之间进行同步?

  • 移动大文件夹-我尝试过的所有解决方案都存在一个问题,即当您移动/重命名文件或文件夹时,同步无法理解该问题,而是将其重新上传为新文件,然后删除旧副本。请通过标记上面可以解决此问题的任何解决方案来帮忙(我怀疑基于git的解决方案可以做到这一点,因为git不会因为基于git的基于内容的寻址而受此困扰,但我不确定我是否知道没用过)。

  • 磁盘容量

  • 备份-同步不是备份。错误地删除重要文件,上面的许多内容都会愉快地删除所有其他副本。我建议您阅读马特·霍南(Mat Honan)关于被黑客入侵的文章,以充分说明如果将所有数字鸡蛋放在一个数字篮子中会发生什么。


我建议不要同步整个主文件夹,而是选择要同步的特定文件夹(例如)Documents/Pictures/这样可以避免被迫处理自动同步所有内容的速度/性能/磁盘空间问题。它还避免了必须维护排除列表。

当我继续尝试寻找适合自己的东西时,我将尝试使此答案保持最新,并提供有用的信息。我已经将所有其他答案中的信息汇总为一个完整的答案。

参考文献:

  • LinuxFormat-2014年2月LXF180 p31,“托管存储综述”

骇客/全部/


我有一个没有根访问权限的服务器(例如,安装统一安装需要此权限)。是否可以在客户端计算机上安装不需要在服务器上安装的脚本?
Ben Kushigian

我已经看过几次在这里提到过一个名为freefilesync(sourceforge.net/projects/freefilesync)的软件。在您的清单中可能值得一提?
YoungFrog

28

Unison可能是一个不错的候选人:

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

它已经进行了2路同步。请参阅下面的更新。

我了解到,rsync无法完成的事情很少,它可能可以提供同等或更好的解决方案,但是您必须等待rsync专家提出该解决方案。

更新:是的,Unison可以同步两台以上的计算机。从他们的用户手册中

使用Unison同步两台以上的计算机

Unison被设计用于同步成对的副本。但是,可以使用它通过执行多个成对同步来使较大的计算机组保持同步。

如果需要这样做,最可靠的设置方法是将机器组织成“星型拓扑”,其中一台机器称为“轮毂”,其余机器称为“轮辐”,并且每台辐条机器都同步仅在集线器上。星形拓扑的最大优势在于,它消除了由Unison为同步的每对主机维护一个单独的归档文件这一事实而引起的混淆“虚假冲突”的可能性。


我在统一方面有一些不好的经历,由于某些原因,我会不时从其他计算机添加新文件,而不是从其他计算机添加新文件,而其他时候却可以正常工作。
2011年

1
我建议编辑a / b / c示例以遵循手册中的建议,不要创建循环。
蒂姆·阿贝尔2014年

关于您对rsync的引用。不,它不能可靠地进行双向同步。请看下面的答案,明白为什么齐声可以处理的情况下的rsync不能:stackoverflow.com/questions/4504357/...
ndemou

19

如何将文件放入SubVersion或git等版本控制系统中?

我不会对整个主目录进行版本控制,而只对少数一些重要的子目录进行版本控制。但是我正在考虑将其转换为git,因为对于这种类型的工作而言似乎更好。(快速搜索将向您发送正确的方向)。

祝好运


更新:git的一个很好的副作用是,很容易拥有特定于计算机的文件,因为您只需要为该计算机创建一个分支(默认情况下,在git中会得到该分支)。因此,您不需要在所有计算机上都具有完全相同的文件,它们只需要相似,并且在所有不同的计算机上都具有一个包含您所需内容的公用“主”分支即可。


kes。使用版本控制进行文件同步的想法确实使我的皮肤爬行。
JohnD

是的,这个想法很奇怪,但确实有用。考虑一下私有助手脚本的〜/ bin /目录,这种目录在版本控制系统中非常有用。虽然像.kde这样的目录可能在版本控制系统中表现不佳,并且将被放置在忽略列表中,以处理未处理的文件。
约翰

这是保持文件同步的好方法,您必须习惯使用“ git add”和“ git rm”来添加/删除文件的想法,但是效果很好。
2011年

我喜欢这个主意,因为我可以控制我家中垃圾中文件的哪一部分将被共享。唯一的问题是如何管理提交。也就是说,一些文件应该进入初始提交,然后反映更改以表明它们基于系统/ etc / skel。
2013年

尝试同步目录时,使用文件维护几个单独的分支真的很方便吗?当然可以,但是我不建议在此任务中使用它。通常,您可以从大多数同步工具中排除文件(按名称,文件夹等),也可以针对您所描述的内容(仅将其用于一些重要的子目录),对于原始问题而言,它并不是真正有用的。
克里斯

6

尝试执行此操作时,您的主要问题是确定如何合并更改,传播删除内容和解决冲突。这很难以完全自动化的方式完成,特别是如果您有多人使用的3台计算机设置。

如果您将用户分开,事情会变得简单得多。因为一个用户不能同时在两个地方(并因此产生冲突),所以您可以设置一个rsync作业,以便在登录时运行以“获取更改”并注销以“推送更改” ...到您的一台计算机上将是主服务器...因此,在这种粒度级别上,您将每次/ home / myuser同步,而不是整个/ home /。在短暂的闲置时间之后,将运行推脚本,这是一个额外的改进(如果人们没有注销)。

据我所知,还有许多其他可能的解决方案,但是没有一个能神奇地解决这个问题。第一步可能是考虑如何使用计算机,并提出一种适合您用户行为的同步策略。



4

这不会完全提供解决方案,但可以为您提供一个起点:

经常设置一次cron作业以使文件同步。我使用如下命令:

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

这将使用rsync仅复制所需的更改,而不是在每次运行命令时重新复制所有内容。

--stats和--progress是可选的,可能应该从脚本中排除

我的rsync_backup_excludes.conf文件的内容是:

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

Anacron会在机器开机时进行同步,避免由于停机而丢失插槽。
2014年

这会将您的整个本地根复制到远程主文件夹中。那不是OP所要求的,我也无法想象为什么有人会想要...
Cerin

4

lsyncd

Lsyncd监视本地目录树事件监视器界面(intify或fsevents)。它会汇总并合并事件几秒钟,然后生成一个(或多个)进程来同步更改。默认情况下,这是rsync。因此,Lsyncd是一种轻量级的实时镜像解决方案,相对易于安装,不需要新的文件系统或块设备,也不会影响本地文件系统的性能。

Rsync + ssh是一种高级操作配置,该配置使用SSH来操作文件和目录直接在目标上移动,而不是通过有线方式重新传输移动目标。

可以通过配置文件实现细粒度的自定义。自定义操作配置甚至可以从头开始编写,从外壳脚本到以Lua语言编写的代码都在层叠的层中,从外壳脚本到以Lua语言编写的代码都可以层叠。


2

看看Dropbox http://www.getdropbox.com/ 跨平台Win / Linux / Mac


3
谢谢,但是不。已经试过了。这不是我要找的东西。
lamcro

Dropbox非常棒,我使用其2GB的免费存储空间来存储家庭,办公室和笔记本电脑之间的链接,照片和其他非关键性数据。在这种情况下,这不是您所需要的,但是在我看来,Dropbox肯定有它的位置。
马特·科弗

2

/home从一台计算机安装到另一台计算机。自动挂载对此非常有效。


1

您可能正在寻找Ubuntu One。不幸的是,它仍处于beta阶段,我没有经验,所以我不确定它是否适合您。


我要说的是,它目前仍处于繁重的开发中-随着Ubuntu团队逐渐解决问题,每隔几天就会有更新。它可以工作,但是我不建议在Dropbox上使用它。
nagul

1

如果您还想同步配置-上面提到的工具是完全无能为力的:配置经常更改,许多日志文件会产生冲突,因此无法合并。
我的决定很简单,而且很愚蠢:)我有一个Master工作站,所有来自“〜”的文件都被复制到第二个“ Slave”文件中。当我意识到我需要修改某些内容时-我在Master上进行了修改,而Slave在同步时捕获了这些更改。

另外,某些bash脚本在这些机器上应运行不同,因此我编辑了/etc/bash.bashrc:

出口OOHOST =主

现在,脚本知道它们正在服务的主机;)


1

尝试dvcs-autosync

这基于git,使用XMPP通知相关客户端文件更改,并通过inode更改对文件更改事件做出反应。因此,它总是在文件更改后立即得到通知,以防发生冲突,它依赖于git的可靠方法。

我已经使用它一段时间了,可以通过SSH公钥替代Dropbox,它确实可以完成工作。


0

PowerFolder-同步文件,同步文件夹,远程存储,备份和私有文件共享。同步家庭和办公室PC,共享假日图片或一起处理文档。PowerFolder的安全对等技术可通过Internet或LAN运行。


0

我会考虑的解决方法:

  • 投寄箱。
    主要缺点:它不是免费提供任何合理数量的数据的。否则它会完美工作恕我直言

  • NAS服务器。将您的文件放在NAS服务器上,它们最近变得可以负担得起(大约150美元起),而且一个好文件不会消耗太多能量。从来没有同步问题。
    主要缺点:比本地副本慢


使用NAS,您仍然无法解决同步的发生方式。原则上,拥有一台NAS和两台计算机与OP询问的拥有三台计算机没有什么不同。如果您建议将需要同步的所有内容仅存储在NAS上,那么通常是不可能的-例如,考虑配置文件的同步-它们必须位于每台计算机上。
kba 2012年

0

我用SyncTwoFolders Mac和Syncback的PC -在家里第一个为我的三个苹果电脑(包括笔记本电脑),第二个对我在工作电脑。这两个程序都有各种备份和同步选项,一旦设置好预置,便轻而易举。十分简单!我确定还有其他版本的类似软件可用于Linux和Ubuntu。


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.