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

rsync足以做到这一点吗?以及如何?

评论

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

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

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

#1 楼

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


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 Sync(免费)-基于BitTorrent的对等文件同步。我对此不太了解,因为我不会使用它,因为它不是开源的,并且不信任它将数据保存在局域网中,请随时使用更好的信息/真实的经验来编辑此答案。
SyncThing-作为BitTorrent Sync的开源替代品而开发。目前,它缺少BitTorrent Sync的某些高级功能,例如不受信任的同级。它正在积极开发中。
商业托管服务,例如Dropbox,Ubuntu One,Google Drive,Apple iCloud都快速且便宜且方便,但是它们都需要将所有数据与公司信任,并且需要相当快速的互联网连接。
Git / subversion-直接使用源代码控制系统。完全手动,对于一些熟悉这些系统的用户来说,将它们用作编程工具可能是一种有点复杂但很流行的方法。
CloudFS-同步整个文件系统,基于集群技术
NFS挂载-基本上您的房屋位于一台计算机上,并且您可以通过网络访问它,这对随身携带的笔记本电脑不利。更多信息:http://www.linuxjournal.com/article/4880


决定决策时要考虑的因素:


中央服务器-有些解决方案要求一台机器始终处于开机状态(或至少在需要同步时),以便其他机器与之同步。这可能是您现有的计算机之一,也可能是单独的计算机(例如NAS)。当心增加电费的情况。
自动/手动/预定-避免解决冲突的最佳方法是在多处机器上进行更改时,每台机器上都应有一个程序来监视并立即进行同步,这样,您减少了使用多个版本的机会。使用手动过程时,您总是要记住要运行同步。
远程访问-您是否要从LAN(又称为家庭)中进行同步,请考虑一下这对安全性的影响。
安全-您是否需要进行同步?数据是否使您的网络加密,机器之间传输的安全性如何。如果有人在移动中捕获了您的数据,后来又发现加密存在缺陷怎么办?谁控制保存数据的服务器,数据是否加密,您可以信任任何第三方吗?您是否需要在路由器上戳孔才能进行远程访问。 “已删除”文件和相关元数据在同步设备和中央服务器上保留多长时间。您要在加密存储和未加密存储之间进行同步吗?
移动大文件夹-我尝试过的所有解决方案都存在一个问题,即当您移动/重命名文件或文件夹时,同步无法理解并重新上传一次作为新副本,然后删除旧副本。
磁盘容量
备份-同步不是备份。错误地删除重要文件,以上许多内容都会愉快地删除您所有其他副本。我建议您阅读Mat Honan关于被黑客入侵的文章,以便很好地说明如果将所有数字鸡蛋放在一个数字篮子中会发生什么。


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

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

参考文献:


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

hacking / all /

评论


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

–本·库什吉安
15年8月2日在19:17

我已经看到一个叫做freefilesync(sourceforge.net/projects/freefilesync)的软件在这里和那里多次提到。在您的清单中可能值得一提?

– YoungFrog
15年8月3日在6:54

#2 楼

Unison可能是一个不错的选择:


Unison是用于Unix和Windows的文件同步工具
。它允许将文件和目录的两个副本的
复制副本存储在不同的
主机(或同一
主机上的不同磁盘)上,分别进行修改,然后

它已经进行了2向同步。请参阅更新波纹管。

我了解到rsync无法完成的事情很少,它可以提供同等或更佳的解决方案,但您必须等待rsync专家来谈谈

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


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

如果需要执行此操作,最可靠的设置方法是组织计算机进入“星形拓扑”,其中一台机器称为“轮毂”,其余机器称为“轮辐”,并且每台辐条机器仅与轮毂同步。星形拓扑的最大优势在于,它消除了因Unison为同步的每对主机维护一个单独的存档而引起的混淆“虚假冲突”的可能性。


评论


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

– jhcaiced
11年11月29日在20:48

我建议编辑a / b / c示例以遵循手册中的建议,不要创建循环。

–蒂姆·阿贝尔
2014年1月18日在16:47

关于您对rsync的引用。不,它不能可靠地进行双向同步。查看以下答案以查看为什么统一能处理rsync无法处理的情况:stackoverflow.com/questions/4504357/…

– ndemou
2015年10月7日,11:02

#3 楼

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

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

祝您好运


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

评论


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

– JohnD
2011年11月12日在1:59

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

–约翰
2011年11月12日在8:04



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

– jhcaiced
2011年11月29日在20:51

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

–ony
2013年9月28日6:46



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

–克里斯
15年8月3日,9:16

#4 楼

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

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

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

#5 楼

我认为您可以通过NFS挂载公用主文件夹来实现您想要的更好的东西。查看本文http://www.linuxjournal.com/article/4880

#6 楼

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

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

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年1月18日在18:06

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

–塞林
2015年10月31日在3:02



#7 楼

查看lsyncd


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

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

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


#8 楼

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

评论


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

–lamcro
09年8月28日在18:46

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

–马特·科弗(Matt Cofer)
09年8月28日在18:59

#9 楼

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

#10 楼

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

评论


我要说的是,它目前仍在繁重的开发中-每隔几天就会有更新,因为Ubuntu团队正在解决这些问题。它可以工作,但我不建议在Dropbox上使用它。

–user4358
09年9月1日于20:59

#11 楼

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

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

export OOHOST=Master


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

#12 楼

尝试dvcs-autosync。

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

我已经使用了一段时间了,可以通过SSH公钥替换它作为Dropbox它确实可以胜任。

#13 楼

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

#14 楼

我会考虑的解决方法:


Dropbox。主要缺点:对于任何合理数量的数据,它不是免费的。否则,它可以在IMHO
NAS服务器上正常运行。将您的文件放在NAS服务器上,它们最近变得可以负担得起(大约150美元起),而且一个好文件不会消耗太多能量。从来没有同步问题。
主要缺点:比本地副本慢


评论


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

–kba
2012年6月22日在16:43



#15 楼

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

#16 楼

您可以使用osync之类的同步脚本,该脚本可以传播已删除的文件并仅更新已修改的文件。
http://www.netpower.fr/osync
osync基于rsync,但可以处理很多同步情况在本地文件夹或通过ssh的远程文件夹之间。