5

我正在使用多台 Linux 笔记本电脑/台式机,并希望它们“共享”主目录。

不幸的是,NFS 不是一个选项。因此,我试图使用 rsync 创建一个 bash 脚本,但我不知道该怎么做。

这是我现在的例子

`#`!/bin/bash

sync() {
  rsync -azvR --exclude-from=/home/ME/.rsync_excludes --delete -e 'ssh -ax' $1 $2
}

sync /home/ME server.domain:/home/ME
`#`sync server.domain:/home/ME /home/ME

如果我只使用一台更新服务器文件的客户端机器,我认为这会很好用。正确的?

如果我删除一个客户端中的文件怎么办?想要在另一个客户端上删除该文件(在同步之后)?

我可以为此目的使用 rsync 吗?我应该寻找其他程序吗?但希望不会……

编辑:由于这个解决方案不应该只适合我,如果该解决方案能够自动进行,我将不胜感激。

Edit2:也许必须有一个解决方案,包括以某种方式回购。Subversion、Git、Mercurial 或其他。

4

4 回答 4

9

rsync保持一个位置与主站同步是很好的。或者换句话说,将 A 镜像到 B。不过,这不是你正在做的事情。您必须从rsyncA 到 B,从 B 到 A。这带来了一系列全新的问题。如果一个文件消失了,你需要在另一边删除还是 rsync 回来?也许它在另一边被修改了;你不能检查。

反正; 解决这个问题的方法是一致的。这是一个工具(适用于 Linux、OS X、Windows、BSD,...)(具有 CLI 工具、GUI 工具,并且可以很好地安排cron在能够处理几乎任何类型的冲突或问题。那些人认为这一切都比我们在这里好得多。

或者,还有 SCM。许多人使用 SCM 来管理他们的主目录。Subversion 对此很受欢迎,但我根本不推荐它。它不仅会消耗大量空间,还会让一切变得非常缓慢,并迫使您根据与主存储库的活动连接保持同步。有替代品,如 GIT 等,但它们都有其缺点。

无论哪种方式,任何基于 SCM 的解决方案都违反了 SCM 的一个非常重要的规则:您永远不应该在其中保留大的二进制数据。SCM 不是为此而设计的。您不会将您的照片集、电影、文档、下载和类似的东西保存在 SCM 中,即使您可能希望它们保持同步或在它们上保留历史记录(尤其是图片/文档)。

重要的是要了解保持备份和保持同步之间的区别。您的备份应保存在远程/分离位置,并且可以包含您拥有的所有内容的历史记录。我个人为此推荐rdiff-backup。它完美地保留了所有内容的历史记录,使用底层rsync算法来最小化流量,访问备份位置看起来像是备份的最新状态:您可以像浏览普通文件一样浏览它。

总而言之,我建议您将unisonrdiff-backup结合使用,以获得全面的解决方案,以确保您的数据安全可靠地同步。

于 2009-04-03T16:32:32.920 回答
2

为什么不使用Subversion执行此操作?链接的文章详细介绍了作者如何使用源代码控制同步和存储历史记录(显然,您不必使用 Subversion - 还有其他选择)

于 2009-04-03T14:47:27.713 回答
1

看看你所做的,这应该可以工作......你只需要确保每个客户端在完成工作后都同步到服务器。我使用以下,我在每个目录的基础上手动调用:

function syncDown() {
    f=${1/\\/$/}/;
    rsync -acuvz --exclude 'CVS' --exclude '*.class' --exclude '.classpath' server:projects/$f $f;
    }

function syncUp() {
    f=${1/\\/$/}/;
    rsync -acuvz --exclude 'CVS' --exclude '*.class' $f server:projects/$f;
    }

如果您正在寻找无人值守的自动同步,那么您将不会得到它:您总是会遇到竞争条件,您在一个客户端上工作,但该工作会被另一个客户端的同步覆盖。

于 2009-04-03T14:50:28.687 回答
0

看起来您可能已经知道这一点,但是,为了向那些将来可能会看到这个问题的人强调这一点:

rsync只做单向同步。如果你想要双向同步,你需要使用别的东西。(cvs/ svn/ git/etc. 将是合适的“其他东西”,但如果您不需要更新历史记录,修订控制系统可能不是最佳选择。)

实际上,这意味着如果您rsync从 A 到 B,那么每次同步都会使 B 上的目录看起来与 A 上的目录完全相同 - 自上次同步以来在 B 上所做的任何更改都将丢失(排除排除和仅在指定rsync时才会删除文件的警告--delete)。这种带有权威主版本的安排,然后将其推送到其他位置在许多情况下是合适的,但任何类型的协作工作都不在其中。

于 2009-04-03T15:07:11.347 回答