क्या ब्लॉकचेन की हर कॉपी एक जैसी है? यदि मेरे पास फ़ाइल में कोई त्रुटि है, तो क्या मुझे इस फ़ाइल को बैकअप और रीइन्डेक्स चेनस्टेट से कॉपी करने में सक्षम होना चाहिए?
मैंने हाल ही में अपने ब्लॉकचैन की पहली 2000 फाइलों को एसएसडी से एक एचडीडी में स्थानांतरित किया है। HDD में चढ़ जाता है /mnt/ext।
प्रति फ़ाइल एक सिमिलिंक तब blocksदूरस्थ फ़ाइलों में उस बिंदु पर डाल दिया जाता है। तो मेरे ब्लॉक फ़ोल्डर अभी भी एसएसडी पर है, लेकिन फाइलें एचडीडी पर हैं।
मैंने bitcoind -reindex-chainstateयह सुनिश्चित करने की कोशिश की कि सब कुछ अभी भी काम करता है लेकिन अब यह एक त्रुटि दे रहा है:
2020-11-26T12:52:24Z ERROR: ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() doesn't match index for CBlockIndex(pprev=0x44288c0, nHeight=255, merkle=4309bfeed77a70f309da08bcf8948906b9cc26120c0b0ef86e0ac67284bbd79e, hashBlock=00000000d0a75c861fabf9ff7b92022f60e4afeed9331fe5aa073d8e4706fe3c) at FlatFilePos(nFile=0, nPos=58808)
2020-11-26T12:52:24Z *** Failed to read block
अब मेरे पास कई सवाल हैं। मुझे लगता है कि nFile=0इसका मतलब है कि ब्लॉक में है blk00000.datऔर rev00000.dat। क्या मैं सही हू?
इसलिए मैंने ब्लॉकचेन के बैकअप से इस फाइल को फिर से कॉपी किया। यह एक दूसरे नोड से है। लेकिन मुझे संदेह होगा कि फाइलें समान हैं, है ना?
लेकिन मुझे उसी स्थिति में सटीक त्रुटि मिलती है - एक नए के साथ भी -reindex-chainstate।
मैं लॉग में देख सकता हूं कि सभी ब्लॉक तब तक होते हैं जब तक कि संख्या 254अनुक्रमित नहीं हो जाती है लेकिन हर बार यह ब्लॉक के साथ विफल हो जाता है height 255।
मुझे लगता है कि उन पुरानी फ़ाइलों में हमेशा समान ब्लॉक होते हैं। यह 254 ब्लॉक कैसे सही हो सकता है लेकिन यह अगले एक पर विफल रहता है?
क्या यह केवल माउंट की समस्या हो सकती है?
संपादित करें: मैं वर्तमान में -reindexआईएनजी हूँ । इस मामले में मैंने अपने blocksफ़ोल्डर से पहले से जुड़ी फाइलें इस तरह इस्तेमाल की हैं:
Reindexing block file blk00000.dat...
Loaded 119964 blocks from external file in 133291ms
जाहिरा तौर पर, पहली फ़ाइल में 119,964 ब्लॉक हैं। इसलिए जब मेरे साथ कोई त्रुटि होती है height=255तो निश्चित रूप से पहली फाइल में होनी चाहिए।
जवाब
इसलिए मैंने ब्लॉकचेन के बैकअप से इस फाइल को फिर से कॉपी किया। यह एक दूसरे नोड से है। लेकिन मुझे संदेह होगा कि फाइलें समान हैं, है ना?
नहीं। ब्लॉक आदेश से डाउनलोड किए जाते हैं, लेकिन उन्हें डाउनलोड किए जाने के क्रम में डिस्क पर लिखा जाता है। तो ब्लॉक इंडेक्स (जो बताता है कि प्रत्येक ब्लॉक कहां है) प्रत्येक नोड के लिए अलग होगा क्योंकि प्रत्येक नोड में संभवतः ब्लॉक थोड़े छोटे क्रम में संग्रहीत होंगे।
इसके अलावा, यदि आपके नोड को बासी ब्लॉक मिले हैं, तो वे बासी ब्लॉक डिस्क पर भी संग्रहीत किए जाते हैं और ब्लॉक इंडेक्स में एक प्रविष्टि होती है। सभी नोड्स में एक ही बासी ब्लॉक नहीं होगा, और वे एक ही क्रम में संग्रहीत नहीं हो सकते हैं। नए सिंक किए गए नोड्स में सिंक किए जाने से पहले बासी ब्लॉक नहीं होंगे, और कई बार बासी ब्लॉक प्रचार देरी के कारण बासी हो जाते हैं, इसलिए एक नोड को स्टोर करने के लिए एक बासी ब्लॉक भी नहीं मिल सकता है।
आप बस एक नोड से दूसरे में अलग-अलग ब्लॉक फ़ाइलों को कॉपी नहीं कर सकते। आपको संपूर्ण ब्लॉकचेन और ब्लॉक इंडेक्स की प्रतिलिपि बनाने की आवश्यकता है। अन्यथा आप शायद पूरी चीज को भ्रष्ट कर देंगे और ब्लॉकचेन को फिर से डाउनलोड करने की आवश्यकता होगी।