2009-08-19 153 views
4

無論我如何到達這裏,我都處於從備份恢復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 /電流之後),以驗證它已產生相同的值就像已經存在的那樣。它的確如此。

回答

2

對此:

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

我懷疑引用從轉13214東西轉13893(如文件副本,或跳過-REV的東西,什麼的)。

在執行svn加載時,新修訂版是否與原始修訂版相匹配?我記得遇到一個情況,我的轉儲引用了rev 0,並且它被加載爲rev 1.如果類似的情況發生在這裏,對rev 13214的反向引用將會被關閉。

您可以嘗試使用repo數據庫中的文件以轉儲格式創建丟失的轉儲。不幸的是,我不知道有一個工具可以做到這一點。但我會建議看看SvnDumpTool;它能夠以許多有用的方式操作svn轉儲。

披露:我已經作出了貢獻,在過去

+0

是以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

+0

我不知道^ @ vs^A。但是當加載轉儲時,它應該告訴你原始的轉速號是什麼,以及新創建的轉速號是什麼。這兩個數字匹配嗎? – retracile 2009-08-19 03:31:29

+1

是的,這些數字相符。 我實際上解決了這個問題 - 這是因爲我用1.4創建了新的回購,但舊文件是用1.3創建的,所以xdelta格式不同。我再次用svn-1.3開始,現在這個問題已經解決了。 不幸的是svnadmin後來發生段錯誤,所以一切都不太好... – meowsqueak 2009-08-19 06:09:26