Raid1 con partición activa y de repuesto

8

Tengo el siguiente problema con una partición RAID de software RAID1 en mi sistema Ubuntu (10.04 LTS, 2.6.32-24-server en caso de que importe).

Uno de mis discos (sdb5) reportó errores de E / S y, por lo tanto, fue marcado como defectuoso en la matriz. La matriz se degradó con un dispositivo activo. Por lo tanto, reemplacé el disco duro, cloné la tabla de particiones y agregué todas las nuevas particiones a mis matrices de raid. Después de sincronizar todas las particiones terminó bien, teniendo 2 dispositivos activos, excepto uno de ellos. Sin embargo, la partición que reportó el disco defectuoso antes no incluía la nueva partición como un dispositivo activo sino como un disco de repuesto:

md3 : active raid1 sdb5[2] sda5[1]
  4881344 blocks [2/1] [_U]

Una mirada detallada revela:

root@server:~# mdadm --detail /dev/md3
[...]
Number   Major   Minor   RaidDevice State
   2       8       21        0      spare rebuilding   /dev/sdb5
   1       8        5        1      active sync   /dev/sda5

Entonces, aquí está la pregunta: ¿Cómo le digo a mi redada que convierta el disco de repuesto en uno activo? ¿Y por qué se ha agregado como un dispositivo de repuesto? La recreación o el reensamblaje de la matriz no es una opción, porque es mi partición raíz. Y no puedo encontrar ninguna sugerencia sobre ese tema en el Software Raid HOWTO.

Cualquier ayuda sería apreciada.

Solución actual

Encontré una solución a mi problema, pero no estoy seguro de que esta sea la forma real de hacerlo. Mirando más de cerca mi redada, encontré que sdb5 siempre aparecía como un dispositivo de repuesto:

mdadm --examine /dev/sdb5
[...]
Number   Major   Minor   RaidDevice State
this     2       8       21        2      spare   /dev/sdb5

   0     0       0        0        0      removed
   1     1       8        5        1      active sync   /dev/sda5
   2     2       8       21        2      spare   /dev/sdb5

de modo que leer el dispositivo sdb5 en la matriz md3 siempre terminó agregando el dispositivo como repuesto.

Finalmente acabo de recrear la matriz.

mdadm --create /dev/md3 --level=1 -n2 -x0 /dev/sda5 /dev/sdb5

que funcionaba.

Pero la pregunta sigue abierta para mí: ¿hay una mejor manera de manipular los resúmenes en el superbloque y decirle a la matriz que convierta sdb5 de un disco de repuesto a un disco activo? Todavía tengo curiosidad por una respuesta.

Daniel Baron
fuente
¿Qué muestra "cat / proc / mdstat"? ¿No es solo la reconstrucción y el "repuesto" desaparecerá cuando la reconstrucción finalice? ¿Qué muestra "mdadm --version"? Había un bicho viejo ... ver mail-archive.com/[email protected]/msg09818.html .
rems
No, ese es el problema. El primer fragmento de la pregunta muestra la salida de / proc / mdstat para la matriz. El dispositivo ya se ha sincronizado, pero como puede ver después de un proceso de sincronización exitoso, el dispositivo permanece como repuesto y no se convierte en uno activo.
Daniel Baron
mdadm - v2.6.7.1
Daniel Baron

Respuestas:

1

Daniel:   Inicialmente, vuelva a verificar si el repuesto se está integrando en la matriz haciendo lo siguiente:

cat / proc / mdstat

que debe informar si hay un proceso de compilación en curso y cuánto tiempo se puede esperar.

Si no se está produciendo ningún edificio, intente lo siguiente

mdadm / dev / md3 --remove / dev / sdb5

mdadm / dev / md3 --add / dev / sdb5

Y reporta cómo funciona eso para ti. Ver http://linux.die.net/man/8/mdadm para más detalles.

Rolnik
fuente
Gracias por tu ayuda, Rolnik. Como se puede ver en mi primer fragmento de código, proc / mdstat muestra ambos dispositivos en la matriz. El dispositivo ya se ha sincronizado anteriormente (no se muestra aquí) sin problemas. Pero después de finalizar el proceso de resincronización, los dispositivos no se convirtieron en un dispositivo activo. Eliminar y agregar de nuevo no cambió este comportamiento.
Daniel Baron
1

Bastante tarde, pero al hacer esto solo se habilitaría la unidad de repuesto:

mdadm --grow /dev/md3 -n 2

Como dice la página del manual:

Para crear, construir o crecer:          -n, --raid-devices =                 Especifique el número de dispositivos activos en la matriz. Esto, más el número de dispositivos de repuesto (ver más abajo) debe ser igual al   número de componentes                 dispositivos (incluidos los dispositivos "faltantes") que se enumeran en la línea de comandos para --create. Establecer un valor de 1 es probablemente un   error y asi                 requiere que --force se especifique primero. Se permitirá un valor de 1 para lineal, multipath, RAID0 y RAID1. Es   nunca permitido                 para RAID4, RAID5 o RAID6.                 Este número solo se puede cambiar utilizando --grow para matrices RAID1, RAID4, RAID5 y RAID6, y solo en los kernels que proporcionan la   apoyo necesario                 Puerto.

Pablo Montepagano
fuente
0

Por lo que recuerdo, cuando tuve ese problema (por una razón diferente) tuve que usar --grow para volver a agregar la unidad de repuesto "correctamente" (también para eliminar la condición de error).

Algo como esto (verifique con su documentación!):

mdadm --grow --level = faulty --layout = flush / dev / sdb5

A continuación, puede agregar el dispositivo y debe ser reconocido.

El problema es que el controlador md guarda el estado de cada partición en los datos de arranque de las unidades. Entonces, incluso después de un reinicio, conoce el estado y evita las particiones marcadas como defectuosas.

Alexis Wilke
fuente