एक ज़ूल में एक मृत डिस्क की जगह


31

मैं मूल ZFS का उपयोग करके Ubuntu सर्वर 13.04 64-बिट चला रहा हूं। मेरे पास एक ज़ूल है जिसमें 4 हार्ड ड्राइव हैं जिनमें से एक की कल मृत्यु हो गई थी और अब इसे OS या BIOS द्वारा मान्यता नहीं दी जा रही है।

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

zpool status hermes -x

प्रिंट

root@zeus:~# zpool status hermes -x
  pool: hermes
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

मैंने पहले ही ड्राइव को एक नए के साथ बदल दिया (जिसे लेबल मिला /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ)

आज्ञाओं में से कोई एक

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

के साथ विफल रहता है

root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

क्योंकि ड्राइव का लेबल जो मर गया है वह सिस्टम में मौजूद नहीं है। मैंने ड्राइव के लेबल को बिना किसी लाभ के छोड़ने के रास्ते से ऊपर के कमांड की कोशिश की।

मैं "भूत" डिस्क को कैसे बदल सकता हूं?

जवाबों:


38

इस रात को पूरी तरह खोदने के बाद आखिरकार मुझे इसका हल मिल गया। संक्षिप्त उत्तर यह है कि आप डिस्क 'GUIDs का उपयोग कर सकते हैं (जो ड्राइव को डिस्कनेक्ट करने के बाद भी बनी रहती है) zpool

लंबे उत्तर: मुझे zdbकमांड का उपयोग करके डिस्क का GUID मिला, जिसने मुझे निम्नलिखित आउटपुट दिया

root@zeus:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

मैं जिस GUID की तलाश कर रहा था, वह 15935140517898495532मुझे करने में सक्षम था

root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

और फिर

root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

फिर से काम पूरा होने के बाद सब कुछ फिर से अच्छा हो गया। इस जानकारी को शामिल करना अच्छा होगा, जिससे आप डिस्क के GUID के माध्यम से प्राप्त कर सकते हैंzdb के साथ zpoolआदेश, zpool की मैनपेज साथ।

संपादित करें

जैसा कि zdbकमांड के नीचे ड्यूरेवल द्वारा बताया गया है कि कुछ भी आउटपुट नहीं हो सकता है। तब आप उपयोग करने का प्रयास कर सकते हैं

zdb -l /dev/<name-of-device>

डिवाइस के बारे में जानकारी को स्पष्ट रूप से सूचीबद्ध करने के लिए (भले ही वह पहले से सिस्टम से गायब हो)।


कूल, फिर -nस्विच का उपयोग करके रनिंग करने से पहले , लेकिन -gस्विच यूयूआईडी को इस तरह से भी पकड़ लेगा।
ब्रायन थॉमस

धन्यवाद यह काफी मददगार था क्योंकि मैं वेब के आसपास poking के बारे में जानकारी नहीं पा सका था zdb से चमकता हुआ सामान।
xamox

मैं हफ़्तों से खोज कर रहा था और आखिरकार इस जवाब ने चाल चली। लेकिन zpool status(sdab जैसे नाम) द्वारा सूचीबद्ध आईडी /dev/disk/by-id(पागल लंबी आईडी नामों) के पथ के समान नहीं थे । लेकिन ls -la /dev/disk/by-idपता चलता है कि वे सभी लिंक हैं /dev/...इसलिए मैंने अपने UNAVAIL (और बाद में ऑफ़लाइन) डिस्क की ओर इशारा करते हुए पाया, और मैं इन चरणों को सफलतापूर्वक पूरा करने में सक्षम था। यह अब लचीला हो रहा है। धन्यवाद!
मैट

GUID प्राप्त करने का एक वैकल्पिक छोटा तरीका है zpool status -gजो प्रत्येक डिवाइस के लिए GUID का उपयोग करके स्थिति दिखाता है। इसके अलावा, @Matt के लिए, zpool status -Lलंबे /dev/disk/by-idनामों के बजाय मूल डिवाइस नामों का उपयोग करके स्थिति दिखाएगा ।
स्टारनेम

आप अपने समाधान के साथ एक वास्तविक एमवीपी वापस आ रहे हैं। इसने मेरे लिए काम किया।
जूसी

3

मुद्दा यह है कि आईडी आईडी द्वारा संदर्भित हैं और डिवाइस द्वारा नहीं।

यहाँ एक समाधान है जो काम करना चाहिए:

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

संपादित करें: मैं 30 सेकंड देर से था ...


धन्यवाद। मैं लापता ड्राइव के लिए एक खाली लिंक बनाने की कोशिश कर रहा था, लेकिन यह कहती रही no such device in pool
मार्कस

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

इस पद्धति का उपयोग करके मैं वास्तव में इसे हटाए बिना "दोष" ड्राइव को ऑनलाइन प्राप्त करने में कामयाब रहा (इसलिए मैंने छोड़ दिया offlineऔर replaceकदम)। मैंने नल लिंक को हटाने के बाद दूसरी बार पूल का आयात किया। शायद यह ड्राइव लेबल के साथ सिर्फ एक मुद्दा था? वास्तव में, ड्राइव नाम एक ही रहा। मैंने बाद में पूरा स्क्रब किया और कोई त्रुटि नहीं पाई गई।
सेरानो

2

@ मारकस: अपने स्वयं के प्रश्न के इस उत्कृष्ट उत्तर को पोस्ट करने के लिए धन्यवाद, इसने मेरी बहुत मदद की।

दूसरे दिन मुझे एक ऐसा मोड़ मिला, जिसमें आपकी रुचि हो सकती है (और कोई भी जो भविष्य में यहां आता है) - मेरे पास एक कैश डिवाइस था जिसे पूल से हटा दिया गया था (और "UNAVAIL" के रूप में चिह्नित किया गया था) इसी त्रुटि के कारण (ZFS-8000-4J, "लेबल गायब है या अमान्य है"), और इसे ऑफ़लाइन करने / हटाने / बदलने की कोशिश करने में विफल रहा "बिल्कुल ऐसा ही नहीं" पूल में ऐसा कोई उपकरण नहीं "संदेश।

लेकिन, जब मैंने आपके समाधान को लागू करने का प्रयास किया, तो सादा "zdb" (बिना किसी तर्क के) डिवाइस को सूचीबद्ध नहीं किया , बहुत कम इसकी GUID।

कुछ खुदाई के बाद, मैंने पाया कि "zdb -l / dev / DEVICENAME" ने GUID को सूचीबद्ध किया (इसे सीधे डिवाइस से ले रहा है, और पूल रिकॉर्ड से नहीं), और उस GUID का उपयोग करके मुझे प्रतिस्थापन करने में सक्षम किया (वास्तव में ऐसा नहीं किया था) "ज़ूल ऑफ़लाइन" और उसके बाद "ज़ूल हट", जो पूरी तरह से काम करता है)।


धन्यवाद! आपकी टिप्पणी के संदर्भ में मेरे स्वयं के स्वीकृत उत्तर में एक संकेत जोड़ा गया।
मार्कस

मेरे लिए, zdb -l /dev/...हमेशा "लेबल अनपैक करने में विफल" दिखाया गया।
मैट

0

मेरा मुद्दा भी ऐसा ही था:

ड्राइव इस तरह से विफल हो गया कि यह BIOS में अब पंजीकृत नहीं हुआ (पूरी तरह से मृत)। zpool statusसंकेत दिया है कि यह थाUNAVAILABLE

मैं में एक समान क्षमता ड्राइव रखा, और मैं एक नया रूप में यह आवंटित करने में कामयाब रहे spareकि था INUSEऔर ड्राइव resilvered। लेकिन, यह वास्तव में ज़ूल का हिस्सा नहीं था, बल्कि पूल में गायब ड्राइव की स्मृति थी, यह सोचकर कि यह किसी दिन फिर से दिखाई देगा।

समाधान को पहले गायब ड्राइव को ज़ूल से छोड़ना था:

[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

फिर, चिह्नित किए गए ड्राइव को spare-1 INUSEभी छोड़ें :

[root@hactar ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

एक बार जब मैंने ऐसा किया, तो ऐसा लगता है कि FreeNAS ने यह पता लगा लिया कि मेरे बिना एक replaceकमांड करना है , हालांकि यदि आपका सिस्टम इसे स्वयं नहीं समझ पाता है, तो निम्न कमांड को एक डिवाइस को दूसरे के साथ बदलना चाहिए:

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

उदाहरण के लिए:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • मेरी zpool statusआज्ञा से gptids आया ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.