सवाल फ्रीबीएसडी पर जेएफएस: डेटा भ्रष्टाचार से वसूली


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

2 पूल हैं:

  • zpool01: 2x 4x 500GB
  • zpool02: 1x 4x 160GB

जो काम करता है वह खाली है, टूटा हुआ सभी महत्वपूर्ण डेटा रखता है:

[user@host~]$ uname -a
FreeBSD host.domain 7.2-RELEASE FreeBSD 7.2-RELEASE #0: \
  Fri May  1 07:18:07 UTC 2009                          \
  root@driscoll.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64

[user@host ~]$ dmesg | grep ZFS
WARNING: ZFS is considered to be an experimental feature in FreeBSD.
ZFS filesystem version 6
ZFS storage pool version 6

[user@host ~]$ sudo zpool status
  pool: zpool01
 state: UNAVAIL
 scrub: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    zpool01     UNAVAIL      0     0     0  insufficient replicas
      raidz1    UNAVAIL      0     0     0  corrupted data
        da5     ONLINE       0     0     0
        da6     ONLINE       0     0     0
        da7     ONLINE       0     0     0
        da8     ONLINE       0     0     0
      raidz1    ONLINE       0     0     0
        da1     ONLINE       0     0     0
        da2     ONLINE       0     0     0
        da3     ONLINE       0     0     0
        da4     ONLINE       0     0     0

  pool: zpool02
 state: ONLINE
 scrub: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    zpool02     ONLINE       0     0     0
      raidz1    ONLINE       0     0     0
        da9     ONLINE       0     0     0
        da10    ONLINE       0     0     0
        da11    ONLINE       0     0     0
        da12    ONLINE       0     0     0

errors: No known data errors

मैं कुछ हफ्ते पहले पूल तक पहुंचने में सक्षम था। तब से, मुझे मेजबान मशीन के सभी हार्डवेयर को बहुत अधिक बदलना पड़ा और कई होस्ट ऑपरेटिंग सिस्टम स्थापित करना पड़ा।

मेरा संदेह यह है कि इन ओएस इंस्टॉलेशन में से एक ने 500 जीबी ड्राइव के एक बूटलोडर (या जो भी) को लिखा था (कुछ भी?) और कुछ ज़पूल मेटाडाटा (या जो कुछ भी) को नष्ट कर दिया - 'या जो कुछ भी मतलब है कि यह सिर्फ एक बहुत ही अस्पष्ट विचार है और वह विषय बिल्कुल मेरी मजबूत पक्ष नहीं है ...


ZFS के बारे में बहुत सारी वेबसाइटें, ब्लॉग, मेलिंग सूचियां इत्यादि हैं। मैं इस सवाल को यहां आशा करता हूं कि यह मुझे अपने डेटा को वापस पाने के लिए एक साधु, संरचित, नियंत्रित, सूचित, जानकार दृष्टिकोण के लिए पर्याप्त जानकारी एकत्र करने में मदद करता है - और उम्मीद है कि उसी स्थिति में किसी और की मदद करें।


'Zfs पुनर्प्राप्ति' के लिए googling जब पहली खोज परिणाम है जेडएफएस समस्या निवारण और डेटा रिकवरी सोलारिस जेएफएस प्रशासन गाइड से अध्याय। पहली बार में जेएफएस विफलता मोड खंड, यह 'दूषित जेएफएस डेटा' पैराग्राफ में कहता है:

डेटा भ्रष्टाचार हमेशा स्थायी रहता है और मरम्मत के दौरान विशेष विचार की आवश्यकता होती है। भले ही अंतर्निहित डिवाइस की मरम्मत या प्रतिस्थापित किया गया हो, मूल डेटा हमेशा के लिए खो जाता है।

कुछ हद तक निराशाजनक।

हालांकि, दूसरा गूगल खोज परिणाम है मैक्स ब्रूनिंग का वेबलॉग और वहां, मैंने पढ़ा

हाल ही में, मुझे किसी ऐसे व्यक्ति से एक ईमेल भेजा गया था जिसमें 10 टीबी जेएफएस पूल में संग्रहीत 15 साल का वीडियो और संगीत था, जो बिजली की विफलता के बाद दोषपूर्ण हो गया। दुर्भाग्य से वह बैकअप नहीं था। वह फ्रीबीएसडी 7 पर जेएफएस संस्करण 6 का उपयोग कर रहा था     [...]   डिस्क पर डेटा की जांच करने में लगभग 1 सप्ताह खर्च करने के बाद, मैं मूल रूप से इसे सभी बहाल करने में सक्षम था।

तथा

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

(यह कुछ ऐसा लगता है जो मैं सुनना चाहता हूं ...)

पहला कदम: वास्तव में समस्या क्या है ?

मैं कैसे निदान कर सकता हूं कि वास्तव में ज़ूलपूल को दूषित क्यों किया गया है? मैं देखता हूं कि zdb है जो वेब पर कहीं भी सूर्य या ओरेकल द्वारा आधिकारिक रूप से प्रलेखित नहीं होता है। अपने मैन पेज से:

NAME
       zdb - ZFS debugger

SYNOPSIS
       zdb pool

DESCRIPTION
       The  zdb  command is used by support engineers to diagnose failures and
       gather statistics. Since the ZFS file system is  always  consistent  on
       disk  and is self-repairing, zdb should only be run under the direction
       by a support engineer.

       If no arguments are specified, zdb, performs basic  consistency  checks
       on  the pool and associated datasets, and report any problems detected.

       Any options supported by this command are internal to Sun  and  subject
       to change at any time.

इसके अलावा, बेन रॉकवुड ने एक पोस्ट किया है विस्तृत लेख और एक है वीडियोमैक्स के 28 जून, 2008 को प्राग में ओपन सोलारिस डेवलपर सम्मेलन में इसके बारे में बात करना (और एमडीबी)।

टूटा हुआ ज़ूल पर रूट के रूप में zdb चलाना निम्न आउटपुट देता है:

[user@host ~]$ sudo zdb zpool01
    version=6
    name='zpool01'
    state=0
    txg=83216
    pool_guid=16471197341102820829
    hostid=3885370542
    hostname='host.domain'
    vdev_tree
        type='root'
        id=0
        guid=16471197341102820829
        children[0]
                type='raidz'
                id=0
                guid=48739167677596410
                nparity=1
                metaslab_array=14
                metaslab_shift=34
                ashift=9
                asize=2000412475392
                children[0]
                        type='disk'
                        id=0
                        guid=4795262086800816238
                        path='/dev/da5'
                        whole_disk=0
                        DTL=202
                children[1]
                        type='disk'
                        id=1
                        guid=16218262712375173260
                        path='/dev/da6'
                        whole_disk=0
                        DTL=201
                children[2]
                        type='disk'
                        id=2
                        guid=15597847700365748450
                        path='/dev/da7'
                        whole_disk=0
                        DTL=200
                children[3]
                        type='disk'
                        id=3
                        guid=9839399967725049819
                        path='/dev/da8'
                        whole_disk=0
                        DTL=199
        children[1]
                type='raidz'
                id=1
                guid=8910308849729789724
                nparity=1
                metaslab_array=119
                metaslab_shift=34
                ashift=9
                asize=2000412475392
                children[0]
                        type='disk'
                        id=0
                        guid=5438331695267373463
                        path='/dev/da1'
                        whole_disk=0
                        DTL=198
                children[1]
                        type='disk'
                        id=1
                        guid=2722163893739409369
                        path='/dev/da2'
                        whole_disk=0
                        DTL=197
                children[2]
                        type='disk'
                        id=2
                        guid=11729319950433483953
                        path='/dev/da3'
                        whole_disk=0
                        DTL=196
                children[3]
                        type='disk'
                        id=3
                        guid=7885201945644860203
                        path='/dev/da4'
                        whole_disk=0
                        DTL=195
zdb: can't open zpool01: Invalid argument

मुझे लगता है कि अंत में 'अमान्य तर्क' त्रुटि होती है क्योंकि zpool01 वास्तव में अस्तित्व में नहीं है: यह काम करने वाले zpool02 पर नहीं होता है, लेकिन ऐसा लगता है कि कोई और आउटपुट नहीं है ...

ठीक है, इस चरण में, लेख को बहुत लंबा होने से पहले इसे पोस्ट करना शायद बेहतर है।

शायद कोई मुझे यहां से आगे बढ़ने के बारे में कुछ सलाह दे सकता है और जब मैं प्रतिक्रिया की प्रतीक्षा कर रहा हूं, तो मैं वीडियो देखूंगा, उपरोक्त zdb आउटपुट के विवरणों के माध्यम से जाउंगा, बेन्स लेख पढ़ सकता हूं और यह पता लगाने की कोशिश करता हूं कि क्या है क्या...


20110806-1600 + 1000

अद्यतन 01:

मुझे लगता है कि मुझे मूल कारण मिला है: मैक्स ब्रूनिंग बहुत जल्दी मेरे ईमेल का जवाब देने के लिए काफी दयालु था, आउटपुट के लिए पूछना zdb -lll। पूल के 'अच्छे' raidz1 आधा में 4 हार्ड ड्राइवों में से किसी एक पर, आउटपुट जो मैंने ऊपर पोस्ट किया है उसके समान है। हालांकि, 'टूटा हुआ' आधा में 4 ड्राइव के पहले 3 पर, zdb रिपोर्ट failed to unpack label लेबल 2 और 3 के लिए। पूल में चौथा ड्राइव ठीक लगता है, zdb सभी लेबल दिखाता है।

गुस्सा है कि त्रुटि संदेश लाता है ये पद। उस पोस्ट की पहली प्रतिक्रिया से:

जेएफएस के साथ, यह प्रत्येक पर 4 समान लेबल हैं   भौतिक vdev, इस मामले में एक एकल हार्ड ड्राइव।   वीडीवी की शुरुआत में एल 0 / एल 1, और   Vdev के अंत में एल 2 / एल 3।

पूल में सभी 8 ड्राइव एक ही मॉडल के हैं, Seagate Barracuda 500 जीबी। हालांकि, मुझे याद है कि मैंने 4 ड्राइव के साथ पूल शुरू किया था, फिर उनमें से एक की मृत्यु हो गई और सीगेट द्वारा वारंटी के तहत बदल दिया गया। बाद में, मैंने एक और 4 ड्राइव जोड़े। इसी कारण से, ड्राइव और फर्मवेयर पहचानकर्ता अलग हैं:

[user@host ~]$ dmesg | egrep '^da.*?: <'
da0:  <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device 
da1:  <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device 
da2:  <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device 
da3:  <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device 
da4:  <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device 
da5:  <ATA ST3500320AS SD15> Fixed Direct Access SCSI-5 device 
da6:  <ATA ST3500320AS SD15> Fixed Direct Access SCSI-5 device 
da7:  <ATA ST3500320AS SD15> Fixed Direct Access SCSI-5 device 
da8:  <ATA ST3500418AS CC35> Fixed Direct Access SCSI-5 device 
da9:  <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device 
da10: <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device 
da11: <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device 
da12: <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device 

मुझे याद है कि सभी ड्राइवों का आकार समान था। अब ड्राइव को देखते हुए, यह दिखाता है कि उनमें से तीन के लिए आकार बदल गया है, वे 2 एमबी से कम हो गए हैं:

[user@host ~]$ dmesg | egrep '^da.*?: .*?MB '
da0:   10240MB (20971520  512 byte sectors: 255H 63S/T 1305C)
da1:  476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da2:  476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da3:  476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da4:  476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da5:  476938MB (976771055 512 byte sectors: 255H 63S/T 60801C) <--
da6:  476938MB (976771055 512 byte sectors: 255H 63S/T 60801C) <--
da7:  476938MB (976771055 512 byte sectors: 255H 63S/T 60801C) <--
da8:  476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da9:  152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da10: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da11: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da12: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)

तो इसकी प्रकृति से, यह ओएस इंस्टॉलेशन में से एक नहीं था जिसने 'एक ड्राइव में बूटलोडर लिखा था' (जैसा कि मैंने पहले माना था), यह वास्तव में नया मदरबोर्ड था (एक ASUS P8P67 LE) एक 2 एमबी बनाना मेजबान संरक्षित क्षेत्र तीनों ड्राइव के अंत में जो मेरे जेएफएस मेटाडाटा को गड़बड़ कर दिया।

यह सभी ड्राइव पर एचपीए क्यों नहीं बनाया? मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि एचपीए सृजन केवल पुराने ड्राइव पर किया जाता है जिसमें एक सीगेट हार्ड ड्राइव BIOS अद्यतन द्वारा तय किया गया था: जब यह पूरी घटना कुछ हफ्ते पहले शुरू हुई, तो मैंने सीगेट की दौड़ की SeaTools यह जांचने के लिए कि ड्राइव के साथ शारीरिक रूप से गलत कुछ भी है (अभी भी पुराने हार्डवेयर पर) और मुझे एक संदेश मिला है कि मेरे कुछ ड्राइव को BIOS अपडेट की आवश्यकता है। चूंकि अब मैं उस संदेश के सटीक विवरण और फर्मवेयर अपडेट डाउनलोड के लिंक को पुन: उत्पन्न करने की कोशिश कर रहा हूं, ऐसा लगता है कि चूंकि मदरबोर्ड ने एचपीए बनाया है, इसलिए सागरटूल डॉस संस्करण दोनों प्रश्नों में कठिनाइयों का पता लगाने में असफल हो जाते हैं - एक त्वरित invalid partitionया जब वे शुरू होते हैं तो कुछ समान चमकें, यही वह है। विडंबना यह है कि, हालांकि, उन्हें सैमसंग ड्राइव का एक सेट मिल गया है।

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

शुरू होने पर, विंडोज के लिए साइटटूल इस संवाद को सामने लाते हैं:

SeaTools Firmware Update Dialog

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

मैं उस समय तीन ड्राइवों के फर्मवेयर को अपडेट करने में भाग नहीं पाऊंगा, जिन्होंने विभाजन को छोटा कर दिया है और टूटे हुए स्टोरेज पूल का हिस्सा हैं। वह परेशानी के लिए पूछ रहा है। स्टार्टर्स के लिए, फर्मवेयर अपडेट को अधिकतर पूर्ववत नहीं किया जा सकता है - और यह मेरे डेटा को वापस पाने के लिए मेरी संभावनाओं को अपरिवर्तनीय रूप से बर्बाद कर सकता है।

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

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

टूटी हुई पूल में छोटी गाड़ी BIOS के साथ तीन ड्राइव के लिए इमेज प्रतिस्थापन के रूप में काम करने वाली तीन हार्ड ड्राइव को साफ़ करने के लिए, मुझे वहां मौजूद सामानों के लिए कुछ संग्रहण स्थान बनाना होगा, इसलिए मैं गहरी खुदाई करूंगा हार्डवेयर बॉक्स और कुछ पुरानी ड्राइव से एक अस्थायी ज़पूल इकट्ठा करें - जिसे मैं यह भी जांचने के लिए उपयोग कर सकता हूं कि ZFS कैसे dd'd ड्राइव को स्वैप करने के साथ संबंधित है।

इसमें कुछ समय लग सकता है...


20111213-1930 + 1100

अद्यतन 02:

इसमें वास्तव में कुछ समय लगा। मैंने अपने डेस्क पर कई खुले कंप्यूटर मामलों के साथ महीनों बिताए हैं, जिसमें हार्डड्राइव स्टैक की विभिन्न मात्राएं लटक रही हैं और कुछ रातें इयरप्लग के साथ सो गई हैं, क्योंकि मैं बिस्तर पर जाने से पहले मशीन को बंद नहीं कर सका क्योंकि यह कुछ लंबा महत्वपूर्ण ऑपरेशन चला रहा था । हालांकि, मैं आखिरकार जीत गया! :-) मैंने प्रक्रिया में बहुत कुछ सीखा है और मैं इस ज्ञान को किसी भी स्थिति में किसी के लिए साझा करना चाहता हूं।

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

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

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

मैंने कुछ मेक-शिफ्ट कार्डबोर्ड हार्ड ड्राइव फिक्स्चर बनाने में कुछ मिनट बिताए जो वास्तव में चीजों को हल करने में मदद करता था:

some of the make-shift storage space just a bunch of screws plus some cardboard the fan is not exactly required, the stack is from an earlier project the distance pieces aren't required either...

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

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

sudo dd if=/dev/sda of=/dev/sde

मेरा मानना ​​है कि जेएफएस हार्डवेयर परिवर्तन (कुछ हार्ड ड्राइव यूयूआईडी या जो कुछ भी) द्वारा नोटिस करता है, लेकिन इसकी परवाह नहीं है।

हालांकि ज़पूल अभी भी एक ही राज्य में था, अपर्याप्त प्रतिकृतियां / दूषित डेटा।

जैसा कि उल्लेख किया गया है एचपीए विकिपीडिया लेख पहले उल्लेख किया गया है, जब एक होस्ट संरक्षित क्षेत्र की उपस्थिति की सूचना दी जाती है जब लिनक्स बूट करता है और इसका उपयोग करके जांच की जा सकती है hdparm। जहां तक ​​मुझे पता है, फ्रीबीएसडी पर कोई एचडीपार्म टूल उपलब्ध नहीं है, लेकिन इस समय तक, मैंने फ्रीबीएसडी 8.2 और डेबियन 6.0 को दोहरी बूट प्रणाली के रूप में स्थापित किया था, इसलिए मैंने लिनक्स में बूट किया:

user@host:~$ for i in {a..l}; do sudo hdparm -N /dev/sd$i; done

   ...
/dev/sdd:
 max sectors   = 976773168/976773168, HPA is disabled
/dev/sde:
 max sectors   = 976771055/976773168, HPA is enabled
/dev/sdf:
 max sectors   = 976771055/976773168, HPA is enabled
/dev/sdg:
 max sectors   = 976771055/976773168, HPA is enabled
/dev/sdh:
 max sectors   = 976773168/976773168, HPA is disabled
   ...

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


एचपीए के साथ डबलिंग एक खतरनाक व्यवसाय लगता है। Hdparm मैन पेज से, पैरामीटर -एन:

Get/set max visible number of sectors, also known as the Host Protected Area setting.
  ...
To change the current max (VERY DANGEROUS, DATA LOSS IS EXTREMELY LIKELY), a new value
should be provided (in base10) immediately following the -N option.
This value is specified as a count of sectors, rather than the "max sector address"
of the drive. Drives have the concept of a temporary (volatile) setting which is lost on
the next hardware reset, as well as a more permanent (non-volatile) value which survives
resets and power cycles.  By default, -N affects only the temporary (volatile) setting.
To change the permanent (non-volatile) value, prepend a leading p character immediately
before the first digit of the value. Drives are supposed to allow only a single permanent
change per session. A hardware reset (or power cycle) is required before another
permanent -N operation can succeed.
  ...

मेरे मामले में, एचपीए इस तरह हटा दिया गया है:

user@host:~$ sudo hdparm -Np976773168 /dev/sde

/dev/sde:
 setting max visible sectors to 976773168 (permanent)
 max sectors   = 976773168/976773168, HPA is disabled

और एक ही तरह से एक एचपीए के साथ अन्य ड्राइव के लिए। यदि आपको गलत ड्राइव या आपके द्वारा निर्दिष्ट आकार पैरामीटर के बारे में कुछ मिलता है तो यह उचित नहीं है, hdparm समझने के लिए पर्याप्त स्मार्ट है:

user@host:~$ sudo hdparm -Np976773168 /dev/sdx

/dev/sdx:
 setting max visible sectors to 976773168 (permanent)
Use of -Nnnnnn is VERY DANGEROUS.
You have requested reducing the apparent size of the drive.
This is a BAD idea, and can easily destroy all of the drive's contents.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.

उसके बाद, मैंने फ्रीबीएसडी 7.2 वर्चुअल मशीन को पुनरारंभ किया जिस पर ज़पूल मूल रूप से बनाया गया था और ज़ूलपूल स्थिति ने फिर से एक वर्किंग पूल की सूचना दी थी। वाह! :-)

मैंने वर्चुअल सिस्टम पर पूल निर्यात किया और मेजबान फ्रीबीएसडी 8.2 सिस्टम पर इसे फिर से आयात किया।

कुछ और प्रमुख हार्डवेयर अपग्रेड, एक और मदरबोर्ड स्वैप, जेएफएस 4/15 में एक जेएफएस पूल अपडेट, पूरी तरह से स्क्रबिंग और अब मेरे ज़पूल में 8x1TB प्लस 8x500GB raidz2 भाग होते हैं:

[user@host ~]$ sudo zpool status
  pool: zpool
 state: ONLINE
 scrub: none requested
config:

NAME        STATE     READ WRITE CKSUM
zpool       ONLINE       0     0     0
  raidz2    ONLINE       0     0     0
    ad0     ONLINE       0     0     0
    ad1     ONLINE       0     0     0
    ad2     ONLINE       0     0     0
    ad3     ONLINE       0     0     0
    ad8     ONLINE       0     0     0
    ad10    ONLINE       0     0     0
    ad14    ONLINE       0     0     0
    ad16    ONLINE       0     0     0
  raidz2    ONLINE       0     0     0
    da0     ONLINE       0     0     0
    da1     ONLINE       0     0     0
    da2     ONLINE       0     0     0
    da3     ONLINE       0     0     0
    da4     ONLINE       0     0     0
    da5     ONLINE       0     0     0
    da6     ONLINE       0     0     0
    da7     ONLINE       0     0     0

errors: No known data errors

[user@host ~]$ df -h
Filesystem         Size    Used   Avail Capacity  Mounted on
/dev/label/root     29G     13G     14G    49%    /
devfs              1.0K    1.0K      0B   100%    /dev
zpool              8.0T    3.6T    4.5T    44%    /mnt/zpool

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


41
2017-08-03 09:44


मूल


कुछ भी करने से पहले, उन ड्राइव को चित्रित करें! यदि आप इसे और खराब करते हैं तो अपने 'भ्रष्ट' डेटा का बैकअप लें। - MikeyB
हाँ, यह एक बहुत अच्छा मुद्दा है! और यही कारण है कि मैंने इस आलेख को अभी तक अपनी प्रगति के साथ अपडेट नहीं किया है - अभी भी व्यस्त प्रतिस्थापन हार्ड ड्राइव को साफ़ करने में व्यस्त है ... - ssc


जवाब:


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

जेएफएस विभाजन मेटा सूचना के साथ 4 लेबल रखता है और एचपीए जेएफएस को ऊपरी दो को देखने से रोकता है।

समाधान: बूट लिनक्स, एचपीए का निरीक्षण और निकालने के लिए एचडीपार्म का उपयोग करें। बहुत सावधान रहें, यह आपके डेटा को आसानी से नष्ट कर सकता है। विवरण के लिए लेख और एचडीपार्म मैन पेज (पैरामीटर-एन) से परामर्श लें।

समस्या न केवल नए मदरबोर्ड के साथ होती थी, ड्राइव को एसएएस नियंत्रक कार्ड से कनेक्ट करते समय मुझे एक ही समस्या थी। समाधान वही है।


22
2017-12-13 10:47





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

मैंने पहले ऐसा किया है और कई बार मुझे इसकी आवश्यकता नहीं थी, लेकिन बार मैं किया था इसे पूरी तरह से प्रयास के लायक बनाने की जरूरत है।

नेट के बिना काम मत करो।


4
2017-08-26 07:17



दरअसल, मैं अनुशंसा करता हूं ddrescue ऊपर dd। जब ड्राइव पूरी तरह से काम कर रहे हों तो यह वास्तव में बहुत अलग काम नहीं करता है (लेकिन यह आपको एक अच्छा प्रगति संकेत देता है) लेकिन यदि कोई समस्याग्रस्त क्षेत्र या ऐसा कुछ है, तो डीडीआरईसीयू उस स्थिति को डीडी करता है (या तो मैं कहा गया है)। - α CVn


आप इसे हल करने के लिए ट्रैक पर लग रहे हैं। यदि आप एक और चाहते हैं, तो संभवतः नए दृष्टिकोण को आप सोलारिस 11 एक्सप्रेस लाइव सीडी का प्रयास कर सकते हैं। वहां बहुत नया कोड चल रहा है (सोलारिस में ज़पूल अब संस्करण 31 पर है, जबकि आप संस्करण 6 पर हैं) और यह बेहतर रिकवरी संभावनाएं प्रदान कर सकता है। भागो मत zpool upgrade सोलारिस के तहत हालांकि यदि आप फ्रीबीएसडी के तहत पूल को माउंट करने योग्य रखना चाहते हैं।


1
2017-08-09 21:06



उस टिप के लिए धन्यवाद! :-) मैं 200 9 में ओपन सोलालिसिस में वापस देख रहा था या इसलिए जब मैंने इस पूरे जेएफएस व्यवसाय को शुरू किया, लेकिन दुर्भाग्य से, यह उन नियंत्रकों का समर्थन नहीं करता जो मैं उपयोग कर रहा हूं - यह उपभोक्ता ग्रेड हार्डवेयर है। हाल ही में, मैंने ओपन इंडियाना को भी देखा है, लेकिन मुझे यकीन नहीं है कि स्थिति बदल गई है या नहीं। मैं कुछ चरणों में नियंत्रकों को एसएएस में अपग्रेड कर सकता हूं और फिर माइग्रेट करने पर विचार कर सकता हूं। - ssc
मुझे लगता है कि ओपनइंडियाना एक नए रूप के लायक हो सकता है। यदि कुछ और नहीं है, तो वे ओरेकल की तुलना में "सस्ते" हार्डवेयर के लिए अधिक अनुकूल हो सकते हैं ... मैंने लाइव सीडी की सिफारिश की क्योंकि यह कोशिश करना आसान है - आप इसे वीएम में भी चला सकते हैं। - Jakob Borg


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


0
2017-08-05 20:08





मैंने फ्रीबीएसडी 10.3 से 11.1 तक अपग्रेड करने के बाद एक ही समस्या का अनुभव किया, इसके बाद ज़पूल को गलती हुई और डेटा को पुनर्प्राप्त करने का कोई तरीका नहीं था, भले ही डेटा zdb -lll सभी चार लेबल मान्य कर दिया।

यह पता चला है कि किसी भी तरह से अद्यतन ने इंटेल स्टोरेज प्रबंधन ड्राइवरों को डिस्क से मुलायम दर्पण बनाने के लिए ट्रिगर किया (शायद यह सक्षम था लेकिन समर्थित नहीं है geomपोस्ट-अपडेट तक इंटेल प्रदाता?) और जिसने डिस्क को आरोहित करने से ZFS को अवरुद्ध कर दिया।

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

साइड नोट: मेरे मामले में, hdparm (एक लाइव उबंटू सर्वर आईएसओ से चल रहा है) ने बताया कि सभी डिस्क पर एचबीए अक्षम कर दिया गया था और मदद करने में सक्षम नहीं था।


0
2018-04-13 20:48





अगर यह किसी तरह का एक विभाजन मुद्दा था, तो मैं ड्राइव विभाजन + एमबीआर डीडी करता हूं और विभाजन को सही आकार देता हूं ...

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


-2
2017-09-05 20:11