我家里有三台计算机,并且希望在三台计算机/home/
之间同步文件夹树。
在三台计算机之一中修改/添加/删除的所有文件/文件夹(隐藏的文件/文件夹除外)在其他两台计算机中更新。
是否rsync
足以做到这一点?如何?
我家里有三台计算机,并且希望在三台计算机/home/
之间同步文件夹树。
在三台计算机之一中修改/添加/删除的所有文件/文件夹(隐藏的文件/文件夹除外)在其他两台计算机中更新。
是否rsync
足以做到这一点?如何?
Answers:
以下列出了可能解决此问题的事物,每种事物平衡了您必须进行不同的权衡,因此您必须做出自己的选择并自己尝试解决问题:
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/
这样可以避免被迫处理自动同步所有内容的速度/性能/磁盘空间问题。它还避免了必须维护排除列表。
当我继续尝试寻找适合自己的东西时,我将尝试使此答案保持最新,并提供有用的信息。我已经将所有其他答案中的信息汇总为一个完整的答案。
参考文献:
骇客/全部/
Unison可能是一个不错的候选人:
Unison是用于Unix和Windows的文件同步工具。它允许将文件和目录集合的两个副本存储在不同的主机(或同一主机上的不同磁盘)上,分别进行修改,然后通过将每个副本中的更改传播到另一个副本来使其更新。
它已经进行了2路同步。请参阅下面的更新。
我了解到,rsync无法完成的事情很少,它可能可以提供同等或更好的解决方案,但是您必须等待rsync专家提出该解决方案。
更新:是的,Unison可以同步两台以上的计算机。从他们的用户手册中:
使用Unison同步两台以上的计算机
Unison被设计用于同步成对的副本。但是,可以使用它通过执行多个成对同步来使较大的计算机组保持同步。如果需要这样做,最可靠的设置方法是将机器组织成“星型拓扑”,其中一台机器称为“轮毂”,其余机器称为“轮辐”,并且每台辐条机器都同步仅在集线器上。星形拓扑的最大优势在于,它消除了由Unison为同步的每对主机维护一个单独的归档文件这一事实而引起的混淆“虚假冲突”的可能性。
如何将文件放入SubVersion或git等版本控制系统中?
我不会对整个主目录进行版本控制,而只对少数一些重要的子目录进行版本控制。但是我正在考虑将其转换为git,因为对于这种类型的工作而言似乎更好。(快速搜索将向您发送正确的方向)。
祝好运
更新:git的一个很好的副作用是,很容易拥有特定于计算机的文件,因为您只需要为该计算机创建一个分支(默认情况下,在git中会得到该分支)。因此,您不需要在所有计算机上都具有完全相同的文件,它们只需要相似,并且在所有不同的计算机上都具有一个包含您所需内容的公用“主”分支即可。
尝试执行此操作时,您的主要问题是确定如何合并更改,传播删除内容和解决冲突。这很难以完全自动化的方式完成,特别是如果您有多人使用的3台计算机设置。
如果您将用户分开,事情会变得简单得多。因为一个用户不能同时在两个地方(并因此产生冲突),所以您可以设置一个rsync作业,以便在登录时运行以“获取更改”并注销以“推送更改” ...到您的一台计算机上将是主服务器...因此,在这种粒度级别上,您将每次/ home / myuser同步,而不是整个/ home /。在短暂的闲置时间之后,将运行推脚本,这是一个额外的改进(如果人们没有注销)。
据我所知,还有许多其他可能的解决方案,但是没有一个能神奇地解决这个问题。第一步可能是考虑如何使用计算机,并提出一种适合您用户行为的同步策略。
我认为您可以通过NFS挂载公用主文件夹来实现您想要的更好的目标。查看本文http://www.linuxjournal.com/article/4880
这不会完全提供解决方案,但可以为您提供一个起点:
经常设置一次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/*
Lsyncd监视本地目录树事件监视器界面(intify或fsevents)。它会汇总并合并事件几秒钟,然后生成一个(或多个)进程来同步更改。默认情况下,这是rsync。因此,Lsyncd是一种轻量级的实时镜像解决方案,相对易于安装,不需要新的文件系统或块设备,也不会影响本地文件系统的性能。
Rsync + ssh是一种高级操作配置,该配置使用SSH来操作文件和目录直接在目标上移动,而不是通过有线方式重新传输移动目标。
可以通过配置文件实现细粒度的自定义。自定义操作配置甚至可以从头开始编写,从外壳脚本到以Lua语言编写的代码都在层叠的层中,从外壳脚本到以Lua语言编写的代码都可以层叠。
看看Dropbox http://www.getdropbox.com/ 跨平台Win / Linux / Mac
您可能正在寻找Ubuntu One。不幸的是,它仍处于beta阶段,我没有经验,所以我不确定它是否适合您。
这基于git,使用XMPP通知相关客户端文件更改,并通过inode更改对文件更改事件做出反应。因此,它总是在文件更改后立即得到通知,以防发生冲突,它依赖于git的可靠方法。
我已经使用它一段时间了,可以通过SSH公钥替代Dropbox,它确实可以完成工作。
PowerFolder-同步文件,同步文件夹,远程存储,备份和私有文件共享。同步家庭和办公室PC,共享假日图片或一起处理文档。PowerFolder的安全对等技术可通过Internet或LAN运行。
我用SyncTwoFolders Mac和Syncback的PC -在家里第一个为我的三个苹果电脑(包括笔记本电脑),第二个对我在工作电脑。这两个程序都有各种备份和同步选项,一旦设置好预置,便轻而易举。十分简单!我确定还有其他版本的类似软件可用于Linux和Ubuntu。
您可以使用osync之类的同步脚本,该脚本可以传播已删除的文件并仅更新已修改的文件。 http://www.netpower.fr/osync osync基于rsync,但可以处理ssh在本地文件夹或远程文件夹之间的许多同步方案。