无论我是如何到达这里的,我现在需要从备份中恢复一个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],然后继续。但是,当我尝试验证时,我收到了以下错误:
这是我了解到的情况:
[1] 我使用此脚本更新了db/current: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py 我在一些其他SVN存储库上进行了测试(在禁用对db/current的写入之后!),以验证它产生的值与已经存在的值相同。它确实如此。
因此,我能够创建一个已知好的提交列表和丢失的提交列表。
原始存储库也受到了破坏,但其中许多文件得以保存。不幸的是,整个存储库都是损坏的。
所以我很幸运,对于这些丢失的修订版本,我拥有来自原始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,以防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文件是否正常 - 它们可能会损坏,但损坏的数量很少,不太可能(但有可能)。
[1] 我使用此脚本更新了db/current: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py 我在一些其他SVN存储库上进行了测试(在禁用对db/current的写入之后!),以验证它产生的值与已经存在的值相同。它确实如此。