2009-08-28 18:10:40 +0000 2009-08-28 18:10:40 +0000
121
121

多台电脑之间如何同步主文件夹?

我家里有三台电脑,想在三台电脑之间同步/home/文件夹树。
在三台电脑中的一台电脑上修改/添加/删除的任何文件/文件夹(隐藏的除外)都会在另外两台电脑上更新。

rsync够不够,怎么做?

答案 (14)

97
97
97
2014-01-18 17:52:37 +0000

这里列举了一些可能解决这个问题的东西,每一个平衡你必须做出不同的权衡,所以你必须做出自己的选择,自己去尝试。

  • Unison - 正如其他人提到的,这是手动运行的,但非常快速,可靠和有效。需要两台机器同时同步开启。它有一个很好的用户界面,允许你处理几乎不可避免的冲突,并正确跟踪和传播删除。图形化的应用程序/软件包叫做unison-gtk。

  • OwnCloud - 在你自己的服务器上运行的云存储。你需要一台机器离开上。需要一个合理的设置量。运行一个完整的Apache 2 webserver和一个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,苹果iCloud都是快速,便宜,方便,但他们都需要信任一个公司与你所有的数据,并需要一个相当快的互联网连接。

  • Git / subversion - 直接使用源码控制系统。完全手工操作,可能会有点复杂,但在一些用户中很受欢迎,因为他们把这些系统当作编程工具来使用,所以熟悉这些系统。

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

  • NFS挂载 - 基本上你的家庭生活在一台机器上,你通过网络访问它,对于你随身携带的笔记本电脑没有好处。更多信息。http://www.linuxjournal.com/article/4880


在做决定时需要考虑的因素:

  • 中央服务器 - 有些解决方案需要一台机器一直开着(或者至少在你需要同步的时候),以便其他机器同步。这可能是您现有的一台机器,或者是一台单独的机器,如NAS。注意增加的电费。

  • 自动/手动/计划 - 避免解决冲突的最好方法是在每台机器上都有一个程序,观察变化并立即同步,这样可以减少最终出现多个版本的机会。如果是手动进程,你总是要记得运行同步。

  • 远程访问 - 您是否想在您的局域网(也就是家里)以外的地方进行同步,考虑一下这其中的安全问题。

  • 安全性 - 您的数据是否经过加密后离开网络,机器之间的传输是否安全。如果有人在移动中捕获你的数据,后来发现加密有缺陷怎么办?谁控制着保存你数据的服务器,数据是否经过加密,你能相信任何第三方吗?你是否要在路由器上打洞才能远程访问。被 “删除 "的文件和相关的元数据会在同步设备和中央服务器上保留多长时间。您是否在加密和未加密的存储之间进行同步?

  • 移动大型文件夹 - 我尝试过的解决方案都有一个问题,即当你移动/重命名文件或文件夹时,同步不理解这一点,并将其作为新的文件或文件夹重新上传,然后删除旧副本。请帮助我们,在上面任何能够处理这个问题的解决方案上做个记号(我怀疑基于git的解决方案能够处理这个问题,因为git使用的是基于内容的寻址,所以不会受到这个问题的影响,但我没有使用过,所以不确定)。

  • 磁盘容量

  • 备份 - 同步不是备份。误删一个重要的文件,上面的很多文件会欢快地删除你其他所有的副本。我推荐大家阅读 Mat Honan 的一篇关于被黑客攻击的文章 ,可以很好的了解如果你把所有的数字鸡蛋放在一个数字篮子里会发生什么,可以这么说。


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

当我继续尝试并找到适合我个人的东西时,我会尝试用有用的信息来更新这个答案。我已经将所有其他答案中的信息汇总成一个完整的答案。

参考文献。

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

hacking/all/。

19
19
19
2009-08-29 22:07:36 +0000

不如把你的文件放在一个版本控制系统里,比如SubVersion或者git?

我并没有对我的整个主目录进行版本控制,只是对一些重要的子目录进行了版本控制。但我正在考虑转换到git,因为它似乎更适合这种类型的工作。 快速搜索会让你找到正确的方向)。

祝你好运


更新 。使用 git 的一个很好的副作用是,可以很容易地拥有特定计算机的文件,因为你只需要为那台计算机建立一个分支(在 git 中,默认情况下你会得到这个分支)。所以你不需要在所有的电脑上都有完全相同的文件,只需要相似的文件,并且有一个共同的 “主 "分支,在所有不同的电脑上都有你想要的东西。

6
6
6
2009-08-29 09:43:00 +0000

当你试图这样做的时候,你的主要问题是决定如何合并更改、传播删除和解决冲突。这很难用一种完全自动化的方式来完成,尤其是当你有一台3台电脑,由多人使用时。

如果你把用户分开,事情就变得简单多了。因为一个用户不能同时在两个地方(因此会产生冲突),你可以设置一个rsync作业,在登录时运行 “获取更改",注销时 "推送更改”……到你的一台电脑上,这台电脑就是主电脑……所以在这个级别的粒度上,你每次都会同步/home/myuser,而不是整个/home/。一个额外的改进(在人们没有注销的情况下)是在短时间不活动后运行推送脚本。

还有很多其他潜在的解决方案,但就我所知,没有一个能神奇地解决这个问题。第一步可能是思考你是如何使用机器的,并提出一个适合你的用户行为的同步策略。

5
5
5
2010-06-11 20:05:12 +0000

我想你可以通过NFS挂载一个普通的home文件夹来更好的实现你想要的。可以看看这篇文章 http://www.linuxjournal.com/article/4880

4
4
4
2010-06-11 21:20:04 +0000

查看 lsyncd

Lsyncd 监视本地目录树事件监控界面(inotify 或 fsevents)。它聚合和合并事件几秒钟,然后生成一个(或多个)进程来同步这些变化。默认情况下是rsync。因此,Lsyncd 是一个轻量级的实时镜像解决方案,它比较容易安装,不需要新的文件系统或块设备,也不会影响本地文件系统的性能。

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

可以通过配置文件实现精细的自定义。自定义动作配置甚至可以从头开始写,从shell脚本到用Lua语言编写的代码.层级从shell脚本到用Lua语言编写的代码。

4
4
4
2009-08-28 18:34:44 +0000

这并不能完全提供一个解决方案,但它会给你一个开始。

每隔一段时间设置一个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是可选的,可能应该从你的脚本中排除掉

我的rsyncbackup/excludes.conf文件的内容是

dev/*
proc/*
lost+found/*
mnt/*
sys/*
2
2
2
2011-08-24 23:57:12 +0000

将一台电脑上的/home挂载到另外两台电脑上。自动挂载的效果很好。

2
2
2
2009-08-28 18:41:17 +0000

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

1
1
1
2009-08-29 11:11:32 +0000

Ubuntu One可能是你要找的东西。不幸的是,它还在测试阶段,我没有经验,所以我不确定它是否适合你。

1
1
1
2009-08-29 21:38:15 +0000

如果你也想同步配置–上面提到的工具是完全无能为力的:配置经常会改变,很多日志文件会产生冲突,所以无法合并。
我的决定很简单,也很愚蠢:) 我有一个主工作站,所有的文件从"~“复制到第二个 "Slave "工作站。当我意识到我需要修改一些东西的时候,我就在主站上做,而从站则同步捕捉这些变化。

另外,一些bash脚本在这些机器上的运行应该是不同的,所以我编辑了我的/etc/bash.bashrc:

export OOHOST=Master

现在,脚本知道他们在为哪个主机服务了;)

1
1
1
2012-03-22 11:47:19 +0000

试试 dvcs-autosync

这是基于git的,使用XMPP来通知连接的客户端文件变化,并通过inode变化对文件变化事件做出反应。所以它总是在文件变化后马上得到通知,如果发生冲突,它依靠的是git的成熟方法。

我已经用它通过SSH公钥替代Dropbox用了一段时间了,它真的很好用。

0
0
0
2011-03-02 14:02:40 +0000

我会考虑的变通方法。

  • Dropbox。
    主要缺点:对于任何合理的数据量,它都不是免费的。否则它的工作完美无瑕IMHO

  • NAS服务器。把你的文件放在NAS服务器上,他们最近变得相当实惠(从150美元左右),而且一个好的服务器不会消耗太多的能源。从来没有同步问题。
    主要缺点:比本地拷贝慢。

0
0
0
2011-03-02 13:47:07 +0000

我使用SyncTwoFolders为Mac和Syncback为PC - 第一个为我的三个Mac在家里(包括笔记本电脑),和第二个为我的PC在工作。这两个程序都有各种备份和同步选项,一旦预先设置好了,这就轻而易举了。简单易行!我相信还有其他版本。我相信在Linux和Ubuntu上还有其他版本的类似软件。

0
0
0
2013-08-18 14:28:59 +0000

你可以使用像osync这样的同步脚本,它可以传播被删除的文件,并且只更新被修改的文件 http://www.netpower.fr/osync osync是基于rsync的,但是可以处理很多本地文件夹之间或者远程文件夹之间通过ssh进行同步的情况。