ฉันจะเปลี่ยนชื่ออาเรย์การโจมตี mdadm ได้อย่างไร


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 บังคับให้อัปเดตส่วนชื่อของ superblock (เช่นตั้งค่าชื่อที่คุณต้องการให้อาร์เรย์มี) โดยไม่ต้องสร้าง superblock อย่างชัดเจนอีกครั้งหรือไม่ (เช่น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 ไฟล์อุปกรณ์ที่ระบุชื่อจะหายไปและถูกแทนที่ด้วยหนึ่งในรูปแบบมาตรฐาน (/ dev / md125 หรือคล้ายกัน)

ฉันจะทำให้อาร์เรย์ mdadm ที่ถูกเปลี่ยนชื่อรักษาชื่อไว้ได้อย่างไร? - Ie - ฉันจะทำให้อูบุนตูยังคงมีอยู่ไฟล์อุปกรณ์ระหว่างบูทได้อย่างไร?

คำตอบ:


19

คุณต้องให้ชื่อจริงด้วย--name=เช่น:

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

เพื่อให้มีพฤติกรรมที่สอดคล้องกันมากกว่าการรีบูตคุณต้องใช้ชื่อเดียวกันในอาร์กิวเมนต์ - ชื่อกว่าในส่วนสุดท้ายของอุปกรณ์ นี่มันจะเป็น: sudo mdadm - ประกอบ / dev / md / alpha --name = alpha --update = ชื่อ / dev / sd [gf]

ดูโพสต์ของ Khassad ด้านล่างสำหรับคำอธิบายแบบเต็ม


1
การปรับปรุงเล็กน้อยในบรรทัดคำสั่งนี้เพื่อความชัดเจนเช่นเดียวกับ boob ฉันป้อนชื่อดั้งเดิมของอาร์เรย์หลังจาก '--update =' sudo mdadm --assemble /dev/md/alpha --name={newname} --update=name /dev/sd[gf] หวังว่ามันสมเหตุสมผลหรือทำให้ชัดเจนยิ่งขึ้น ....
anastrophe

สวัสดีหลังจากออกคำสั่ง # sudo mdadm - ประกอบ / dev / md127 --name = md0 --update = ชื่อ / dev / sd [ab] ฉันได้รับ mdadm: / dev / sda ไม่ว่าง - ข้าม mdadm: / dev / sdb ไม่ว่าง - ข้ามเจ้ามีอะไรบ้าง? แน่นอนฉันได้ยกเลิกการต่อเชื่อมแถวลำดับแรกแล้ว!
razor7

2
@ razor7mdadm --stop --scan md127
Daniel Dinnyes

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

คำตอบแรกโดย pille และ NN ทำงาน

เคล็ดลับที่นี่คือเมื่อคุณไม่ระบุ--nameตัวเลือกการเปลี่ยนชื่อที่ทำได้โดยการmdadmกำหนดชื่ออาร์เรย์จากหมายเลขอุปกรณ์ที่จัดสรรไว้ ในคำถามนี้มันคือ 0 ดังนั้นชื่ออาร์เรย์ใหม่คือ 0

เนื่องจากคุณระบุชื่ออุปกรณ์ ("อัลฟา" ที่นี่) เพื่อใช้ในคำสั่งประกอบมันจะสร้างและใช้ชื่ออุปกรณ์นี้ แต่ที่ autostart mdadmสร้างอุปกรณ์ตามชื่อที่เห็นใน superblock นั่นคือ 0 ในกรณีนี้ดังนั้นชื่ออุปกรณ์ที่คุณระบุในคำสั่งประกอบของคุณจะหายไป

เพื่อให้ชื่อของคุณเปลี่ยนเหนียวและเชื่อมโยงกันคุณจะต้องใช้ชื่อเดียวกันในส่วนสุดท้ายของชื่ออุปกรณ์ของคุณและในชื่ออาร์เรย์ใหม่ของคุณ ในกรณีนี้สำหรับอุปกรณ์ "alpha" คุณจะต้องใช้บรรทัดคำสั่งนี้:

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.

ซึ่งอธิบายว่าทำไมแอตทริบิวต์ชื่อไม่เหนียวหลังจากที่ตั้งค่า หากคุณทำให้มันใช้งานได้โปรดตอบด้วยความคิดเห็นซึ่งคำตอบนั้นเป็นเคล็ดลับสำหรับคุณ หรือคุณสามารถสร้าง symlink ได้ตลอดเวลาโดยใช้กฎ udev และ UUID ของอาร์เรย์เป็นตัวยึด

ฉันไม่เห็นจุดในการเพิ่มชื่อปลอมลงใน /etc/mdadm.conf คุณกำลังใช้ UUID ซึ่งเป็นชื่ออาร์เรย์แบบบัญญัติ การเพิ่มตัวแปรอื่นที่คุณเห็นว่าเหมาะสมที่จะเปลี่ยนแปลงนั้นเป็นเพียงการบำรุงรักษาที่ไม่จำเป็นและการถามถึงปัญหาเช่นอาร์เรย์ไม่สามารถเริ่มต้นได้

นอกเหนือจากการสังเกตเหล่านี้สถานที่ที่ดีที่สุดที่จะไปทำความเข้าใจว่าทำไมคุณไม่สามารถอัปเดตชื่อที่รันไทม์คือการ ping รายการส่งเมล linux-raid


1

หลังจากคุณเปลี่ยนชื่อแล้วคุณลองอัปเดตของคุณmdadm.confหรือไม่

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

0

mdadm มีข้อผิดพลาดเมื่อโวลุ่มการโจมตีถูกสร้างขึ้นภายในโดยมีช่องว่างในชื่อ วอลุ่มเหล่านี้จะไม่เชื่อมต่ออย่างถูกต้องเนื่องจากข้อผิดพลาดของรูปแบบในไฟล์ /etc/mdadm/mdadm.conf ที่สร้างขึ้น คุณต้องเปลี่ยนชื่อที่นั่น แต่จะไม่ขัดข้อง ดังนั้นการเปลี่ยนชื่อชื่อภายในจึงเป็นสิ่งจำเป็น ... แต่ไม่รองรับตัวควบคุม RAID ทั้งหมดที่ปิดกั้นข้อมูลเมตาของพวกเขาและไม่สนับสนุนตัวเลือกชื่อ ฉันไม่เห็นวิธีการเปลี่ยนชื่อไดรฟ์ข้อมูลเหล่านี้ (แม้ว่าพวกเขาจะอ้างอิงภายในโดย UUID ของพวกเขาชื่อที่ใช้โดย Linux; Windows ในทางตรงกันข้ามไม่มีข้อผิดพลาดดังกล่าวและสมบูรณ์แบบโวลุ่ม RAID ที่มีช่องว่างในชื่อ)!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.