Linux md RAID: / dev / md0 vs. / dev / md / 0


19

บนระบบที่ใหม่กว่า/usr/share/mdadm/mkconf(สคริปต์ที่ใช้ในการสร้าง/etc/mdadm/mdadm.conf) มีแนวโน้มที่จะใช้ชื่ออุปกรณ์/dev/md/0แทน/dev/md0:

new-system ~ # /usr/share/mdadm/mkconf | grep ARRAY
ARRAY /dev/md/0 metadata=1.2 UUID=a0021927:0e4f10bf:2c47dc72:ca0b352e name=unassigned:0

สิ่งนี้อาจทำให้เกิดการระคายเคืองสำหรับผู้ใช้ที่คาดหวัง/dev/md0แต่ดูเหมือนว่าจะทำงานได้ดีเพราะเซิร์ฟเวอร์บู๊ตโดยไม่มีปัญหา

ใน/proc/mdstatอุปกรณ์ยังคงเรียกว่า/dev/md0:

new-system ~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[2] sda2[0]
      1953381184 blocks super 1.2 [2/2] [UU]

unused devices: <none>

lsแสดงให้เห็นว่า/dev/md/0เป็น symlink ไปที่/dev/md0:

new-system ~ # ls -l /dev/md/0 
lrwxrwxrwx 1 root root 6 Nov 20 14:06 /dev/md/0 -> ../md0

ในระบบรุ่นเก่าอื่นmkconfยังคงใช้/dev/md0แทนและ/dev/mdว่างเปล่า

old-system ~ # /usr/share/mdadm/mkconf | grep ARRAY
ARRAY /dev/md0 UUID=76472cf5:83fd8e5a:ad617046:69b2ebf1
old-system ~ # ls -l /dev/md
total 0

ฉันต้องการทราบความแตกต่างระหว่างชื่ออุปกรณ์เหล่านี้และฉันไม่พบคำอธิบายใด ๆ ใน Google เป็น/dev/mdNชื่อเก่าและmdวางแผนจะย้ายไปที่/dev/md/Nชื่ออุปกรณ์หรือไม่ การเปลี่ยนแปลงนี้เกี่ยวข้องกับข้อมูลเมตา 1.2 หรือไม่ (ฉันสังเกตว่าเซิร์ฟเวอร์ใหม่ใช้ md 1.2 ในขณะที่เซิร์ฟเวอร์เก่ายังใช้ 0.90 อยู่)


แก้ไข 2017-09-11: ฉันคิดว่า คำตอบของ Krzysztof Stasiak เป็นคำตอบที่ถูกต้อง ตอนนี้ฉันลืมคำถามนี้ไปหมดแล้ว ในขณะที่เล่นกับการทดสอบ RAID เมื่อวันศุกร์ที่ผ่านมาฉันคิดว่า "ทำไมไม่ตั้งชื่ออาร์เรย์ของฉันแทนการจดจำสิ่งที่ md0, md1, md2, ... ฯลฯ ในการตั้งค่าที่ซับซ้อน" และดังนั้นฉันจึงพยายาม:

test-server ~ # mdadm --assemble /dev/mdfoobar /dev/loop[01]
mdadm: /dev/mdfoobar is an invalid name for an md device.  Try /dev/md/mdfoobar

และใช้งานได้จริง:

test-server ~ # mdadm --assemble /dev/md/foobar /dev/loop[01]
mdadm: /dev/md/foobar has been started with 2 drives.

test-server ~ # ll /dev/md/foobar 
lrwxrwxrwx 1 root root 6 Sep 11 10:45 /dev/md/foobar -> ../md0

test-server ~ # cat /proc/mdstat 
Personalities : [raid1]
md0 : active (auto-read-only) raid1 loop0[0] loop1[1]
      102272 blocks super 1.2 [2/2] [UU]

unused devices: <none>

(คุณสามารถทำได้mdadm --assemble foobar DEV...)

มีคำอธิบายรายละเอียดในการเป็นส่วนman mdadmDEVICE NAMES



@frostschutz อาดังนั้นชื่ออาร์เรย์จากmdadm -Eที่อยู่unassigned:0ในเซิร์ฟเวอร์ใหม่จะถูกแยกที่:และส่วนที่สองกลายเป็นส่วนหนึ่งของ/dev/md/<name>? ดังนั้นถ้าฉันเปลี่ยนชื่ออาร์เรย์unassigned:asdfเป็น symlink จะถูกเรียก/dev/md/asdf? และอุปกรณ์จริงจะถูกเรียกเสมอ/dev/mdNโดยที่ N คือหมายเลขฟรีถัดไป
Martin von Wittich

1
คุณสามารถใช้วิธีนี้ได้ แต่ไม่มีใครทำ มันใช้งานไม่ได้จริง ๆ แล้วโดยปกติ md จะถูกสร้างขึ้นจาก live cd ที่ไม่มีชื่อโฮสต์ของคุณ ฯลฯ ชื่อเช่นunassigned:0นั้นเป็นเพียงความคิด
frostschutz

คำตอบ:


1

คุณสามารถตั้งชื่ออาร์เรย์เป็นชื่อของตัวเอง (ไม่เพียง 0-127) และตั้งแต่ mdadm 3.0.3 คุณสามารถใช้ชื่อได้เท่านั้น หากคิดว่าพา ธ ถูกเปลี่ยนเป็นใช้โฟลเดอร์ย่อย/dev/md/$nameเพื่อเพิ่มความยืดหยุ่นหรืออาเรย์แบบกลุ่มหรือแบบบางอย่าง หาก md array ถูกสร้างในรูปแบบ/dev/mdXจะมี symlink เพิ่มเพื่อให้ความสามารถในการจัดรูปแบบใหม่


1

เมื่อมันมาถึงชื่ออุปกรณ์, ดีขอudev เพื่อความเข้าใจของฉัน

  1. md%dการตั้งชื่อที่ถูกนำมาใช้โดย kernel มันถูกสร้างขึ้นโดยคนขับโดยตรงmd.c # L5284และก็ใช้ในและ/proc/partitions sysfsดังนั้นจึงปรากฏใน/dev

  2. /dev/md/...และ/dev/disk/by-id/...ถูกสร้างขึ้นเป็น symlink โดย udevd ในระบบของฉันกฎที่เกี่ยวข้องจะถูกเก็บไว้ใน/usr/lib/udev/rules.d/63-md-raid-arrays.rules:

    ...
    ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}"
    ...
    

ดูเหมือนว่าไฟล์ udev มาจากopenSUSE 11.1-rc3การกระทำนี้ใน mdadm ฉันตรวจสอบไฟล์นี้openSUSE 11.0แล้ว แต่มันไม่มีmd/%dsymlink ...


0

เส้นทางเดิมอาจแตกต่างกันไปขึ้นอยู่กับรุ่นเคอร์เนล Linux หรือระบบ Unix ลิงก์สัญลักษณ์/dev/md/Nอาจมีอยู่เนื่องจากเหตุผลด้านความเข้ากันได้ /dev/mdNโปรแกรมหรือสคริปต์ที่อาจจะใช้เส้นทางนี้แทน

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