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

19

En los sistemas más nuevos /usr/share/mdadm/mkconf(el script que se usa para generar /etc/mdadm/mdadm.conf) tiende a usar el nombre del dispositivo en /dev/md/0lugar 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

Esto puede causar cierta irritación a los usuarios que esperan /dev/md0allí, pero aparentemente funciona bien porque el servidor arranca sin problemas.

En /proc/mdstatel dispositivo todavía se llama /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>

lsmuestra que /dev/md/0es un enlace simbólico para /dev/md0:

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

En otro sistema anterior mkconftodavía se usa en su /dev/md0lugar y /dev/mdestá vacío:

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

Me gustaría saber la diferencia entre estos nombres de dispositivos, y no puedo encontrar ninguna explicación en Google. ¿Es /dev/mdNel nombre antiguo y mdplanea pasar a /dev/md/Nlos nombres de los dispositivos? ¿Está este cambio relacionado con los metadatos 1.2 (he notado que el nuevo servidor está usando md 1.2, mientras que el viejo todavía está usando 0.90)?


EDITAR 2017-09-11: Creo que la respuesta de Krzysztof Stasiak es la correcta. Ya me había olvidado por completo de esta pregunta. Mientras jugaba con un RAID de prueba el viernes pasado pensé "¿por qué no nombrar mi matriz en lugar de memorizar lo que md0, md1, md2, ... etc. hace en configuraciones complejas?", Y entonces intenté:

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

Y de hecho eso funciona:

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>

(También puedes hacer mdadm --assemble foobar DEV...).

Hay una explicación detallada en la man mdadmsección DEVICE NAMES.

Martin von Wittich
fuente
@frostschutz ah, entonces el nombre de la matriz mdadm -Eque se encuentra actualmente unassigned:0en el nuevo servidor se divide en el :, y la segunda parte se convierte en parte del /dev/md/<name>? Entonces, si cambiara el nombre de la matriz a unassigned:asdf, ¿se llamaría al enlace simbólico /dev/md/asdf? Y siempre se llama al dispositivo real /dev/mdN, ¿dónde N es el próximo número libre?
Martin von Wittich
1
Podrías usarlo de esa manera, pero nadie lo hace; en realidad no funciona, ya que generalmente el md se crea a partir de un cd en vivo que no tiene su nombre de host configurado, etc. Un nombre como unassigned:0simplemente es braindead.
frostschutz

Respuestas:

1

puede nombrar la matriz como nombre propio (no solo 0-127) y desde mdadm 3.0.3 puede usar solo nombre. Si la ruta de pensamiento se cambió para usar una subcarpeta /dev/md/$namepara hacer más flexibilidad o algún tipo de arreglos limpios o grupales. Si md array se crea en formato /dev/mdX, se agrega un enlace simbólico para que sea compatible con el nuevo formato.

Krzysztof Stasiak
fuente
1

Cuando se trata de nombres de dispositivos, mejor pregunte a udev . A mi entender,

  1. md%del kernel usa la nomenclatura, la genera directamente el controlador md.c # L5284 y se usa en /proc/partitionsy sysfs. Por lo tanto, aparece en/dev

  2. /dev/md/...y /dev/disk/by-id/...son generados como enlaces simbólicos por udevd. En mi sistema, las reglas correspondientes se guardan en /usr/lib/udev/rules.d/63-md-raid-arrays.rules:

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

Parece que udev archivo proviene de openSUSE 11.1-rc3acuerdo con esta comprometerse en mdadm. He revisado este archivo openSUSE 11.0, pero no tiene md/%denlaces simbólicos ...

myaut
fuente
0

Probablemente la ruta original varía según la versión del kernel de Linux o el sistema Unix. El enlace simbólico /dev/md/Npuede existir por razones de compatibilidad. Programas o scripts que pueden usar esta ruta en lugar de /dev/mdN.

hongo
fuente