恢复svn - 恢复个别修订

时间:2009-08-19 02:39:44

标签: svn backup recovery rebuild

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

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

原始存储库也已损坏,但许多文件仍然存在。不幸的是,存储库作为一个整体被破坏了。

所以我很幸运能够获得原始db / revs和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,以防万一发生任何奇怪的事情。不幸的是我得到了相同的结果 - 修订版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]我用这个脚本更新了db / current: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py

我在其他一些SVN存储库上测试了这个(在禁用对db / current的写入之后!)以验证它是否产生了与那里已存在的值相同的值。确实如此。

1 个答案:

答案 0 :(得分:2)

关于这个:

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

我怀疑rev 13893引用了rev 13214中的内容(例如文件副本或skip-rev内容等)。

在执行svn加载时,新版本是否与原始版本匹配?我记得碰到一个案例,我的转储引用了转速0,它被加载为转1.如果这样的事情发生在这里,转向13214的反向引用将被关闭。

您可以尝试使用repo db中的文件以转储格式创建缺少的rev。不幸的是,我不知道会有这样的工具。但我建议看看SvnDumpTool;它能够以很多有用的方式操作svn转储。

披露:我过去曾为svndumptool做出贡献