2011-04-04 14 views
36

मेरे घर सर्वर में हार्ड ड्राइव विफलता थी।मैं एक टूटी हुई संशोधन के साथ एक संग्रह को कैसे ठीक करूं?

एक बार मुझे एहसास हुआ कि डिस्क जा रही है, मैंने लॉग इन किया और मेरी रिपोजिटरी की एक सीधी प्रतिलिपि बनाई, जिसमें कई परियोजनाएं शामिल हैं।

हालांकि, बाद से डिस्क असफल रहा था, संशोधन में से एक टूट गया है:

$ svnadmin verify master/ 
[...] 
* Verified revision 820. 
* Verified revision 821. 
* Verified revision 822. 
svnadmin: No such revision 823 

master/db/revs/ और master/db/revprops/ निर्देशिका है, वास्तव में, किसी भी फाइल 823 कहा जाता है को शामिल नहीं है, इसलिए इस संशोधन याद आ रही है (टूटी हुई) । master/ रिपॉजिटरी # 9 47 में संशोधन के लिए बाद में संशोधन (जो मैं वास्तव में रखना चाहता हूं!) में हैं।

आज मैंने अपना सबसे हालिया ऑफ़-साइट बैकअप (!) लाया, जो खुशी से इस संशोधन को शामिल करता है। मैं लापता संशोधन को ठीक करके master/ में टूटी हुई भंडार को "ठीक" करना चाहता हूं, क्योंकि यह बैकअप से अधिक हालिया है।

मैं की नकल की एक master/ में के रूप में ही संस्करण के साथ एक नव निर्मित भंडार में डंप फ़ाइल लोड करने के लिए सुनिश्चित किया, तो यह सभी पुराने "रैखिक" है प्रारूप 3.

मैं स्पष्ट करने की कोशिश की करने के लिए बस बैकअप के db/revs/ और db/revprops/ निर्देशिकाओं से फ़ाइल 823 कॉपी:

$ cp repos/db/revs/0/823 master/db/revs/ 
$ cp repos/db/revprops/0/823 master/db/revprops/ 

निर्देशिका repos/ भंडार है कि बैकअप डंप से लोड किया गया है शामिल हैं। अब मुझे मिलता है:

$ svnadmin verify master/ 
[...] 
* Verified revision 821. 
* Verified revision 822. 
svnadmin: /build/buildd/subversion-1.6.12dfsg/subversion/libsvn_delta/compose_delta.c:165: search_offset_index: Assertion `offset < ndx->offs[ndx->length]' failed. 
Aborted 

जो बहुत उत्साहजनक नहीं है। मैंने कई अन्य svnadmin आदेशों का प्रयास किया है, लेकिन किसी ने सत्यापनकर्ता को खुश नहीं किया है।

मेरा अगला विचार प्रतिलिपि बनाने और टूटी हुई भंडार की "ताजा" प्रतिलिपि से शुरू करना था, फिर 823 के बाद संशोधनों को डंप करें और बैकअप के साथ विलय करें। लेकिन यह संभव नहीं लगता है, मुझे याद आ रही एक के बाद संशोधन डंप नहीं कर सकते हैं:

$ svnadmin dump -r 824 master/ >r824.dmp 
svnadmin: No such revision 823 

ध्यान दें कि यह डंप "वृद्धिशील" बनाने के लिए, यह है कि यह दुनिया का नाटक करना चाहिए मदद नहीं करता है उम्मीद में संशोधन 824 के साथ शुरू किया और बस वहाँ से जाना:

$ svnadmin dump --incremental -r 824:947 master/ > dump.txt 
svnadmin: No such revision 823 

यह dump.txt को आउटपुट लिखने करता है, लेकिन मुझे यकीन है कि अगर यह भरोसा किया जा सकता नहीं हूँ। ध्यान दें कि यह लॉग नहीं करता है कि यह किसी भी संशोधन को सफलतापूर्वक डंप कर दिया गया है।

अद्यतन:, बैकअप में master/ में क्रैश होने डिस्क कॉपी से नए संशोधन फ़ाइलों की प्रतिलिपि बनाने "लापता पूंछ" प्रदान करने के लिए: मैं एक विचार था

$ for a in $(seq 910 947) ; do cp master/db/revs/$a repos/db/revs ; cp master/db/revprops/$a repos/db/revprops/ ; echo $a ; done 

हालांकि, इस लगता है कि लक्ष्य भंडार को भ्रष्ट करने के अलावा कुछ भी नहीं लगता है:

$ svnadmin verify repos/ 
[...] 
* Verified revision 907. 
* Verified revision 908. 
* Verified revision 909. 
svnadmin: Corrupt representation '907 21815 45 30922 158d3e72732f45bf6f02919b22fc899a' 
svnadmin: Malformed representation header 

अब, मैं विचारों से बाहर हूं।

+0

यह सोचने लगते हैं कि शायद यह अन्य स्टैक एक्सचेंज साइटों में से एक में बेहतर सेवा प्रदान की गई थी, लेकिन यहां कई समान प्रश्न थे। – unwind

+4

यह ठीक है, संस्करण नियंत्रण उपकरण के बारे में प्रश्न यहां उचित खेल हैं। [एफएक्यू] (http://stackoverflow.com/faq) "आमतौर पर प्रोग्रामर द्वारा उपयोग किए जाने वाले सॉफ़्टवेयर टूल" का उल्लेख करता है, और संस्करण नियंत्रण शायद ही कभी अन्य क्षेत्रों में उपयोग किया जाता है (कम से कम गैर-प्रोग्रामर द्वारा)। –

+0

दूषित भंडारों की वसूली के बारे में, मुझे अभी यह बहुत ही रोचक लेख मिला: https://spin.atomicobject.com/2015/10/06/svn-corruption-recovery/ – AFract

उत्तर

37

मैंने इसे हल किया।

समाधान (निश्चित रूप से) स्पष्ट था, एक बार मुझे एहसास हुआ।

मैं इस किया था:

  • master/: एक टूटी हुई भंडार की एक प्रति, संशोधन 0..947 विशेषता संशोधन 823 की फ़ाइलों शारीरिक रूप से लापता है।
  • repos/: बैकअप (डंप फ़ाइल) से लोड किया गया एक संग्रह, जिसमें संशोधन 0..910 शामिल है।

समाधान 911 और बाद में संशोधन से master/ से डंप करने के लिए बस समाधान था। यह किसी भी त्रुटि के बिना संभव हो गया था, जो मैं ले इसका मतलब है कि सीमा 911..947 में संशोधन से कोई भी सीधे राज्य पर निर्भर संशोधन 823 में, या कुछ और:

$ svnadmin dump --incremental -r 911:947 master/ > tail.txt 
* Dumped revision 911. 
* Dumped revision 912. 
* Dumped revision 913. 
[...] 
* Dumped revision 947. 

वैसे भी, तो बस डंप लागू भंडार के लिए बैकअप से आ रही:

$ cat tail.txt | svnadmin load repos/ 
[lots of commits] 

और अब मैं पूरा इतिहास बहाल, कोई समस्या नहीं:

$ svnadmin verify repos/ 
* Verified revision 0. 
* Verified revision 1. 
* Verified revision 2. 
[...] 
* Verified revision 945. 
* Verified revision 946. 
* Verified revision 947. 

आहा!

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^