मैं एक mdadm RAID सरणी का नाम कैसे बदलूं?


23

किसी कारण से, जब मैं एक पाठ नाम के लिए एक mdadm छापे सरणी का नाम बदलने की कोशिश करता हूं, तो परिवर्तन नहीं होता है।

मैंने इस सर्वरफॉल्ट प्रश्न से सलाह लेने की कोशिश की , लेकिन कोई फायदा नहीं हुआ।

~$ mdadm --version
mdadm - v3.1.4 - 31st August 2010

~$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 17:59:37 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ sudo mdadm --stop /dev/md0
mdadm: stopped /dev/md0

~$ sudo mdadm --assemble /dev/md/alpha --update=name /dev/sd[gf]
mdadm: /dev/md/alpha has been started with 2 drives.

~$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 18:06:11 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdf[0] sdg[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md126 : active (auto-read-only) raid1 sdd[0] sde[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md127 : active (auto-read-only) raid1 sdb[0] sda[1]
      976762496 blocks [2/2] [UU]

unused devices: <none>

जैसा कि आप देख सकते हैं, नाम अभी omicron:0भी पुराने डिवाइस फ़ाइल के माध्यम से उपलब्ध है और अभी भी पहुंच योग्य है। कोशिश sudo mdadm --detail /dev/md/alphaकरना काम करेगा, और अगले रिबूट तक उसी, गलत, नाम की रिपोर्ट करेगा, जब वह काम करना बंद कर देगा।

ऐसा लगता है जैसे जब पता लगाना है कि किस नाम में डाल दिया जाए, तो mdadm गड़बड़ हो जाता है और बस इसके बजाय डिवाइस फ़ाइल बनाता है।


एएसआईडीई

क्या mdadm को सुपरब्लॉक के स्पष्ट रूप से फिर से बनाने के लिए सुपरब्लॉक के नाम के हिस्से को अपडेट करने का कोई मतलब है (यानी स्पष्ट रूप से वह नाम जिसे आप चाहते हैं कि सरणी है)? (यानी sudo mdam --zero-superblock /dev/sd[fg]; sudo mdadm --create /dev/md/alpha --raid-devices=2 --level=1 --assume-clean --name=alpha /dev/sd[fg])


समस्या यह है कि रिबूट के बाद, ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=c66a267...mdadm.conf में जोड़ने के बावजूद , नामित डिवाइस फ़ाइल गायब हो जाती है और इसे मानक प्रारूप में से एक के साथ बदल दिया जाता है। (/ देव / md125 या समान)

मैं एक नामांकित mdadm सरणी का नाम कैसे रख सकता हूं? - यानी - मैं बूट के बीच डिवाइस फ़ाइलों को जारी रखने के लिए ubuntu कैसे कर सकता हूं?

जवाबों:


19

आपको इसे वास्तव में इस --name=तरह से नाम देना होगा :

sudo mdadm --assemble /dev/md/alpha --name=newname --update=name /dev/sd[gf]

रिबूट पर लगातार व्यवहार करने के लिए आपको डिवाइस के अंतिम भाग की तुलना में --name तर्क में एक ही नाम का उपयोग करना होगा। यहाँ यह होगा: sudo mdadm --assemble / dev / md / Alpha --name = Alpha --update = name / dev / sd [gf]

पूर्ण विवरण के लिए नीचे खसाद की पोस्ट देखें।


1
इस कमांड लाइन के लिए एक मामूली अपडेट, स्पष्टता के लिए, एक उल्लू की तरह मैं '--updep =' के बाद सरणी के मूल नाम में दर्ज किया गया था। sudo mdadm --assemble /dev/md/alpha --name={newname} --update=name /dev/sd[gf] आशा है कि समझ में आता है या यह स्पष्ट करता है ....
anastrophe

नमस्ते, कमांड जारी करने के बाद # sudo mdadm --assemble / dev / md127 --name = md0 --update = name / dev / sd [ab] मुझे mdadm मिलता है: / dev / sda व्यस्त है - स्किपिंग mdadm: / dev / sdb व्यस्त है - किसी भी Yougths लंघन? बेशक, मैंने पहले सरणी को अनमाउंट किया है!
रेजर

2
@ रेजर 7mdadm --stop --scan md127
डैनियल

12

उबटन बनाने का तरीका जूते के पार नाम परिवर्तन को जारी रखने के लिए अपने initramfs को अद्यतन करना है। अपना सरणी नाम और mdadm.conf अपडेट करने के बाद, आपको निम्न कमांड जारी करने की आवश्यकता है:

sudo update-initramfs -u

संपूर्ण प्रक्रिया:

sudo mdadm --stop /dev/md125
sudo mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[fg]
sudo mdadm -Db /dev/md/alpha

तीसरे कमांड को कुछ इस तरह लौटना चाहिए:

ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=5b024352:3a940335:233aa23f:5c6b2a1f

परिणाम को /etc/mdadm/mdadm.conf (पुरानी पंक्ति की जगह) में चिपकाएँ। या निष्पादित करें:

sudo mdadm -Db /dev/md/alpha >> /etc/mdadm/mdadm.conf

अगला रन:

sudo update-initramfs -u

अंत में, रिबूट।

यह चर्चा उपयोगी थी


8

पिल और एनएन द्वारा पहला जवाब काम करता है।

यहां ट्रिक यह है कि जब आप --nameविकल्प को निर्दिष्ट नहीं करते हैं तो केवल नामकरण द्वारा mdadmआवंटित डिवाइस नंबर से आवंटित नाम निर्दिष्ट करना है। इस प्रश्न में यह 0 है इसलिए नया सरणी नाम 0 है।

चूँकि आप डिवाइस नाम ("अल्फ़ा") को निर्दिष्ट करते हैं, असेम्बल कमांड में उपयोग करने के लिए यह डिवाइस नाम बनाएगा और उपयोग करेगा। लेकिन ऑटोस्टार्ट mdadmमें सुपरब्लॉक में देखे जाने वाले नाम के आधार पर एक डिवाइस बनाता है, जो कि इस मामले में 0 है, इसलिए आपके असेंबल कमांड में आपके द्वारा निर्दिष्ट डिवाइस का नाम खो जाता है।

अपने नाम को चिपचिपा और सुसंगत बनाने के लिए, आपको उसी नाम का उपयोग अपने डिवाइस के अंतिम भाग में और अपने पुराने नाम में करना होगा। इस स्थिति में, डिवाइस "अल्फ़ा" के लिए आपको इस कमांड लाइन का उपयोग करना होगा:

mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[gf]

आप होस्टनाम भी बदल सकते हैं, ऐसा करने के लिए आपको -name=<hostname>:<array_name>सिंटैक्स का उपयोग करके इसे स्पष्ट रूप से घोषित करना होगा ।

यह एक मशीन नाम परिवर्तन के बाद उदाहरण के लिए उपयोगी हो सकता है।


2

ऐसा लगता है जैसे कि आप जो उत्तर चाहते हैं वह mdadm मैन पेज में सही है

[create, build, grow]
      -N, --name=
          Set  a name for the array.  This is **currently only effective when creat‐
          ing an array** with a version-1 superblock, or an  array  in  a  DDF  con‐
          tainer.   The  name is a simple textual string that can be used to iden‐
          tify array components when assembling.  If name is needed but not speci‐
          fied, it is taken from the basename of the device that is being created.
          e.g. when creating /dev/md/home the name will default to home.

और इकट्ठा करने के लिए

       -N, --name=
          Specify the name of the array to assemble.  **This must be the  name  that
          was  specified  when  creating the array**.  It must either match the name
          stored in the superblock exactly, or it  must  match  with  the  current
          homehost prefixed to the start of the given name.

जो बताता है कि नाम विशेषता सेट होने के बाद चिपचिपा क्यों नहीं है। यदि आपको यह काम करने के लिए मिला है, तो कृपया एक टिप्पणी के साथ ack करें, जिसमें उत्तर आपके लिए ट्रिक था। वैकल्पिक रूप से, आप हमेशा एक udev नियम और एंकर के रूप में सरणी के UUID का उपयोग करके सहानुभूति बना सकते हैं।

मुझे फर्जी नाम को /etc/mdadm.conf में जोड़ने की बात नहीं दिख रही है, आप पहले से ही UUID का उपयोग कर रहे हैं जो विहित सरणी नाम है। एक और चर जोड़ना, जिसे आप बदलने के लिए फिट देखते हैं, बस अनावश्यक रखरखाव है और परेशानी के लिए पूछ रहा है जैसे सरणी शुरू करने में विफल रहता है।

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


1

नाम बदलने के बाद, क्या आपने अपना अद्यतन करने का प्रयास किया mdadm.conf?

 mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm.conf

0

mdadm में एक बग होता है जब छापे की मात्रा आंतरिक रूप से उनके नाम की जगह के साथ बनाई गई थी। उत्पन्न /etc/mdadm/mdadm.conf फ़ाइल में प्रारूप त्रुटि के कारण ये वॉल्यूम सही ढंग से माउंट नहीं होंगे। आपको वहां उनका नाम बदलने की आवश्यकता है लेकिन यह लगातार नहीं होगा। इसलिए आंतरिक नामों का नाम बदलना आवश्यक है ... लेकिन यह उन सभी RAID कंट्रोलरों पर समर्थित नहीं है जो अपने मेटाडेटा को ब्लॉक करते हैं और नाम विकल्प का समर्थन नहीं करते हैं। मैं नहीं देखता कि इन संस्करणों का नाम कैसे बदला जाए (भले ही वे आंतरिक रूप से उनके यूयूआईडी द्वारा संदर्भित हों, नामों का उपयोग लिनक्स द्वारा किया जाता है; इसके विपरीत विंडोज में ऐसा कोई बग नहीं है और उनके नाम में रिक्त स्थान वाले RAID वॉल्यूम बिल्कुल हैं)

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