无论我如何到达这里,我都处于从备份恢复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 /电流之后),以验证它已产生相同的值就像已经存在的那样。它的确如此。
是以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
我不知道^ @ vs^A。但是当加载转储时,它应该告诉你原始的转速号是什么,以及新创建的转速号是什么。这两个数字匹配吗? – retracile 2009-08-19 03:31:29
是的,这些数字相符。 我实际上解决了这个问题 - 这是因为我用1.4创建了新的回购,但旧文件是用1.3创建的,所以xdelta格式不同。我再次用svn-1.3开始,现在这个问题已经解决了。 不幸的是svnadmin后来发生段错误,所以一切都不太好... – meowsqueak 2009-08-19 06:09:26