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

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

这是来自 stackoverflow 的转帖,因为我发现我可能会在这里找到更合格的受众

现状

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

我正在尝试通过互联网上行链路将该存储库备份到异地位置。

解释其规模

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

如何

这是我实际在做的事情:

  1. 使用以下方式将存储库备份到服务器上的工作文件夹“svnadmin 热复制 SRCDIR TGTDIR”
  2. 使用以下方法加密并压缩该存储库“rsyncrypto -r SRCPATH DSTPATH KEYSPATH 证书”
  3. 使用以下方式将加密版本备份到异地位置“rsync-Crtv”(实际上是 cwRsync 因为我在 Windows 上运行)

问题

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

问题在于,我原本期望每次运行该过程时,只有新的修订文件/数据将被复制 ([repos]/db/revs/0/...),因此在进行大量提交时仅需要带宽和时间。然而,相反:

  • 如果我仅运行步骤#3多次,rsync 就会按应有的方式运行,并且不会复制任何内容,因为没有任何变化。
  • 如果我多次运行步骤 #2 和 #3,rsync 也会表现良好。加密版本每次都相同,rsync 无需传输任何内容。
  • 但似乎每次我跑步全部三个步骤(对存储库进行了新的提交)整个存储库正在完整重新上传。因此,首先就违背了使用 rsync 的整个目的。

就好像每次我进行热复制时,[repos]/db/revs/0/... 中的文件都在发生变化。

问题

这是“svnadmin hotcopy”的预期行为吗?即[repos]/db/revs/0/... 从一个热复制更改为另一个热复制?

我可以使用任何建议或选项来制作此热副本rsync 友好或者说可同步

我不太确定对整个存储库使用“svnadmin dump”是否会产生“rsyncable” 文件

答案1

当您加密/压缩存储库时,对底层数据(存储库)的任何小更改都会传播到整个加密/压缩文件中。因此,一个字节的更改可以传播到整个加密/压缩数据集。因此,从 rsync 的角度来看,一切都发生了变化。

答案2

文件db/revs/没有改变,但它们的时间戳会改变。 --size-only可能是答案。

相关内容