2009-08-19 152 views
4

无论我如何到达这里,我都处于从备份恢复SVN存储库的位置。不幸的是,备份稍有损坏,超过19000次修订,大约有80次丢失。备份是一个bzip2文件,我可以使用bzip2recover来恢复大约99%的块。这些是“已知的好”,因为他们成功解压。svn恢复 - 恢复个别修订版

因此,我能够创建一个已知好的提交列表,并丢失了提交。

原始存储库也损坏,但许多文件存活。不幸的是,作为一个整体的知识库被打破了。

所以我很幸运地从原来的db /转速和db /目录的revprops这些丢失的版本的文件。可能性是备份bz2文件的损坏与db/revs文件的损坏不一致。

我已经重建一切都交给r13892,但我知道,r13893是腐败的,所以我没有为r13893转储。我确实有来自原始存储库的文件db/revs/13893和db/revprops/13893。

我使用svn-1.4创建并重建了存储库,但是我升级到了svn-1.6,以便我可以使用选择性的svnadmin verify命令(在单个或一系列提交中)。

我想也许我可以将这两个文件放入新的存储库,更新db/current [1],然后继续。但是,当我尝试验证我得到这个错误:

$ svnadmin verify new-svn 
* Verified revision 1. 
... 
* Verified revision 13889. 
* Verified revision 13890. 
* Verified revision 13891. 
* Verified revision 13892. 
svnadmin: Can't read file 'svn/db/revs/13214': End of file found 

所以这显然没有奏效。不确定13214与什么有关。

我降级到svn-1.4.6,以防1.6中出现任何奇怪的情况。不幸的是我得到了相同的结果 - 修订13893未验证:

... 
* Verified revision 13891. 
* Verified revision 13892. svnadmin: Can't read file 'svn/db/revs/13214': 
End of file found 

因此,这里是我所知道的:

  • 我知道,修订1到13892是100%正确的(除非一些非常不可能的机会一个bz2块已解压错误,但通过校验和)。
  • 我不知道原始SVN存储库中的r13893文件是否正常 - 它们可能已损坏,但损坏的数量太小,不太可能(但可能)。

没有人有任何想法如何,我也许能填补这个空洞?请注意,我拥有100%自信的r13894,因此如果我能够插入r13893,则可以继续进行其他恢复。

[1]我更新分贝/电流与此脚本: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py

我测试此在其他一些SVN库(!禁用写入到DB /电流之后),以验证它已产生相同的值就像已经存在的那样。它的确如此。

回答

2

对此:

svnadmin: Can't read file 'svn/db/revs/13214': End of file found 

我怀疑引用从转13214东西转13893(如文件副本,或跳过-REV的东西,什么的)。

在执行svn加载时,新修订版是否与原始修订版相匹配?我记得遇到一个情况,我的转储引用了rev 0,并且它被加载为rev 1.如果类似的情况发生在这里,对rev 13214的反向引用将会被关闭。

您可以尝试使用repo数据库中的文件以转储格式创建丢失的转储。不幸的是,我不知道有一个工具可以做到这一点。但我会建议看看SvnDumpTool;它能够以许多有用的方式操作svn转储。

披露:我已经作出了贡献,在过去

+0

是以svndumptool,在r13893的顶部,它说: DELTA 13214 0 12567271 因此,它是对13214顶部的三角形,这也解释了其中自带从。 有一两件事我注意到的是,我的重构二进制承诺(以dB /转速)开始与此: SVN^A^@^@<86>^@ 然而,我原来r13893犯这个样子的: SVN^@^@<86>^@ 请注意,在旧提交中,“SVN”之后的第一个字节是^ @(00),但新提交中的^ A(01)。这是一个xdelta版本号吗?也许我需要重建1到13892与使用相同的xdelta格式的颠覆版本? – meowsqueak 2009-08-19 03:02:10

+0

我不知道^ @ vs^A。但是当加载转储时,它应该告诉你原始的转速号是什么,以及新创建的转速号是什么。这两个数字匹配吗? – retracile 2009-08-19 03:31:29

+1

是的,这些数字相符。 我实际上解决了这个问题 - 这是因为我用1.4创建了新的回购,但旧文件是用1.3创建的,所以xdelta格式不同。我再次用svn-1.3开始,现在这个问题已经解决了。 不幸的是svnadmin后来发生段错误,所以一切都不太好... – meowsqueak 2009-08-19 06:09:26