मैं लिनक्स डिस्क पर एक भी अपठनीय ब्लॉक को आसानी से कैसे सुधार सकता हूं?


22

मेरे लिनक्स सिस्टम ने SARTlog में SMART त्रुटियों को फेंकना शुरू कर दिया है। मैंने इसे ट्रैक किया और माना कि समस्या डिस्क पर एक ब्लॉक है। मैं आसानी से डिस्क को पुनः प्राप्त करने के बारे में कैसे जाना है कि एक ब्लॉक? मैं जानना चाहता हूं कि इस प्रक्रिया में क्या फ़ाइल नष्ट हो गई। (मुझे पता है कि यदि डिस्क पर एक ब्लॉक विफल हो जाता है, तो दूसरे का अनुसरण करने की संभावना है; मेरे पास एक अच्छा चल रहा बैकअप है और बस इस डिस्क को काम करने की कोशिश करना चाहते हैं।)

वेब पर खोज करने से बैड ब्लॉक HOWTO होता है , जो एक अनमाउंट डिस्क पर मैन्युअल प्रक्रिया का वर्णन करता है। यह जटिल और त्रुटि-प्रवण लगता है। क्या लिनक्स में इस प्रक्रिया को स्वचालित करने के लिए एक उपकरण है? मेरा एकमात्र अन्य विकल्प निर्माता का नैदानिक ​​उपकरण है , लेकिन मुझे लगता है कि जो कुछ भी नष्ट हो गया है उस पर बिना किसी रिपोर्टिंग के खराब ब्लॉक को रोक देगा। सबसे खराब स्थिति, यह फाइल सिस्टम मेटाडेटा हो सकता है।

प्रश्न में डिस्क प्राथमिक प्रणाली विभाजन है। Ext3fs और LVM का उपयोग करना। यहाँ syslog से त्रुटि लॉग और स्मार्टक्टल से संबंधित बिट है।

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

पास्टबिन पर एक पूर्ण स्मार्टक्लेम्प डंप है


मुझे लगा कि डिस्क फर्मवेयर स्वचालित रूप से रीड पर खराब ब्लॉक को फिर से मैप करेगा, इसलिए सैद्धांतिक रूप से यह पहले ही हो चुका है। जैसा कि नीचे कहा गया है, सुनिश्चित करें कि ओवरलेइंग FS अभी भी स्थिर है, यह सुनिश्चित करने के लिए fsck (या अपने FS के लिए सही बराबर) चलाएं।
BuildTheRobots

2
मेरी समझ डिस्क फर्मवेयर केवल लिखने पर ब्लॉक को रीमैप करेगी , पढ़ने पर नहीं। इसलिए वास्तव में मुझे प्रश्न में ब्लॉक को लिखने के लिए मजबूर करने की आवश्यकता है।
नेल्सन

1
मैंने आखिरकार इस डिस्क को रिटायर कर दिया। यह कई महीनों तक ठीक रहा, लेकिन 5 वीं पठन त्रुटि के बाद मैंने इसे छोड़ दिया।
नेल्सन

जवाबों:


12

आप कोशिश कर सकते हैं hdparm --write-sector <LBA> /dev/ice

मुझे ऐसा करने का कोई अन्य तरीका नहीं पता है - आपको मैन्युअल रूप से LBA को फाइल सिस्टम ब्लॉक में बदलने की आवश्यकता है (जैसा कि आप पहले ही पा चुके हैं)


ऊह, यह एक नया झंडा है! यह निश्चित रूप से खराब ब्लॉक को पुनः प्राप्त करने का ध्यान रखेगा। अब मुझे इसकी आवश्यकता है कि यह क्या होगा?
नेल्सन

3
डिस्क को ठीक करने के लिए इस विधि का उपयोग करने के बाद, मैं कह सकता हूं कि यह सही विधि है। विचाराधीन क्षेत्र के लिए एक लिखने के लिए मजबूर करने से ड्राइव को सेक्टर का सामना करने के लिए मजबूर किया जाएगा और या तो (ए) एक सफल लेखन प्राप्त करेगा, या (बी) एक रिमैप के साथ एक स्थायी खराब दूसरे के साथ समाप्त होगा।
प्रवीण

महान! और की तुलना में इतना आसान smartmontools.sourceforge.net/badblockhowto.html
Janning

यह अजीब है कि यह पुनरावृत्ति प्रक्रिया (SMART के माध्यम से अगले बुरे क्षेत्र की तलाश और इसे फिर से आवंटित करने के लिए मजबूर करना) एक साधारण उपयोगिता के साथ स्वचालित नहीं है! ..
imz - Ivan Zakharyaschev

32

मैं WD के लिए डिस्क फर्मवेयर लिखता था, और मैंने एक बार फर्मवेयर लिखा था जो खराब ब्लॉकों को फिर से असाइन करता था।

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

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

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

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

खराब ब्लॉकों से निपटने के अन्य तरीके हैं, जिन्हें दोबारा लागू नहीं किया जा सकता है। यदि ड्राइव एक अनावश्यक RAID कॉन्फ़िगरेशन (यानी, कुछ भी लेकिन RAID 0) का हिस्सा है, तो RAID सॉफ़्टवेयर को अन्य ड्राइव से खराब क्षेत्र के लिए डेटा को स्वचालित रूप से पुनर्प्राप्त करना चाहिए और इसे वास्तविक क्षेत्र में लिखना चाहिए। SCSI डिस्क में एक स्पष्ट रीसाइन ब्लॉक ब्लॉक कमांड होता है, जिसका उपयोग होस्ट ब्लॉक को लिखने के लिए कोई मान्य डेटा नहीं होने पर भी पुन: असाइनमेंट को बाध्य करने के लिए कर सकता है, लेकिन इसका उपयोग काफी निम्न स्तर का होता है।


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

2

मुझे लगता है कि आपको बस इतना करना है:

e2fsck -c /dev/hda1

संभालने / देव / hda1 विभाजन (unmounted) है। या:

e2fsck -c -c /dev/hda1

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


लेकिन यह एक अफ़सोस की बात है कि SMART से जानकारी का उपयोग बुरे-ब्लॉक के बारे में नहीं लगता है। मुझे आश्चर्य है कि कोई भी ऐसा फेक टूल क्यों नहीं है जो SMART से खराब ब्लॉक की जानकारी का उपयोग करेगा और उन्हें स्मार्टमोंटूलम . sourceforge.net/badblockhowto.html या serverfault.com/a/1061616/68972 में बताई गई फाइलों से बचने या उनकी मरम्मत करने की कोशिश करेगा । ..
imz - इवान ज़खरीशेव

2

माइकल ने इसे सही कर दिया है और ज्यादातर मामलों में मैं यही कहूंगा कि वे उस ड्राइव को बदलें जो वे सस्ते हैं। हालाँकि, यदि आपके पास बैकअप नहीं है और आप ड्राइव से महत्वपूर्ण डेटा प्राप्त नहीं कर सकते हैं, या केवल ड्राइव को सुधारने का प्रयास करना चाहते हैं, तो हो सकता है कि आप उच्चतम स्तर पर स्पिनराइट का उपयोग करके प्रयास करना चाहें

मेरे पास एक लैपटॉप ड्राइव था जिसने कुछ साल पहले कुछ शोर करना शुरू कर दिया था। बैडब्लॉक ने दिखाया कि ड्राइव में 118 या इतने बुरे ब्लॉक थे जो अंतिम उपयोगकर्ता को दिखाई देते थे। चूंकि मेरे पास पहले से ही स्पिनराइट की एक प्रति थी, इसलिए मैंने एक नई ड्राइव खरीदने से पहले इसे देने का फैसला किया। ड्राइव पर स्पिनराइट चलाने के बाद बैडब्लॉक ने 0 खराब ब्लॉक दिखाए और शोर बंद हो गया। ड्राइव तब से दो साल से काम कर रहा था।


नेल्सन क्या आप केवल हर उस उत्तर को वोट करने जा रहे हैं जो आप सुनना नहीं चाहते हैं? एक स्वस्थ ड्राइव स्वचालित रूप से एक खराब ब्लॉक को हटा देगा। यदि आपको इस रास्ते से बाहर जाने के लिए कुछ भी करने के लिए मजबूर करना है तो यह ड्राइव स्वस्थ नहीं है और इसे बदल दिया जाना चाहिए।
3dinfluence

नहीं, मैंने केवल एक प्रतिक्रिया को अस्वीकार कर दिया क्योंकि यह मेरे प्रश्न का उत्तर नहीं देती थी। आपने स्पिनराइट का सुझाव दिया, धन्यवाद! मेरी समझ यह है कि जब तक यह लिखा नहीं जाता है तब तक एक स्वस्थ अभियान एक खराब क्षेत्र को फिर से तैयार नहीं करेगा । मैं लिखने के लिए सबसे सरल तरीका खोजने की कोशिश कर रहा हूं। मैथ्यू के सुझाव पर जा रहे हैं और देखें कि क्या यह करने के लिए fsck काफी स्मार्ट है।
नेल्सन

क्षमा करें, मैंने 2 निष्कर्षों को जल्दी से देखने के बाद वहां निष्कर्ष पर पहुंच गया और आपने दूसरे उत्तर का जवाब दिया जो मैंने माना था कि आप थे।
डीइंफ्लुएंस

2
आप सही हैं कि खराब सेक्टर रीमैप तब होता है जब कोई ब्लॉक करने में विफल रहता है। यदि आपके पास अभी तक एक दूषित ब्लॉक है जहां तक ​​फ़ाइल सिस्टम का संबंध है तो fsck आपके मुद्दे को सुलझा सकता है यदि प्रश्न में ब्लॉक मेटाडेटा ब्लॉक है। fsck वास्तव में सिर्फ स्कैन करता है और मेटाडेटा में त्रुटियों को ठीक करता है। इसलिए यह डेटा पर कोई गारंटी नहीं देता है। BTRFS और ZFS जैसे अगले जीन फाइलसिस्टम पता लगा सकते हैं और यदि आपके पास अतिरेक सही डेटा त्रुटियाँ हैं। स्पिनराइट इसे भी पढ़ता है, क्योंकि यह उलटा डेटा, रेरहेड्स लिखता है, फिर अपने स्कैन के हिस्से के रूप में प्रत्येक ब्लॉक पर डेटा को वापस इन्वर्ट करता है।
डीइंफ्लुएंस

1

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

मैं MHDD का उपयोग करना काफी आसान होगा और जब तक आप अपने HDD को Bios में IDE इम्यूलेशन पर सेट करना याद रखते हैं और तब AHCI में वापस आते हैं जब आपका काम पूरा हो जाता है तो आपको चिंता करने की कोई बात नहीं है।

एक बार जब आप MHDD को बूट करते हैं तो ERASE कमांड में अपना ड्राइव टाइप चुनें और अपनी पसंद की पुष्टि करें।

अपने आप को कॉफ़ी प्राप्त करें, इसमें कुछ समय लग सकता है।

ड्राइव के बाद रीमैप सेट ऑन (डिफ़ॉल्ट बंद है) के साथ रन स्कैन (एफ 4) शून्य हो जाता है। यदि ड्राइव के साथ अभी भी समस्याएँ हैं (इसका मतलब होगा कि प्लेटर पर एक फिजिकल क्षति है और ड्राइव एक स्टेडी नीचे की तरफ ढलान पर है) यह विकल्प ड्राइव के स्वस्थ भागों में क्षतिग्रस्त क्षेत्र को मैप करके उन्हें "ठीक" करेगा।

यदि कोई UNC त्रुटियां नहीं हैं, तो आपको बधाई और आपकी ड्राइव अभी भी आने वाले वर्षों के लिए मित्र हो सकती है।


-1

यदि डिस्क खराब हो रही है, तो उसे बदल दें। यह जोखिम के लायक नहीं है कि यह और अधिक गिर जाएगा।


मैं यह जानने के बारे में स्पष्ट था कि डिस्क खराब है और जोखिम से बचने के लिए बैकअप है।
नेल्सन

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

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