सवाल rfsz1 vdev में zfs चेकसम त्रुटि लेकिन डिस्क में नहीं


मैं एक ज़ुलपूल में संग्रहीत डेटा का बैक अप ले रहा हूं जिसमें 2 हार्ड डिस्क वाले एकल रैडज़ वीडीवी शामिल हैं। इस ऑपरेशन के दौरान, मुझे चेकसम त्रुटियां मिलीं, और अब स्थिति निम्नानुसार दिखती है:

  pool: tmp_zpool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://zfsonlinux.org/msg/ZFS-8000-8A
  scan: none requested
config:

    NAME                  STATE     READ WRITE CKSUM
    tmp_zpool             ONLINE       0     0     2
      raidz1-0            ONLINE       0     0     4
        tmp_cont_0        ONLINE       0     0     0
        tmp_cont_1        ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:

        /some/file

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

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

अद्यतन करें: अगर मैंने त्रुटियों को साफ़ किया और पुनः प्रयास किया तो क्या गलत हो सकता है, इस बारे में एक स्पष्टीकरण की प्रतीक्षा कर दी, इसलिए मैं आगे बढ़ गया और कोशिश की। मैंने पहले किया था zpool clear, फिर zpool status कोई त्रुटि नहीं दिखाया। फिर, मैंने त्रुटियों वाली फाइलों को पढ़ने की कोशिश की (उनमें से 2 अंत में), लेकिन संबंधित ब्लॉक अभी भी खराब / अपठनीय के रूप में रिपोर्ट किए जा रहे थे। इस समय, zpool status अब चेकसम त्रुटियों में वृद्धि नहीं दिखाई गई है। इसके बाद, मैंने raidz1 vdev में डिस्क में से किसी एक को ऑफ़लाइन करने का प्रयास किया और प्रक्रिया को दोहराया, लेकिन परिणाम नहीं बदले। कुल मिलाकर, मैंने 1.6 टी में से 2 128 के ब्लॉक खो दिए।

उत्तर स्थिति: वर्तमान में, मुझे लगता है कि इस प्रश्न का कोई व्यापक जवाब नहीं है। अगर कोई एक लिखना या मौजूदा को संपादित करना चाहता है, तो कृपया निम्नलिखित को संबोधित करें:

  1. इस स्थिति के कारण क्या हो सकता है।
  2. इसके बारे में क्या किया जा सकता है।
  3. इसे कैसे रोका जा सकता था।

1 के लिए, सिद्धांत और उनकी समस्याएं प्रतीत होती हैं:

  • की पसंद raidz1 ऊपर raidz2। समस्या: किसी के लिए कम से कम 4 डिस्क की आवश्यकता है raidz2। जबकि अनावश्यकता की आवश्यकता स्पष्ट है, बार-बार यह सुझाव देना उपयोगी नहीं है कि अनावश्यकता में विफल होने का इलाज अधिक अनावश्यकता है। यह समझने के लिए और अधिक उपयोगी होगा कि आपके पास अनावश्यकता का सर्वोत्तम उपयोग कैसे किया जाए।

  • की पसंद raidz1 ऊपर mirror। समस्या: पहली नजर में, इनके बीच का अंतर दक्षता प्रतीत होता है, न कि अनावश्यकता। हालांकि यह गलत हो सकता है। क्यों: zfs प्रत्येक डिस्क पर प्रत्येक ब्लॉक के साथ एक चेकसम बचाता है, लेकिन न तो डिस्क ने व्यक्तिगत चेकसम त्रुटियों की सूचना दी। ऐसा लगता है कि प्रत्येक खराब ब्लॉक के लिए, 2 डिस्क में अलग-अलग ब्लॉक पेलोड होते थे, प्रत्येक मिलान करने वाले चेकसम के साथ, और जेएफएस यह बताने में असमर्थ था कि कौन सा सही है। इससे पता चलता है कि 2 अलग-अलग चेकसम गणनाएं थीं, और उनके बीच पेलोड किसी भी तरह बदल गया था। इसे रैम भ्रष्टाचार द्वारा समझाया जा सकता है, और शायद (एक पुष्टिकरण की आवश्यकता है) की पसंद के साथ mirror ऊपर raidz1, केवल एक चेकसम की आवश्यकता होगी।

  • लेखन के दौरान राम भ्रष्टाचार, पढ़ना नहीं। जैसा ऊपर बताया गया है, यह प्रतीत होता है। समस्या: यह लिखने के समय में त्रुटि के रूप में क्यों नहीं पाया गया था? क्या यह हो सकता है कि zfs यह नहीं देखता कि यह क्या लिखता है? या बल्कि, विभिन्न डिस्क पर लिखे गए ब्लॉक पेलोड समान हैं?

2 के लिए:

  • चूंकि डिस्क में कोई व्यक्तिगत चेकसम त्रुटियां नहीं हैं, इसलिए क्या ऐसे खराब ब्लॉक की 2 अलग-अलग प्रतियों तक पहुंच प्राप्त करने के लिए zfs में कुछ निम्न-स्तरीय तरीका है?

3 के लिए:

  • क्या यह स्पष्ट है mirror ऊपर raidz1 इस स्थिति को रोका होगा?

  • मुझे लगता है कि इस ज़पूल के एक साफ़ होने से समस्या का पता चला है। मेरे मामले में, मैं कुछ डेटा ले जा रहा था, और मैंने वास्तव में इस ज़पूल को पढ़ने से पहले स्रोत डेटा को नष्ट कर दिया, यह सोचकर कि मेरे पास 2 डिस्क रिडंडेंसी है। क्या इसकी सामग्री पर भरोसा करने से पहले नैतिक यहां एक ज़पूल साफ़ करना होगा? निश्चित रूप से स्क्रबिंग उपयोगी है, लेकिन क्या यह आवश्यक है? उदाहरण के लिए, एक स्क्रब के साथ जरूरी होगा mirror के बजाय raidz1?


6
2017-08-07 19:22


मूल


हम्म, RAID Z1 के साथ दो डिस्क भी समझ में नहीं आता है। दर्पण का उपयोग क्यों नहीं किया गया था? - ewwhite
मैं कबूल करता हूं कि मैं बेहतर नहीं जानता था। मेरा मतलब है, मैं अनावश्यकता की आवश्यकता को समझता हूं, लेकिन दर्पण और raidz1 के बीच 2 डिवाइसों के बीच अंतर नहीं। यह किसी भी तरह से एक अस्थायी सेटअप है, डेटा को raidz2 में 4 डिवाइसों पर ले जाने का एक हिस्सा है। - Matei David
@MateiDavid दो डिवाइस raidz1 और दो-डिवाइस दर्पण के बीच कुछ अंतर यह है कि दर्पण के साथ, कोई भी पक्ष किसी भी पढ़ने के अनुरोध को पूरा कर सकता है, और raidz1 के साथ, समानता डेटा को विशेष रूप से गणना करने की आवश्यकता होती है (जैसा कि दर्पण, जो सिर्फ सभी प्रतिबिंबित उपकरणों को एक ही चीज़ लिखता है)। तो 2-देव दर्पण की तुलना में 2-देव raidz1 के साथ, आप लचीलापन खो देते हैं (vdev में डिवाइस जोड़ या हटा नहीं सकते हैं) और आप संभावित रूप से I / O प्रदर्शन खो देते हैं (अनावश्यक डेटा गणनाओं के कारण)। एक शुरुआत के लिए... - α CVn
ठीक है, लेकिन यह सब एक अस्थायी भंडारण के लिए महत्वपूर्ण नहीं है, है ना? अनावश्यकता के अनुसार वे वही होना चाहिए। - Matei David


जवाब:


Raidz1 (और RAID5) के साथ यह समस्या है। यदि डिस्क पर डेटा बदलता है लेकिन ZFS या RAID नियंत्रक को यह जानने के लिए कोई ड्राइव गलती नहीं होती है कि कौन सी ड्राइव त्रुटि उत्पन्न करती है, तो यह नहीं पता कि कौन सी ड्राइव सही है। Raidz2 (और उच्चतर) या RAID6 के साथ, आपको ड्राइव का एक कोरम मिलता है जो कि यह तय कर सकता है कि कौन से ड्राइव पुनर्निर्माण के लिए अनदेखा कर सकते हैं।

यहां आपका एकमात्र समाधान फ़ाइल को ओवरराइट करना है, या तो बैकअप प्रतिलिपि या लेखन को पुनर्स्थापित करके /dev/null फ़ाइल में।


3
2017-08-07 20:51



चूंकि जेएफएस सीओडब्लू है, तो ओवरराइटिंग के लिए यह भी आवश्यक नहीं है कि कोई स्नैपशॉट खराब ब्लॉक को संदर्भित न करे? अन्यथा स्नैपशॉट खराब डेटा को इंगित करेंगे जो किसी भी निम्न स्क्रब के दौरान ट्रैवर्स किया जाएगा। - α CVn
मैं आपकी कहानियों के बारे में थोड़ा उलझन में हूं कि जेएफएस नहीं जानता कि कौन सा ड्राइव सही है। त्रुटि का पता लगाने में उपयोग किए गए वही चेकसम नहीं होंगे जो कि ड्राइव का पता लगाने में उपयोगी होंगे, या तो, वैध डेटा है? हालांकि शायद यह दो डिवाइस raidz1 सेटअप में और अधिक कठिन हो जाता है? (नोट: मैं बहस नहीं कर रहा हूं कि आपका जवाब गलत है; मुझे लगता है कि यह जेएफएस के विशिष्ट मामले में मामूली स्पष्टीकरण का उपयोग कर सकता है।) - α CVn
उपरोक्त वर्णित स्पष्टीकरण के अलावा, मैं यह भी पूछूंगा- क्या मैं त्रुटियों को साफ़ कर सकता हूं, ड्राइव में से किसी एक को ऑफ़लाइन कर सकता हूं, और उस फ़ाइल को फिर से पढ़ने का प्रयास कर सकता हूं? Vdev के लिए त्रुटियों के लिए इसका मतलब क्या है लेकिन व्यक्तिगत ड्राइव नहीं? यदि दोनों ड्राइव ठीक हैं लेकिन विचलित हैं (मैं पूरी तरह से समझ नहीं पा रहा हूं कि यह कैसे हो सकता है, लेकिन मान लें कि यह किया गया है), क्या मुझे फ़ाइल की 2 अलग-अलग प्रतियां मिल सकती हैं और हाथ से तय करना सही है? - Matei David
सभी डेटा / मेटाडाटा ब्लॉक पर चेकसम ZZ का उपयोग करने से ज़ेडएफएस को यह पता होना चाहिए कि कौन सा डेटा सही है और ZFS को गलत डेटा को सही करना चाहिए। यदि जेएफएस ऐसा नहीं कर सकता है, तो शायद यह पहले से ही गलत लिखा गया था (यही कारण है कि ईईसी मेमोरी की सिफारिश की जाती है, ताकि रैम बिट त्रुटियां cheksums को दूषित नहीं कर सकें)। - Sunzi


मैं एक समान मुद्दे में भाग रहा हूँ। मुझे यकीन नहीं है कि यह सहायक है, लेकिन मुझे यह प्रासंगिक पोस्ट एक फ्रीबीएसडी डेवलपर से vdev-level checksum त्रुटियों के बारे में मिला।

https://lists.freebsd.org/pipermail/freebsd-hackers/2014-October/046330.html

चेकसम त्रुटियां एक पत्ती के बजाय raidz vdev पर दिखाई देंगी यदि vdev_raidz.c यह निर्धारित नहीं कर सकता कि कौन सा पत्ता vdev जिम्मेदार था। यह तब हो सकता है जब दो या दो से अधिक पत्ते vdevs उसी ब्लॉक के लिए खराब डेटा लौटाते हैं, जिससे अप्राप्य डेटा त्रुटियों का भी कारण बनता है। मैं देखता हूं कि आपके पास कुछ अप्राप्य डेटा त्रुटियां हैं, इसलिए शायद यही हुआ   आप को।

जेएफएस में सूक्ष्म डिज़ाइन कीड़े भी vdev_raidz.c का कारण बन सकती हैं यह निर्धारित करने में असमर्थ है कि चेकसम त्रुटि के लिए कौन सा बच्चा ज़िम्मेदार था। हालांकि, मैंने केवल यह देखा है कि जब एक raidz vdev में दर्पण बच्चा होता है। यह केवल तभी हो सकता है जब बच्चा एक अतिरिक्त या वीडीवी बदल रहा हो। क्या आपने कोई स्पेयर सक्रिय किया है, या आपने मैन्युअल रूप से vdev को प्रतिस्थापित किया है?

मैं खुद को हटाने पर विचार कर रहा हूं zpool.cache फ़ाइल को पुन: उत्पन्न करने के लिए मेरे पूल को आयात और आयात करना zpool.cache फ़ाइल।


0
2017-09-02 01:16



मैं नहीं देखता कि ज़ूलपूल का पुन: आयात करने में क्या संभव सहायता होगी। - Michael Hampton♦
@MichaelHampton बुरी फाइलों को विशेष रूप से ढूंढने और त्यागने का कोई तरीका? कुछ के साथ zdb? - user260467
उम ... क्या आप सवाल का जवाब देने या एक प्रश्न पूछने की कोशिश कर रहे हैं? - Michael Hampton♦
दोनों - मेरे द्वारा पोस्ट की गई जानकारी का टुकड़ा किसी ऐसे व्यक्ति के लिए उपयोगी हो सकता है जो अधिक समझता है, लेकिन मैं भी अपनी ही इसी तरह की स्थिति के लिए संभावित सुधारों के बारे में सोच रहा हूं। - user260467
यह एक मंच नहीं है और इस तरह से काम नहीं करता है। यदि उत्तर के रूप में पोस्ट किया गया है, तो कोई भी आपके प्रश्न को यहां देख या जवाब नहीं देगा। मैंने इसे छोड़ दिया है इसलिये ऐसा लगता है कि मूल प्रश्न के उत्तर का कम से कम हिस्सा प्रदान करना प्रतीत होता है, लेकिन यदि आपके पास कोई नया प्रश्न है, तो आपको इसे इस तरह पोस्ट करना चाहिए। - Michael Hampton♦