使用Rsyncrypto对Subversion存储库进行RSync备份

时间:2010-09-08 11:33:39

标签: svn backup rsync

情况

我有一个非常大的Subversion存储库,我试图有效地备份。存储库大小约为6 GB且不断增长。一些大型提交的大小约为500到1GB。

我正在尝试通过互联网上传链接将此存储库备份到场外位置。

解释它的庞大规模

  

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

如何

以下是我实际做的事情:

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

    首先,我必须说它有效,但它仍有潜在的问题。

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

    • 如果我多次只运行第3步,则rsync会按原样运行,并且没有任何内容被复制,因为没有任何更改。
    • 如果我只跑步#2& #3多次,rsync也表现良好。每次都是envrypted版本,rsync不需要传输任何东西。
    • 但是,似乎每次我运行所有三个步骤(已经对存储库进行了新的提交),整个存储库正在完全重新上传。因此,首先要破坏使用rsync的整个目的。

    就像每次进行热门复印时,[repos] / db / revs / 0 / ...中的文件都在变化。

    问题

    这是“svnadmin hotcopy”的预期行为,[repos] / db / revs / 0 / ...是否正在从一个hotcopy变为另一个?

    我可以使用任何建议或选项使此热门作品 rsync友好或说 rsyncable

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

1 个答案:

答案 0 :(得分:2)

我不知道Subversion如何存储其备份文件的细节,所以我不知道r5678的hotcopy是否应该与r6789的hotcopy相同(这是rsync需要做的事情)一个有效的副本)。我们在备份开发存储库时所做的是每周进行一次完整备份(hotcopy然后备份整个gig),并使用以下命令每天进行增量备份:

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

--incremental选项意味着“这必须应用于版本latest-backed-up-rev的存储库”,而--deltas选项使用的二进制格式并不比存储库中的实际更改大得多大小本身。如果将步骤1替换为仅添加一个小文件的转储,那么您的rsync将表现得很好。

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