web-dev-qa-db-fra.com

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

Sur les nouveaux systèmes /usr/share/mdadm/mkconf (le script utilisé pour générer /etc/mdadm/mdadm.conf) a tendance à utiliser le nom du périphérique /dev/md/0 à la place de /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

Cela peut provoquer une certaine irritation pour les utilisateurs qui s'attendent à /dev/md0 Là, mais apparemment cela fonctionne bien parce que le serveur bottes sans problèmes.

Dans /proc/mdstat L'appareil est toujours appelé /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 montre que /dev/md/0 est un lien symbolique à /dev/md0:

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

Sur un autre système ancien mkconf utilise toujours /dev/md0 Au lieu de cela, et /dev/md est vide:

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

J'aimerais connaître la différence entre ces noms de périphérique et je ne trouve aucune explication sur Google. Est /dev/mdN l'ancien nom et md envisage de passer à /dev/md/N noms de périphérique? Ce changement est-il lié aux 1,2 métadonnées (j'ai remarqué que le nouveau serveur utilise MD 1.2, tandis que l'ancien utilise toujours 0,90)?


EDIT 2017-09-11: Je pense la réponse de Krzysztof Stasiak est la bonne. J'avais maintenant totalement oublié cette question. En jouant avec un raid test vendredi dernier, j'ai pensé "Pourquoi ne pas nommer mon tableau au lieu de mémoriser ce que MD0, MD1, MD2, ... etc. fait dans des configurations complexes?" Et donc j'ai essayé:

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

Et en effet cela fonctionne:

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>

(Vous pouvez aussi faire mdadm --assemble foobar DEV...).

Il y a une explication détaillée dans man mdadm, section DEVICE NAMES.

19
Martin von Wittich

En ce qui concerne les noms de périphérique, mieux demander dev . À ma compréhension,

  1. md%d Nommage est utilisé par le noyau, il est généré directement par le conducteur MD.C # L5284 , et il est utilisé dans /proc/partitions et sysfs. Par conséquent, il apparaît dans /dev

  2. /dev/md/... et /dev/disk/by-id/... sont générés comme symboles de liens par Udevd. Dans mon système, les règles correspondantes sont conservées dans /usr/lib/udev/rules.d/63-md-raid-arrays.rules:

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

Il semble que le fichier udev vient de openSUSE 11.1-rc3 Selon - ce commit à Mdadm. J'ai vérifié ce fichier dans openSUSE 11.0, mais ça n'a pas md/%d symboles ...

1
myaut

Le chemin original varie probablement en fonction de la version du noyau Linux ou du système UNIX. Le lien symbolique /dev/md/N Peut exister pour des raisons de compatibilité. Programmes ou scripts pouvant utiliser ce chemin au lieu de /dev/mdN.

0
hongo