मेरे घर सर्वर में हार्ड ड्राइव विफलता थी।मैं एक टूटी हुई संशोधन के साथ एक संग्रह को कैसे ठीक करूं?
एक बार मुझे एहसास हुआ कि डिस्क जा रही है, मैंने लॉग इन किया और मेरी रिपोजिटरी की एक सीधी प्रतिलिपि बनाई, जिसमें कई परियोजनाएं शामिल हैं।
हालांकि, बाद से डिस्क असफल रहा था, संशोधन में से एक टूट गया है:
$ 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
अब, मैं विचारों से बाहर हूं।
यह सोचने लगते हैं कि शायद यह अन्य स्टैक एक्सचेंज साइटों में से एक में बेहतर सेवा प्रदान की गई थी, लेकिन यहां कई समान प्रश्न थे। – unwind
यह ठीक है, संस्करण नियंत्रण उपकरण के बारे में प्रश्न यहां उचित खेल हैं। [एफएक्यू] (http://stackoverflow.com/faq) "आमतौर पर प्रोग्रामर द्वारा उपयोग किए जाने वाले सॉफ़्टवेयर टूल" का उल्लेख करता है, और संस्करण नियंत्रण शायद ही कभी अन्य क्षेत्रों में उपयोग किया जाता है (कम से कम गैर-प्रोग्रामर द्वारा)। –
दूषित भंडारों की वसूली के बारे में, मुझे अभी यह बहुत ही रोचक लेख मिला: https://spin.atomicobject.com/2015/10/06/svn-corruption-recovery/ – AFract