这是来自 stackoverflow 的转帖,因为我发现我可能会在这里找到更合格的受众
现状
我有一个相当大的 Subversion 存储库,我想高效地备份它。存储库大小约为 6 GB,并且还在增长。一些大型提交的大小约为 500 到 1GB。
我正在尝试通过互联网上行链路将该存储库备份到异地位置。
解释其规模
您可能想知道,各个站点的整个生产环境(配置文件、EXE、数据文件)都保存在这个存储库中,以便我们可以回滚到现有的工作版本并跟踪生产设置的更改。代码保存在不同的存储库中。
如何
这是我实际在做的事情:
- 使用以下方式将存储库备份到服务器上的工作文件夹“svnadmin 热复制 SRCDIR TGTDIR”
- 使用以下方法加密并压缩该存储库“rsyncrypto -r SRCPATH DSTPATH KEYSPATH 证书”
- 使用以下方式将加密版本备份到异地位置“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
可能是答案。