2008-09-12 11 views
5

संपीड़ित फ़ाइलों को दूषित करने के लिए सबसे आम तरीका अनजाने में एक ASCII-mode एफ़टीपी हस्तांतरण करना है, जो सीआर और/या एलएफ वर्णों के कई से एक कचरे का कारण बनता है।भ्रष्ट ज़िप या gzip फ़ाइलों को पुनर्प्राप्त करें?

जाहिर है, सूचना हानि है, और इस समस्या को ठीक करने का सबसे अच्छा तरीका एफ़टीपी बाइनरी मोड में फिर से स्थानांतरित करना है।

हालांकि, यदि मूल खो गया है, और यह महत्वपूर्ण है, डेटा कितना पुनर्प्राप्त करने योग्य है?

[वास्तव में, मुझे पहले से ही पता है कि मुझे क्या लगता है कि यह सबसे अच्छा जवाब है (यह बहुत मुश्किल है लेकिन कभी-कभी संभव है - मैं बाद में पोस्ट करूंगा), और सामान्य गैर-उत्तर (मरम्मत के लिए ऑफ-द-शेल्फ प्रोग्राम डेटा की मरम्मत किए बिना सीआरसी), लेकिन मैंने सोचा कि स्टैक ओवरफ्लो बीटा अवधि के दौरान इस प्रश्न को आजमाने में दिलचस्प होगा, और देखें कि कोई और सफल पुनर्प्राप्ति पथ या खोजे गए टूल को नीचे चला गया है, जिसे मैं नहीं जानता।]

उत्तर

4
Bukys Software

से

लगभग 1 256 बाइट्स जाना जाता है में दूषित हो करने के लिए, और भ्रष्टाचार केवल मूल्य '\ 012' के साथ बाइट्स में होने के लिये जाना जाता है। तो बाइट त्रुटि दर 1/256 (इनपुट का 0.3 9%) है, और 2/256 बाइट्स (0.78% इनपुट) संदिग्ध हैं। लेकिन चूंकि बाइट प्रति विकेट केवल तीन बिट प्रभावित हैं, बिट त्रुटि दर केवल 3/(256 * 8) है: 0.15% खराब है, 0.2 9% संदिग्ध है।

...

संकुचित इनपुट में कोई त्रुटि बाद के सभी बाइट्स के लिए विसंपीड़न प्रक्रिया बाधित ... तथ्य यह है कि decompressed उत्पादन मान्यतापूर्वक बुरा है इतनी जल्दी आशा के लिए कारण है - सही उत्तर की खोज के लिए गलत उत्तर की पहचान कर सकते हैं।

अंत में, कई तकनीकों सफलतापूर्वक इन फ़ाइलों से उचित डेटा निकालने के लिए संयुक्त थे: खेतों की

  • डोमेन-विशिष्ट पार्स करने और तार उद्धृत
  • मशीन क्षति
  • की कम संभावना के साथ पिछले डेटा से सीख
  • अन्य कारणों से फ़ाइल क्षति के लिए सहिष्णुता (उदा।डिस्क भरा हुआ है, जबकि लॉगिंग) उच्चतम संभावना पथ के साथ खोज मार्गदर्शक

इन तकनीकों में निश्चितता के साथ आवश्यक मरम्मत के 75% की पहचान के लिए

  • अग्रावलोकन, और शेष का पता लगाया जाता है उच्चतम probability- सबसे पहले, ताकि व्यावहारिक पुनर्निर्माण तुरंत पहचाने गए हैं।

  • 1

    आप सीआरएलएफ के साथ सभी सीआर को प्रतिस्थापित करने के लिए एक छोटी सी लिपि लिखने का प्रयास कर सकते हैं (कचरे की दिशा सीआरएलएफ को सीआरएफ में मानते हुए), उन्हें सही क्रैक होने तक उन्हें प्रति ब्लॉक यादृच्छिक रूप से बदलना। यह मानते हुए कि डेटा विशेष रूप से बड़ा नहीं था, मुझे लगता है कि ब्रह्मांड की गर्मी की मृत्यु पूरी होने तक आपके सभी CPU का उपयोग नहीं हो सकता है।

    चूंकि निश्चित जानकारी हानि है, मुझे नहीं पता कि एक बेहतर तरीका है। सीआरएलएफ दिशा में सीआर में नुकसान वापस रोल करने के लिए थोड़ा आसान हो सकता है।

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