【发布时间】:2010-09-22 06:01:10
【问题描述】:
情况
我有一个相当大的 Subversion 存储库,我正在尝试有效地备份它。存储库大小约为 6 GB,并且还在增长。一些大型提交的大小约为 500 到 1GB。
我正在尝试通过 Internet 上行链路将此存储库备份到异地位置。
解释它的大小
无论谁想知道,我们都会在这个存储库中保留各种站点(配置文件、EXE、数据文件)的整个生产环境,以便我们可以回滚到现有的工作版本并跟踪对生产设置的更改。代码保存在不同的存储库中。
方法
这是我实际在做的事情:
- 使用 "svnadmin hotcopy SRCDIR TGTDIR" 将存储库备份到服务器上的工作文件夹
- 使用“rsyncrypto -r SRCPATH DSTPATH KEYSPATH CERTIFICATE”加密和压缩该存储库
- 使用 "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 的目的!它将计算校验和并仅传输时间戳以在另一端“修复”它。