¿Cómo cambio el nombre de una matriz de incursiones mdadm?

23

Por alguna razón, cuando trato de cambiar el nombre de una matriz de incursiones mdadm a un nombre textual, el cambio no se realiza.

Intenté el consejo de esta pregunta predeterminada del servidor , pero fue en vano.

~$ mdadm --version
mdadm - v3.1.4 - 31st August 2010

~$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 17:59:37 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ sudo mdadm --stop /dev/md0
mdadm: stopped /dev/md0

~$ sudo mdadm --assemble /dev/md/alpha --update=name /dev/sd[gf]
mdadm: /dev/md/alpha has been started with 2 drives.

~$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 18:06:11 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdf[0] sdg[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md126 : active (auto-read-only) raid1 sdd[0] sde[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md127 : active (auto-read-only) raid1 sdb[0] sda[1]
      976762496 blocks [2/2] [UU]

unused devices: <none>

Como puede ver, el nombre todavía se informa omicron:0y aún se puede acceder a través del archivo de dispositivo antiguo. Intentar sudo mdadm --detail /dev/md/alphafuncionará e informará el mismo nombre incorrecto hasta el próximo reinicio, cuando deje de funcionar.

Parece que al descifrar qué nombre poner, mdadm se confunde y simplemente crea el archivo del dispositivo.


APARTE

¿Hay alguna forma de hacer que mdadm fuerce una actualización del nombre parte del superbloque (es decir, establecer explícitamente el nombre que desea que tenga la matriz) sin tener que volver a crear explícitamente el superbloque? (es decir sudo mdam --zero-superblock /dev/sd[fg]; sudo mdadm --create /dev/md/alpha --raid-devices=2 --level=1 --assume-clean --name=alpha /dev/sd[fg])


El problema es que después de reiniciar, a pesar de agregar ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=c66a267...a mdadm.conf, el archivo del dispositivo nombrado desaparece y se reemplaza por uno de formato estándar. (/ dev / md125 o similar)

¿Cómo puedo hacer que una matriz mdadm renombrada mantenga su nombre? - Es decir, ¿cómo puedo hacer que Ubuntu mantenga los archivos del dispositivo entre las botas?

Zaz
fuente

Respuestas:

19

Tienes que darle el nombre en realidad con --name=como:

sudo mdadm --assemble /dev/md/alpha --name=newname --update=name /dev/sd[gf]

Para tener un comportamiento coherente durante el reinicio, debe usar el mismo nombre en el argumento --name que en la última parte del dispositivo. Aquí sería: sudo mdadm --assemble / dev / md / alpha --name = alpha --update = name / dev / sd [gf]

Vea la publicación de Khassad a continuación para obtener una explicación completa.

pila
fuente
1
Una pequeña actualización de esta línea de comando, para mayor claridad, ya que como un bobo, ingresé el nombre original de la matriz después de '--update ='. sudo mdadm --assemble /dev/md/alpha --name={newname} --update=name /dev/sd[gf] Espero que tenga sentido o lo aclare ...
anastrophe
Hola, después de emitir el comando # sudo mdadm --assemble / dev / md127 --name = md0 --update = name / dev / sd [ab] me sale mdadm: / dev / sda está ocupado - omitiendo mdadm: / dev / sdb está ocupado - saltando ¿Alguna cosa? Por supuesto, ¡he desmontado la matriz primero!
razor7
2
@ razor7mdadm --stop --scan md127
Daniel Dinnyes
12

La forma de hacer que Ubuntu persista el cambio de nombre en las botas es actualizar sus initramfs. Después de actualizar su nombre de matriz y mdadm.conf, debe emitir el siguiente comando:

sudo update-initramfs -u

Todo el proceso:

sudo mdadm --stop /dev/md125
sudo mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[fg]
sudo mdadm -Db /dev/md/alpha

El tercer comando debería devolver algo como:

ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=5b024352:3a940335:233aa23f:5c6b2a1f

Pegue el resultado en /etc/mdadm/mdadm.conf (reemplazando la línea anterior). O ejecutar:

sudo mdadm -Db /dev/md/alpha >> /etc/mdadm/mdadm.conf

Próxima ejecución:

sudo update-initramfs -u

Finalmente, reinicia.

Esta discusión fue útil .

Swoogan
fuente
8

La primera respuesta de pille y NN funciona.

El truco aquí es que cuando no especifica la --nameopción, el único cambio de nombre realizado mdadmes asignar el nombre de la matriz al número de dispositivo que ha asignado. En esta pregunta es 0, por lo que el nuevo nombre de matriz es 0.

Como especifica el nombre del dispositivo ("alfa" aquí) para usar en el comando de ensamblaje, creará y usará este nombre de dispositivo. Pero en el inicio automático mdadmcrea un dispositivo basado en el nombre que ve en el superbloque, que es 0 en este caso, por lo que se pierde el nombre del dispositivo que especificó en su comando de ensamblaje.

Para que su nombre cambie de forma coherente, debe usar el mismo nombre en la última parte del nombre de su dispositivo y en su nuevo nombre de matriz. En este caso, para el dispositivo "alfa" tendría que usar esta línea de comando:

mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[gf]

También puede cambiar el nombre de host, para hacerlo debe declararlo explícitamente utilizando la -name=<hostname>:<array_name>sintaxis.

Esto puede ser útil, por ejemplo, después de un cambio de nombre de máquina.

Khassad
fuente
2

Parece que la respuesta que busca está en la página de manual de mdadm

[create, build, grow]
      -N, --name=
          Set  a name for the array.  This is **currently only effective when creat‐
          ing an array** with a version-1 superblock, or an  array  in  a  DDF  con‐
          tainer.   The  name is a simple textual string that can be used to iden‐
          tify array components when assembling.  If name is needed but not speci‐
          fied, it is taken from the basename of the device that is being created.
          e.g. when creating /dev/md/home the name will default to home.

y para armar

       -N, --name=
          Specify the name of the array to assemble.  **This must be the  name  that
          was  specified  when  creating the array**.  It must either match the name
          stored in the superblock exactly, or it  must  match  with  the  current
          homehost prefixed to the start of the given name.

Lo que explica por qué el atributo de nombre no es fijo después de que se establece Si conseguiste que funcionara, por favor, haz un comentario con la respuesta que te sirvió. Alternativamente, siempre puede crear enlaces simbólicos utilizando una regla udev y el UUID de la matriz como un ancla.

No veo el punto de agregar el nombre falso a /etc/mdadm.conf, ya está utilizando el UUID, que es el nombre de la matriz canónica. Agregar otra variable, que considere conveniente cambiar, es solo un mantenimiento innecesario y pedir problemas, por ejemplo, la matriz no se inicia.

Más allá de estas observaciones, el mejor lugar para entender por qué simplemente no puede actualizar el nombre en tiempo de ejecución es hacer ping a la lista de correo de linux-raid.

ppetraki
fuente
1

después de cambiar el nombre, ¿trató de actualizar su mdadm.conf?

 mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm.conf
maniat1k
fuente
0

mdadm tiene un error cuando los volúmenes de incursión se crearon internamente con un espacio en su nombre. Estos volúmenes no se montarán correctamente debido a un error de formato en el archivo /etc/mdadm/mdadm.conf generado. Debe cambiarles el nombre allí, pero no será persistente. Por lo tanto, cambiar el nombre de los nombres internos es necesario ... pero no es compatible con todos los controladores RAID que bloquean sus metadatos y no admiten la opción de nombre. ¡No veo cómo cambiar el nombre de estos volúmenes (incluso si están referenciados internamente por su UUID, los nombres son los utilizados por Linux; Windows, por el contrario, no tiene ese error y monta perfectamente los volúmenes RAID que contienen espacios en sus nombres)!

verdy_p
fuente