無論我如何到達這裏,我都處於從備份恢復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