खराब क्षेत्रों के साथ एक डिस्क से तेज़ वसूली


13

हाल ही में मैंने ddएक अस्वास्थ्यकर एचडीडी से एक फ़ाइल की कोशिश की । मैंने इस्तेमाल किया dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync। मेरी समस्या यह थी कि ddखराब ब्लॉक का सामना करने पर बहुत समय बर्बाद होता है। अपने उपयोग के मामले में मैं तेजी से परिणाम के लिए कुछ डेटा हानि के साथ खुशी से भुगतान करूंगा।

क्या तेजी से निपटने में त्रुटि करने का कोई तरीका है? शायद एक कर्नेल ट्विन (एचडीडी को एक ब्लॉक पढ़ने के लिए कम प्रयास करने के लिए कह रहा है)? या कोई और कार्यक्रम?

जवाबों:


29

सॉफ्टवेयर का उपयोग करने के लिए सबसे पहले: आप ddrescueइसके बजाय उपयोग करने का प्रयास कर सकते हैं dd

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

उदाहरण का उपयोग:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

से ddrescueजानकारी पेज:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

यहां कुछ अतिरिक्त स्रोतों का उपयोग किया गया है ddrescue:


संपादित करें

मामले में HDD ही काफ़ी समय लग रहा है, तो आप एक सुविधा बुलाया सक्षम करने के लिए कोशिश कर सकते हैं TLER ( टी IME एल imited rror आर ecovery) या CCTL ( सी ommand सी ompletion टी IME एल imit)। सभी एचडीडी के पास यह नहीं है, लेकिन आप एचडीडी नियंत्रक पर समय को सीमित करने के लिए इसका उपयोग कर सकते हैं। इस दृष्टिकोण को निश्चित रूप से उपयोग करके जोड़ा जा सकता है ddrecue

लिनक्स में एक उपकरण होता है जिसे smartctl( smartmontoolsपैकेज में) कहा जाता है ।

वर्तमान सेटिंग की जांच करने के लिए ("अक्षम" का अर्थ है असीमित समय, जो आप नहीं चाहते हैं):

# smartctl -l scterc /dev/sda

इसे एक निश्चित मान पर सेट करने के लिए (इस उदाहरण में 5.0 सेकंड। इसे टीएलईआर में अक्षम करता है):

# smartctl -l scterc,50,50 /dev/sda

TLER के लिए स्रोत: http://en.wikipedia.org/wiki/TLER


2
देखने के लिए एक और उपकरण dc3dd है जो dd का एक फोरेंसिक संस्करण है
fpmurphy

ओह अच्छा, मैं उस उपकरण को नहीं जानता था!
स्लीजर्ड

2
मुझे उस टीएलईआर के बारे में कोई पता नहीं था, लेकिन इससे मेरा दिन बच गया। मेरी डिस्क पर ये अक्षम थे और हर बार जब मैं कुछ सेकंड के बाद अपनी डिस्क को ddrescue चलाता था। पावर-ऑफ, पावर-ऑन और अगला प्रयास। अब मैं इसे आपके द्वारा उल्लिखित कमांड के साथ 2 सेकंड के लिए सेट करता हूं और यह फिर से कभी भी ब्लॉक नहीं होता है, यह कुछ क्षेत्रों को छोड़ देता है, लेकिन कम से कम बिना किसी रुकावट के चलता है।
स्वेन रीके ने

2

मेरे पास इस सॉफ़्टवेयर के साथ अन्यथा अपठनीय डिस्क से अच्छे परिणाम थे।

http://www.cgsecurity.org/wiki/TestDisk

यह अगले एक ठोस वसूली उपकरण के रूप में अच्छी तरह से है। यदि आपकी फ़ाइल तालिका टूट गई है या यदि वे हटा दी गई हैं, तो भी यह फ़ाइलें प्राप्त कर सकती हैं। यह एक बहुत अच्छा फोरेंसिक उपकरण है। यह चीजों को वास्तव में असंगठित तरीके से डंप करता है, लेकिन आप सभी डेटा को स्थानांतरित कर सकते हैं।

http://www.cgsecurity.org/wiki/PhotoRec


2

डिस्क को बचाने के लिए एक तेज और त्वरित विकल्प के लिए आप एक स्क्रिप्ट स्क्रिप्ट का उपयोग कर सकते हैं और फ़ाइल को श के साथ चला सकते हैं। इसमें यह रेखा शामिल है, बस दोहराएं sudo ddrescueऔर sleep 3कुछ और बार। नींद का उपयोग ड्राइव को कुछ सेकंड आराम करने के लिए किया जाता है:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

ऊपर उपयोग किए गए विकल्प:

  • -r0 : कोई रिट्रीट के साथ
  • -e +0: पहली त्रुटि पर बाहर निकलें
  • -T 1s: 1 सेकंड के असफल पढ़ने के साथ बाहर निकलें
  • -d : डायरेक्ट आई / ओ
  • -n : कोई खुरचन नहीं

आप एक बार -Rखत्म होने के बाद विकल्प के साथ उपयोग कर सकते हैं -A, जो सभी त्रुटियों को उल्टा और हटा देगा और फिर से पीछे की तरफ शुरू होगा। इसका मतलब है कि यह त्रुटियों को अलग तरीके से पढ़ेगा।


0

आपकी हार्ड ड्राइव के आकार पर निर्भर करता है और इसमें कितने बुरे ब्लॉक हैं। यह आमतौर पर मुझे डीडी को 1 टेरा स्वस्थ एचडी का उपयोग करके बैकअप के लिए 20 मिनट लेता है। खराब ब्लॉकों के साथ मैंने आज सुबह ही ठीक किया है, मुझे दो बार लिया। मुझे लगभग 30 खराब ब्लॉकों के साथ डुप्लिकेट करने (डिस्क का बैकअप लेने) में समस्या हो रही थी। मैंने जो पहला काम किया है, वह सभी अच्छे डेटा का बैकअप लेने के लिए नियमित फाइलज़िला का उपयोग करके बैकअप फ़ाइलों का है। मैं ध्यान देता हूं कि एक बड़ी फाइल सही तरीके से कॉपी नहीं हो रही थी (बीच में रुककर और ट्रांसफर को फिर से शुरू करना)। सौभाग्य से मेरे पास उसी फ़ाइल का पिछला बैकअप है। डिस्क को डुप्लिकेट करने के लिए, फिर मुझे इस प्रक्रिया का उपयोग करके डिस्क पर खराब ब्लॉकों को ढूंढना था:

1 को डिस्क की पहचान करने की समस्या का पता लगाएं HD जानकारी का उपयोग कर fdisk -l

2 यदि आप कहते हैं कि आपकी डिस्क / dev / sdb है, तो आपको कमांड बैडब्लॉक -v / dev / sdb चलाने की आवश्यकता है, यह ड्राइव पर आपके सभी बुरे ब्लॉक को सूचीबद्ध करेगा। सौभाग्य से कुछ ही होगा। यदि कोई ख़राब ब्लॉक नहीं पाया जाता है, तो आपके ड्राइव ब्लॉक ठीक हैं और कुछ और जानने की जरूरत है। मेरे ब्लॉक का आकार 512 है इसलिए मैं डीडी को चलाने के लिए उस डिफ़ॉल्ट नंबर का उपयोग करता हूं

3 प्रत्येक ब्लॉक 512 आकार है, इसलिए मैंने जो किया वह bs = 512 सेट करना है

हर बार जब मैं डीडी को नियमित रूप से चलाता था, जैसा कि मैं हमेशा करता हूं, त्रुटियों के बाद मेरा डेटा दूषित हो जाएगा। तो फिर मैं पृष्ठ https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html पृष्ठ पर बताए गए मापदंडों का उपयोग करता हूं "भाग के लिए असफल" खोज।

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

कुछ देर लगी। प्रत्येक खराब ब्लॉक में दोषपूर्ण ड्राइव पर धमाके जैसी आवाज का सामना करना पड़ा। यह ब्लॉक द्वारा कॉपी ब्लॉक करता है, और मेरे सभी बुरे ब्लॉकों को एक ही शोर बना देता है। समय की मात्रा ने शोर मचाया, क्योंकि यह एक और बुरा ब्लॉक पाया गया और आपको डिस्प्ले त्रुटि संदेश के बारे में बताता है। क्या 'रूपा = noerror, सिंक' बाहर बुरा, NULs के साथ पढ़ता है, जबकि करता है, पैड करने के लिए है 'iflag = fullblock' छोटे के लिए पूरा करता है पढ़ता है, लेकिन अंत के लिए अपने डेटा सिंक में रहता है। कोई भ्रष्टाचार नहीं, यह सिर्फ दोषपूर्ण ब्लॉकों की नकल नहीं करता है और इसे खाली एनयूएल से भरता है।

डीडी के साथ कॉपी किए जाने के बाद, मैं बस उस बैकअप फ़ाइल को पिछले बैकअप से फाइलज़िला की जगह ले रहा हूं और सब कुछ ठीक है। मुझे आशा है कि यह उन लोगों के लिए उपयोगी होगा जो बैकअप दोषपूर्ण ड्राइव की कोशिश कर रहे हैं।

नोट: मेरे ख़राब ब्लॉक जहाँ एक दूसरे के बहुत करीब हैं। लगभग 4 ब्लॉक एक साथ उन समूहों में जहां खराब का पता चला है। यदि आपके ब्लॉक डिस्क पर हैं, तो कई फाइलें प्रभावित हो सकती हैं। सौभाग्य से, मेरे मामले में, एक बड़ा डेटाबेस 4 जीबी फाइल केवल प्रभावित हुआ था।


1
यदि एक ही उत्तर कई प्रश्नों को संबोधित करता है, तो एक अच्छा मौका है कि प्रश्न डुप्लिकेट हैं। यदि हां, तो एक का उत्तर देना बेहतर है और दूसरे को संभव डुप्लिकेट के रूप में चिह्नित करें। यह दोहराए जाने वाले उत्तरों के प्रस्फुटन से बचता है, और प्रश्नों को जोड़ने से पाठकों को सभी उत्तरों को खोजने में आसानी होती है।
फिक्सर 1234

वास्तव में नहीं, लेकिन यदि आप ऐसा सोचते हैं, तो मुझे बताएं ताकि मैं अपना उत्तर मिटा दूं। मैंने सही समाधान के लिए हर जगह देखा है, लेकिन मुझे अपने सर्वर के साथ एक समस्या को ठीक करने का एक तरीका मिला। इसी तरह के कई अन्य सवाल हैं, जिन्होंने मेरी समस्या का जवाब नहीं दिया। अब तक मुझे लगभग एक दर्जन समान ओ संबंधित प्रश्न मिले। मेरे पास अपने अनुभव को लिखने के लिए एक जोड़े का जवाब है और मैं इसे कैसे हल करने में सक्षम था। मुझे बताएं कि क्या आप चाहेंगे कि मैं अपना जवाब मिटाऊं और मुझे यह करने में खुशी होगी। सादर।
लुइस एच कैबेरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.