¿Cómo obtengo una ruta de dispositivo consistente para mi dispositivo MD, idealmente la exacta que especifiqué ("/dev/md/myarray")?
Después de mdadm --create /dev/md/foobar ...
, ambos hostname
y name
se almacenan en los metadatos de mdadm, como debe verificar con mdadm --examine
o mdadm --detail
:
# mdadm --detail /dev/md/foobar
Name : ALU:foobar (local to host ALU)
ALU
resulta ser el nombre de host de mi máquina ArchLinux:
# hostname
ALU
Puede especificar el host que debe almacenarse en el momento de la creación:
# mdadm --create /dev/md/foobar --homehost=barfoo
# mdadm --detail /dev/md/foobar
Name : barfoo:foobar
...pero normalmente nadie se acuerda de hacerlo.
Y ahí es donde comienzan los problemas... es posible que haya creado su matriz RAID a partir de algún LiveCD u otro, y el nombre de host en ese entorno no coincidía en absoluto con su instalación principal. Y luego los metadatos almacenan un nombre de host completamente no relacionado.
Del mismo modo, si configura todo correctamente, pero luego encuentra problemas con su RAID e inicia un sistema de rescate para verificar las cosas, nuevamente hay una falta de coincidencia con los nombres de host.
O al revés, el nombre de host puede coincidir incluso si es la máquina incorrecta, si usó el mismo nombre de host para dos sistemas independientes y luego migró las unidades. Luego, las matrices alienígenas toman los nombres de las originales...
Ahora, los metadatos también se pueden cambiar más tarde usando mdadm --assemble --update=homehost
o --update=name
, esa es una forma de lidiar con el problema. Debe configurarse correctamente, pero es difícil cambiarlo ya que (por alguna razón) aparte de la edición hexadecimal de los metadatos directamente, solo se puede hacer en el momento del ensamblaje.
Otra forma es ignorar los sistemas hostname
y en su lugar especifique --homehost
en ensamblaje o conjunto HOMEHOST
en mdadm.conf
. Esto se describe con cierto detalle en la página de manual de mdadm.conf.
HOMEHOST
La línea homehost proporciona un valor predeterminado para la opción --homehost=de mdadm. Normalmente, solo debe haber otra palabra en la línea. Debe ser un nombre de host o una de las palabras especiales <system>
, <none>
y <ignore>
. Si <system>
se proporciona, luego se utiliza la llamada al sistema gethostname(2) para obtener el nombre del host. Este es el valor predeterminado.
[...]
Cuando se crean matrices, este nombre de host se almacenará en los metadatos. Cuando los arreglos se ensamblan mediante el ensamblaje automático, los arreglos que no registran el nombre de host principal correcto en sus metadatos se ensamblarán con un nombre "extranjero". Un nombre "extranjero" siempre termina con una cadena de dígitos precedida por un guión bajo para diferenciarlo de cualquier posible nombre local. p.ej. /dev/md/1_1 o /dev/md/home_0.
Entonces puedes intentar configurar HOMEHOST ALU
(en mi caso), o el más genérico HOMEHOST <ignore>
(o HOMEHOST <none>
) en el mdadm.conf
. Pero solo funcionará cuando mdadm.conf
está presente. Y nuevamente, si configura ignorar y luego conecta una matriz desde otra máquina, es posible que se encuentre con conflictos de nombres.
Por lo tanto, sería mejor configurar correctamente el nombre de host en metadatos y mdadm.conf y no ignorarlo, y mejor aún configurar el nombre de host real en initramfs antes del ensamblaje, pero puede ser difícil de poner en práctica.
Mi preferencia personal es apegarme al estilo numérico clásico. Identificar por UUID y nada más:
ARRAY /dev/md1 UUID=8fe790ca:f3fa3388:4ae125b6:2c3a5d44
ARRAY /dev/md2 UUID=f14bef5b:a5356e51:25fde128:09983091
ARRAY /dev/md3 UUID=0639c68d:4c844bb1:5c02b33e:00ab4a93
Esto también es coherente (pero también depende de que se haya creado de esta manera y/o se haya configurado en consecuencia en los metadatos; de lo contrario, es posible que también deba --update
eso). Y las matrices alienígenas que no coinciden con los UUID dados deberían terminar como /dev/md127+
.
Al final del día, no importa lo que hagas, no debes confiar ciegamente en /dev/mdX
o /dev/md/name
es de la misma manera que no confía ciegamente en /dev/sdX
letras. Utilice siempre los UUID del sistema de archivos para identificar lo que haya en esos arreglos.
Hay demasiados casos en los que los nombres pueden cambiar inesperadamente, por lo que, en el mejor de los casos, esto puede ser una ayuda de orientación o una pista para el administrador del sistema, no es la respuesta a todos los problemas.