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/0
lugar 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/md0
allí, pero aparentemente funciona bien porque el servidor arranca sin problemas.
En /proc/mdstat
el 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>
ls
muestra que /dev/md/0
es 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 mkconf
todavía se usa en su /dev/md0
lugar y /dev/md
está 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/mdN
el nombre antiguo y md
planea pasar a /dev/md/N
los 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 mdadm
sección DEVICE NAMES
.
mdadm -E
que se encuentra actualmenteunassigned:0
en 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 aunassigned: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?unassigned:0
simplemente es braindead.Respuestas:
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/$name
para 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.fuente
Cuando se trata de nombres de dispositivos, mejor pregunte a udev . A mi entender,
md%d
el kernel usa la nomenclatura, la genera directamente el controlador md.c # L5284 y se usa en/proc/partitions
ysysfs
. Por lo tanto, aparece en/dev
/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
:Parece que udev archivo proviene de
openSUSE 11.1-rc3
acuerdo con esta comprometerse en mdadm. He revisado este archivoopenSUSE 11.0
, pero no tienemd/%d
enlaces simbólicos ...fuente
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/N
puede existir por razones de compatibilidad. Programas o scripts que pueden usar esta ruta en lugar de/dev/mdN
.fuente