不管我是如何到达这里的,我都处于从备份中恢复 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 以防 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] 我用这个脚本更新了 db/current:http: //svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py
我在其他一些 SVN 存储库上对此进行了测试(在禁用对 db/current 的写入之后!)以验证它产生的值与已经存在的值相同。确实如此。