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

19

Auf neueren Systemen /usr/share/mdadm/mkconf(das Skript, das zum Generieren verwendet wird /etc/mdadm/mdadm.conf) wird in der Regel der Gerätename /dev/md/0anstelle von /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

Dies kann einige Irritationen für Benutzer verursachen, die es erwarten /dev/md0, aber anscheinend funktioniert es einwandfrei, da der Server ohne Probleme startet.

Im /proc/mdstatGerät heißt noch /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>

lszeigt das /dev/md/0ist ein symlink zu /dev/md0:

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

Auf einem anderen älteren System wird mkconfimmer noch verwendet /dev/md0und /dev/mdist leer:

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

Ich möchte den Unterschied zwischen diesen Gerätenamen kennen und kann bei Google keine Erklärung finden. Ist /dev/mdNder alte Name und mdbeabsichtigt er, zu /dev/md/NGerätenamen zu wechseln ? Bezieht sich diese Änderung auf die 1.2-Metadaten (ich habe bemerkt, dass der neue Server md 1.2 verwendet, während der alte noch 0.90 verwendet)?


EDIT 2017-09-11: Ich denke, Krzysztof Stasiaks Antwort ist die richtige. Diese Frage hatte ich inzwischen völlig vergessen. Während ich letzten Freitag mit einem Test-RAID spielte, dachte ich: "Warum sollte ich mein Array nicht benennen, anstatt zu merken, was md0, md1, md2 usw. in komplexen Setups macht?"

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

Und das funktioniert tatsächlich:

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>

(Sie können auch tun mdadm --assemble foobar DEV...).

Eine ausführliche Erklärung finden Sie im man mdadmAbschnitt DEVICE NAMES.

Martin von Wittich
quelle
@frostschutz ah, also wird der Arrayname von dem mdadm -E, der aktuell unassigned:0auf dem neuen Server ist, am geteilt :, und der zweite Teil wird Teil des /dev/md/<name>? Wenn ich also den Array-Namen in ändern unassigned:asdfwürde, würde der Symlink aufgerufen werden /dev/md/asdf? Und das eigentliche Gerät wird immer angerufen /dev/mdN, wobei N die nächste freie Nummer ist?
Martin von Wittich
1
Sie könnten es so benutzen, aber niemand tut es; es funktioniert nicht wirklich, da das md normalerweise von einer Live-CD erstellt wird, auf der Ihr Hostname nicht festgelegt ist, usw. Ein Name wie unassigned:0ist nur ein Kopf.
Frostschutz

Antworten:

1

Sie können array als eigenen Namen benennen (nicht nur 0-127) und seit mdadm 3.0.3 können Sie nur name verwenden. Wenn think path geändert wurde, um Unterordner /dev/md/$namezu verwenden, um mehr Flexibilität oder eine Art von Bereinigungs- oder Gruppenarrays zu erzielen. Wenn ein MD-Array im Format erstellt /dev/mdXwird, wird ein Symlink hinzugefügt, um die Kompatibilität mit dem neuen Format zu gewährleisten.

Krzysztof Stasiak
quelle
1

Wenn es um Gerätenamen geht, fragen Sie besser udev . Zu meinem Verständnis,

  1. md%dDie Benennung wird vom Kernel verwendet, sie wird direkt vom Treiber md.c # L5284 generiert und in /proc/partitionsund verwendet sysfs. Daher erscheint es in/dev

  2. /dev/md/...und /dev/disk/by-id/...werden von udevd als Symlinks generiert. In meinem System werden entsprechende Regeln gehalten in /usr/lib/udev/rules.d/63-md-raid-arrays.rules:

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

Es scheint, dass udev-Datei openSUSE 11.1-rc3nach diesem Commit in mdadm stammt. Ich habe diese Datei eingecheckt openSUSE 11.0, aber sie enthält keine md/%dSymlinks ...

myaut
quelle
0

Wahrscheinlich variiert der ursprüngliche Pfad je nach Linux-Kernelversion oder Unix-System. Der symbolische Link /dev/md/Nkann aus Kompatibilitätsgründen vorhanden sein. Programme oder Skripte, die diesen Pfad anstelle von verwenden können /dev/mdN.

hongo
quelle