【问题标题】:RSync backup of Subversion repository with Rsyncrypto使用 Rsyncrypto 对 Subversion 存储库进行 RSync 备份
【发布时间】:2010-09-22 06:01:10
【问题描述】:

情况

我有一个相当大的 Subversion 存储库,我正在尝试有效地备份它。存储库大小约为 6 GB,并且还在增长。一些大型提交的大小约为 500 到 1GB。

我正在尝试通过 Internet 上行链路将此存储库备份到异地位置。

解释它的大小

无论谁想知道,我们都会在这个存储库中保留各种站点(配置文件、EXE、数据文件)的整个生产环境,以便我们可以回滚到现有的工作版本并跟踪对生产设置的更改。代码保存在不同的存储库中。

方法

这是我实际在做的事情:

  1. 使用 "svnadmin hotcopy SRCDIR TGTDIR" 将存储库备份到服务器上的工作文件夹
  2. 使用“rsyncrypto -r SRCPATH DSTPATH KEYSPATH CERTIFICATE”加密和压缩该存储库
  3. 使用 "rsync -Crtv" 将该加密版本备份到异地位置(实际上是 cwRsync,因为我在 Windows 上运行)

问题

首先我必须说它有效,尽管它仍然存在潜在问题。

问题在于我期望每次进程运行时,只会复制 修订文件/数据([repos]/db/revs/0/. ..) 因此在进行大量提交时只需要带宽和时间。但是,相反:

  • 如果我只运行第 3 步多次,rsync 会正常运行,并且不会复制任何内容,因为没有任何变化。
  • 如果我多次只运行步骤#2 和#3,rsync 也表现良好。 envrypted 版本每次都是一样的,rsync 不需要传输任何东西。
  • 但是,似乎每次我运行所有三个步骤(对存储库进行了新的提交)时,整个存储库都会全部重新上传。因此,一开始就违背了使用 rsync 的全部目的。

就好像每次我制作热拷贝时 [repos]/db/revs/0/... 中的文件都会发生变化。

问题

这是来自“svnadmin hotcopy”的预期行为,即 [repos]/db/revs/0/... 正在从一个 hotcopy 更改为另一个 hotcopy?

我可以使用任何建议或选项来使此热拷贝rsync 友好 或说rsyncable

我不太确定在整个存储库上使用“svnadmin dump”会产生一个“rsyncable”文件

【问题讨论】:

  • 您有什么理由不使用svnsync 代替吗?只需将备份本身作为存储库(只有 svnsync 可以写入)。 Svnadmin hotcopy 将重新创建所有文件恕我直言-因此它们会获得新的时间戳,并且 rsync 会将它们视为新文件。
  • 新的时间戳不需要 rsync 来传输内容。这就是 rsync 的目的!它将计算校验和并仅传输时间戳以在另一端“修复”它。

标签: svn backup rsync


【解决方案1】:

我不知道 Subversion 如何存储其备份文件的详细信息,所以我不知道来自 r5678 的热拷贝是否应该与来自 r6789 的热拷贝块相同(这是 rsync 需要做的有效的副本)。我们在备份我们的开发存储库时所做的是每周进行一次完整备份(热复制然后备份整个但许多演出),并使用以下命令每天进行增量备份:

svnadmin dump /path/to/repos -r latest-backed-up-rev:latest-repos-rev --incremental --deltas

--incremental 选项的意思是“这必须应用到版本为 latest-backed-up-rev 的存储库”,而--deltas 选项使用的二进制格式不会比存储库中的实际更改大多少大小本身。如果您将步骤 1 替换为仅添加一个小文件的转储,那么您的 rsync 将正常运行。

我有一个 shell 脚本,可以自动查找备份和最新版本,并根据需要创建正确的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多