खराब क्षेत्रों के साथ एक hdd बचाव: dd बनाम gddrescue


11

कहीं पर इन्टरनेट मैंने पढ़ा है कि gddrescue से बेहतर है दिन दिन में कम से कम डिस्क की राशि एक परेशान क्षेत्र पर प्रदर्शन पढ़ने के बीच भेद करने में सक्षम होने के संदर्भ में। क्या वास्तव में यह मामला है?

समय dd if = / dev / sda Skip = 900343967 of = a.bin count = 4 iflag = direct conv = noerror, सिंक

dd: पढ़ने `/ देव / sda ': इनपुट / आउटपुट त्रुटि
2 + 0 रिकॉर्ड
2 + 0 में रिकॉर्ड
1024 बाइट्स (1.0 kB) की नकल की, 18.6057 s, 0.1 kB / s
3 + 1 रिकॉर्ड
4 + 0 रिकॉर्ड
2048 में बाइट्स (2.0 kB) कॉपी किया गया, 18.6707 s, 0.1 kB / s

वास्तविक 0m18.672s
उपयोगकर्ता 0m0.000s
sys 0m0.004s

Btw, सीधा झंडा वास्तव में मदद करता है, w / o इसे मैं केवल 4 में से 1 सेक्टर (बनाम 3/4 इसके साथ) पढ़ने में सक्षम था। हालाँकि, यह स्पष्ट रूप से स्थानांतरण की गति को धीमा कर देता है - यह कम से कम मेरे लिए 5 गुना धीमा है: 5MB / s बनाम 25MB / s इस ध्वज के बिना । किसी भी तरह, अब gddrescue (ddrescue) भाग के लिए ..

समय ddresoscope -b512 -c1 -s4b -dnvD -i900343967b -o0b / dev / sda b.bin

के बारे में 2048 बाइट्स कॉपी करने के लिए / dev / sda से b.bin
शुरू करने के लिए पदों: शिशु = 460976 एमबी, संगठन = 0 बी
कॉपी ब्लॉक का आकार: 1 हार्ड ब्लॉक
हार्ड ब्लॉक का आकार: 512 बाइट्स
Max_retries: 0
प्रत्यक्ष: हाँ दुर्लभ : कोई विभाजन नहीं: नो ट्रंकट: नहीं


दबाए गए Ctrl-C को बाधित करने के लिए दबाएं : 1536 B, त्रुटी: 512 B, वर्तमान दर: 53 B / s
ipos: 460976 MB, त्रुटियाँ: 1, औसत दर: 53 B / s
opos: 1536 B, अंतिम सफल पढ़ने का समय: 0 एस
समाप्त हुआ

वास्तविक 0m18.736s
उपयोगकर्ता 0m0.004s
sys 0m0.000s

जैसा कि ऊपर दिखाया गया है, इसने निष्पादन के लिए ठीक उसी समय को लिया है। जैसा कि अपेक्षित है - समान आँकड़े: 3/4। हालाँकि, जब मैं dd (conv = सिंक) के लिए 0x00 के साथ परेशान क्षेत्रों को पैड कर सकता था , तो gddresoscope को यह कार्यक्षमता याद आ रही है? इसके बजाय, यह परेशान क्षेत्र w / o को अपनी स्थिति में कुछ भी लिखने से रोक देता है और अगले निम्न क्षेत्र के साथ जारी रहता है (यदि मेरे पास आउटपुट फ़ाइल में उस क्षेत्र पर पहले से ही लिखा गया डेटा है - यह ओवरराइट नहीं किया जाएगा: कभी-कभी यह वांछनीय नहीं हो सकता है )। मुझे यकीन नहीं है कि कैसे -t (truncate) विकल्प gddrescue के साथ ब्लॉक-डिवाइस के लिए काम करेगा(मुझे लगता है, यह 0x00 के साथ पूरी तरह से इसे अधिलेखित कर देगा), लेकिन एक नियमित फ़ाइल पर, जैसा कि भविष्यवाणी की गई है, पूरी फ़ाइल w / o को केवल ऑफसेट आयामों (यानी -o1) के भीतर कर रही है। इसलिए, यह कुछ हद तक dd समन्वयन के लिए अपरिचित है , लेकिन यह समान होने के कारण यह केवल पहचान की कार्यक्षमता की नकल करेगा यदि आप संपूर्ण आउटपुट डिवाइस / फ़ाइल को अधिलेखित करने के लिए तैयार हैं।

यद्यपि, क्रिया विकल्प की उपस्थिति और बुरे क्षेत्रों / ब्लॉकों को लॉग करने की क्षमता के लिए धन्यवाद - gddresoscope एक बेहतर विकल्प की तरह लगता है। यह ध्यान रखना महत्वपूर्ण है, कि दोनों ऐप समान पार्म्स के साथ (बहुत ज्यादा) लॉन्च किए गए थे।

का उत्पादन

अलग

खाली है (बाहर निकलें 0), जिसका अर्थ है कि फाइलें बिल्कुल समान हैं।

अब यह वह हिस्सा है जिसे मैं नहीं समझता:

dd एरर-फ्री सामान पर भी धीमा है क्योंकि यह छोटे रीड और लिख रहा है। यह ड्राइव के गलत हिस्सों के माध्यम से चबाने में बहुत समय व्यतीत करता है, बल्कि जितना हो सके उतना त्रुटि-रहित सामान पढ़ने के बजाय, यह कठिन सामान करने के लिए वापस जा रहा है।

यह सब किस बारे में हैं? विशेष रूप से भाग " यह ड्राइव के गलत हिस्सों के माध्यम से चबाने में बहुत समय व्यतीत करता है, बजाय इसके कि जितना हो सके उतना त्रुटि-रहित सामान पढ़ने के बजाय, हार्ड सामान करने के लिए वापस जा रहा है "? यह उतना ही समय लगा, जितना ऊपर दिखाया गया है (भले ही मैंने डेटा के एक बहुत छोटे हिस्से का निरीक्षण किया हो, लेकिन यह मामला होना चाहिए?)।

gddrescue प्रस्तावों -r स्विच, जो की राशि एक "बुरा क्षेत्र" पर फिर से पढ़ता को नियंत्रित करना चाहिए, हालांकि, dd लगता है के साथ चल रहा हो -r0 सब साथ (के रूप में यह एक ही समय लिया)। तो, क्या यह विकल्प केवल "पोस्ट-प्रोसेसिंग" के लिए है? मुझे जो मिल रहा है, वह यह है कि मूल रूप से dd और gddrescue दोनों -r0 के साथ दौड़ते हुए प्रतीत होते हैं और dd को गलत भागों के माध्यम से चबाने के लिए प्रतीत नहीं होता है, जो कि gddresoscope की तुलना में अधिक है (वे दोनों 15-18 के लिए एक खराब ब्लॉक को रोकते हैं। सेकंड देते हैं या लेते हैं, तो क्या सौदा है, कैसे तेजी से gddresoscope है ??? "

इसके अलावा, -D विकल्प क्या है (आउटपुट फाइल के लिए सिंक्रोनस राइट्स का उपयोग करें)? मैंने किए गए कुछ परीक्षणों से कोई अंतर नहीं देखा है।

क्या कोई पूरी बात पर टिप्पणी कर सकता है? धन्यवाद।

जवाबों:


6

मुझे यकीन नहीं है कि उद्धृत लेखक अपने निष्कर्ष पर कैसे आया। मैं बहस कर रहा हूं कि क्या वह सही है, या नहीं, मेरे पास वह अनुभव नहीं है।

दूसरी ओर, इस कथन के संबंध में ...

gddresoscope एक परेशान क्षेत्र पर प्रदर्शन डिस्क रीड की मात्रा के बीच अंतर करने में सक्षम होने के लिए कम से कम dd से बेहतर है।

Gddresoscope का उपयोग करने का असली "कम से कम" कारण है, क्योंकि gddrescue बार-बार पढ़ने या लिखने के प्रयासों पर आउटपुट को कम नहीं करता है। gddrescue भी पूरी तरह से स्वचालित है, dd को रोक देगा कि कुछ पढ़ने की त्रुटियों के संबंध में।

तो उद्धृत लेखक सही हो सकता है, वह नहीं हो सकता है ... लेकिन पूरे बयान में ग्रेस्रेस्क्यू की बात याद आती है।

अद्यतन: डीडी और gddresoscope के बीच विस्तृत अंतर।

dd conv = noerror, एक त्रुटि के बाद भी चलता रहेगा, लेकिन यह खराब ब्लॉक को छोड़ देगा। यहां तक ​​कि सिंक विकल्प को जोड़ने से केवल लंघन के बजाय शून्य रखा जाएगा। यदि आप एक ही आउटपुट का उपयोग करके एक और रीड करने के लिए dd का उपयोग करते हैं, तो आप पहले से पुनर्प्राप्त कुछ भी खो देंगे / खो देंगे।

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

ध्यान रखें, भले ही दोनों उपकरण 100% अपठनीय हो। फिर भी आपको इससे कोई डेटा नहीं मिलेगा। यदि ब्लॉक में कुछ सेक्टर पठनीय हैं, तो gddrescue संभावित रूप से अधिक डेटा प्राप्त कर सकता है।


मैं देख रहा हूँ, अच्छी तरह से .. के बारे में gddresoscope पूरी तरह से स्वचालित किया जा रहा है, dd भी पूरी तरह से स्वचालित नहीं है conv = noerror के साथ ? क्या आप "बार-बार पढ़ने / लिखने के प्रयासों पर ट्रंकसेट आउटपुट" के हिस्से के बारे में विस्तार से बता सकते हैं? आपका मतलब "पोस्ट-प्रोसेसिंग" सामान है, जब gddrescue को उन क्षेत्रों की फिर से जांच करने का आदेश दिया जाता है जो शुरू में पढ़ने में विफल रहे थे?
XXL

आपके प्रश्न को प्रतिबिंबित करने के लिए मैंने अपना उत्तर अपडेट किया।
जेएम बेकर

मैंने हार्ड ड्राइव और ऑप्टिकल मीडिया पर कई बार gddrescue का उपयोग किया है। यह लाभ है कि यह अपठनीय क्षेत्रों को पुनर्प्राप्त करने का प्रयास करता है। आप इसे रोक भी सकते हैं और बाद में इसे फिर से चला सकते हैं और इसे वहीं छोड़ देंगे जहाँ इसे छोड़ा था।
क्रिस थॉम्पसन

1
@TechZilla - gddrescue सिर्फ dd की तरह खराब ब्लॉक को भी छोड़ देता है। जैसा कि मैंने ऊपर लिखा है, ज़ीरोस ( कन्ट = सिंक) के साथ पैडिंग करना सटीक विकल्प है कि गेड्रेसस्क्यू गायब है और जो कभी-कभी उपयोगी होता है (अतिरिक्त प्रयास से आप मैन्युअल रूप से / देव / शून्य के साथ कर सकते हैं, क्योंकि आपके पास लॉग होगा खराब क्षेत्रों के रूप में उत्पादन प्रति gddrescue उत्पादन)। नहीं है कोई बीच का अंतर gddrescue और dd वसूली के मामले में, gddrescue इस संबंध में कुछ भी अलग नहीं करता है। क्यों? क्योंकि, समान ब्लॉक आकार के साथ वे समान मात्रा में डेटा पुनर्प्राप्त करेंगे।
XXL

@TechZilla - केवल वास्तविक अंतर तब होता है जब प्रक्रिया करने के लिए क्षेत्रों की मात्रा को ब्लॉक आकार से अधिक चुना जाता है । यह आपको dd की तुलना में चीजों को स्पष्ट रूप से गति देने की क्षमता देगा , क्योंकि dd केवल एक स्थिर गैर-परिवर्तनीय क्षेत्र आकार के साथ काम कर सकता है। दूसरी ओर, gddrescue पहले कई क्षेत्रों को पढ़ेगा, जैसा कि आपने इसे करने के लिए निर्देश दिया है, लेकिन यह उन चैंक को बुरा भी घोषित करेगा यदि अंदर एक भी ब्लॉक संदिग्ध है और एक बार यह हो गया है - बाद के मोड में स्विच करें जिससे भ्रमित क्षेत्रों का निरीक्षण किया जा सके। धीरे-धीरे सेक्टर के आकार को कम करते हुए जब तक यह न्यूनतम ब्लॉक आकार तक नहीं पहुंचता
XXL

2

इस बात पर निर्भर करता है कि आपका एचडीडी निर्माता के साथ-साथ निर्माता से भी जुड़ा हुआ था, और फर्मवेयर का कौन सा संस्करण चलता है, आधुनिक एचडीडीएस के साथ, जब खराब क्षेत्रों का पता लगाया जाता है, तो उन्हें फर्मवेयर द्वारा उपयोग से हटा दिया जाता है और ड्राइव खराब क्षेत्रों को छोड़ना जानता है। तो, बुरे क्षेत्रों से एक hdd "बचाव" की धारणा उस संबंध में मूक हो सकती है। यह सवाल कि क्या अब खराब क्षेत्रों में एक बार वैध डेटा था, ऐसा लगता है कि आप जिस मामले का समाधान चाह रहे हैं - उसका कोई इरादा नहीं है!

Grc.com पर कुछ सॉफ्टवेयर है जिसे spinrite 6 कहा जाता है जो खराब क्षेत्रों के साथ HDds को ठीक करने में सक्षम होने का दावा करता है। यह सशुल्क सॉफ़्टवेयर है, और मैंने कभी इसकी कोशिश नहीं की। इसके बारे में पढ़ने लायक है, खासकर अगर कोई एक hdd को "पुनरुत्थान" करने का प्रयास कर रहा है और यह वास्तव में वर्णित के रूप में काम करता है। Spinrite 6 के बारे में grc.com पर अक्सर पूछे जाने वाले प्रश्न इंगित करता है कि 30 दिन की मनी बैक गारंटी है (और कोई परीक्षण या मुफ्त संस्करण नहीं है)। नोट: मैं grc.com से संबद्ध नहीं हूं, न ही मैं इसे आपकी स्थिति के लिए सुझा रहा हूं। मैं सिर्फ यह जानता हूं कि यह मौजूद है और विज्ञापन के रूप में काम कर सकता है, बस इसके लिए मेरा शब्द नहीं लेना चाहिए - कैविट एम्प्टर।

यह आकलन करने के संबंध में कि क्या गड्रेससर्क्यू "बेहतर है", कम से कम dd के संदर्भ में, एक परेशान क्षेत्र पर प्रदर्शन किए गए डिस्क रीड की मात्रा के बीच अंतर करने में सक्षम होने के कारण, किसी भी संख्या में एक खराब सेक्टर पर पढ़ता है (क्योंकि यह एक गैर के रूप में चिह्नित है। फ़र्मवेयर की सूची में रखे गए बुरे क्षेत्रों की सूची में कार्यात्मक क्षेत्र) मुझे ऐसा प्रतीत नहीं होगा कि यह किसी भी तरह के gddrescue या dd के गुणात्मक उपयोग में उपयोगी होगा।

आप इसे वेब पेज, dd (यूनिक्स) पर पढ़ने के लिए उपयोगी पा सकते हैं: https://secure.wikimedia.org/wikipedia/en/wiki/Gddrescue#Recovery-oriented_variants_of-dd

आपको यह देखने के लिए उपयोगी भी लग सकता है: UBCD, dd-बचाव और P2 eXplorer का उपयोग करके दुर्घटनाग्रस्त हार्ड ड्राइव की एक छवि कैसे बनाएं: http://www.myfixlog.com/fix.php?fid= 21

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.