¿Qué significa el número "de repuesto" de mdadm?


8

Creé un RAID 5 basado en mdadm a partir de seis discos duros usando el siguiente comando:

# mdadm --create /dev/md0 --level=5 --raid-devices=5 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 \
--spare-devices=1 /dev/sdg1

Esperaba que la matriz tuviera un repuesto dinámico, a saber, / dev / sdg1. Sin embargo, la comprobación mdadm --detailmuestra 2 repuestos:

# mdadm --detail --scan 
ARRAY /dev/md0 metadata=1.2 spares=2 name=...

Además, el tamaño de la matriz, como se muestra en, dfes de 2 TB, lo que correspondería a solo cuatro de mis unidades de 500 GB en uso.

Entonces, ¿cuál es exactamente la semántica de --spare-devices? La página de manual dice que "Especifica el número de dispositivos de repuesto (eXtra) en la matriz inicial", pero ese no parece ser el caso aquí.


1
RAID 5 utiliza el valor de paridad de un dispositivo. No sé, por eso estoy haciendo esto un comentario, pero ¿podría eso tener algo que ver? ( mdadm --detailincluida la unidad de paridad en el recuento de "repuestos"). Puede verificar esto haciendo una matriz RAID 6 sin repuesto dinámico; si mi teoría es válida, también mostrará repuestos = 2.
un CVn

2
En la terminología RAID estándar, un repuesto es solo un disco inactivo en su mayoría en blanco que se puede activar automáticamente para ayudar a reconstruir la matriz después de que otro disco falla. Un disco de paridad no es un disco de repuesto. Además, la cantidad de discos de repuesto no es la cantidad de discos que pueden fallar antes de que sus datos estén en riesgo. (El número no está bien definido. Un RAID 10 de cuatro discos podría manejar hasta 2 fallas de disco, pero también podría estar muerto con 2 fallas de disco.)
200_success

44
Estoy adivinando que se está viendo dos piezas de repuesto, debido a su todavía haciendo la matriz init-it inicial es "reconstruyendo" en la que una de las dos piezas de repuesto. Una vez hecho esto (verifique el progreso cat /proc/mdstat), creo que verá el esperado 1.
derobert

@derobert, tiene razón: después de que finalizó la reconstrucción inicial, obtuve ARRAY / dev / md0 metadata = 1.2 repuestos = 1 nombre = [...] de mdadm --detail --scan y una información equivalente de / proc / mdstat.
jstarek

Respuestas:


4

Esa salida es correcta. Creó un RAID 5 con 5 discos (solo 4 de estos serán "utilizados" para el espacio). Y agregó una unidad de repuesto adicional.

Entonces, en realidad tiene un RAID 5 que permite una falla de disco + una unidad de repuesto adicional.

Si lo que quiere es RAID 5 con 6 discos y tiene el espacio de 5 discos, entonces debe cambiar su comando a:

mdadm --create /dev/md0 --level=5 --raid-devices=6 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1

Pero en este caso, puede tolerar solo una falla de disco según las especificaciones de RAID 5.

EDITAR: Agregando el enlace de la página oficial de la incursión: Puedes ver una incursión 5 con 6 discos y dice repuestos = 1: Creación de matriz inicial

ACTUALIZACIÓN: Decidí crear una incursión 5 en mi sistema y el valor de reserva desaparece una vez que la matriz está en estado limpio:

   Raid Devices : 4
  Total Devices : 4
              State : clean, degraded, recovering
     Active Devices : 3
    Working Devices : 4
     Failed Devices : 0
      Spare Devices : 1

Estado limpio:

   Raid Devices : 4
  Total Devices : 4
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

Así es como el comentario de OP, durante la creación inicial de la incursión 5 tiene la unidad de repuesto hasta que se completa la compilación / sincronización de la incursión.


1
Creo que la información clave de la página wiki a la que se vinculó es la siguiente: "Para raid5 hay una optimización: mdadm toma uno de los discos y lo marca como 'repuesto'; luego crea la matriz en modo degradado". - esto encajaría muy bien con la observación hecha por derobert en los comentarios anteriores. Aparte de eso, me temo que no entendiste mi pregunta: no quería tener 5 unidades de espacio. Mencionar los 2 TB fue solo una observación.
jstarek

3

En aras de la claridad, agregaré la información dada por derobert y Alexandre Alves y algunas otras pruebas mías aquí:

mdadmEl --spare-devicesparámetro funciona como lo indica la página del manual, es decir, define el número de unidades de "repuesto dinámico" en una matriz. Un "repuesto dinámico", como en la terminología RAID normal, no tiene nada que ver con las unidades adicionales presentes en una matriz RAID 5 o RAID 6; es una unidad adicional destinada a hacerse cargo tan pronto como una unidad en la matriz ha fallado.

El número de unidades de repuesto se proporciona en el momento de la creación de la matriz. Más tarde, se puede verificar usando #mdadm --detail --scan.

Sin embargo, durante el breve período de inicialización de un RAID 5 basado en mdadm, hay una optimización, descrita en https://raid.wiki.kernel.org/index.php/Initial_Array_Creation , que hace que aparezca una unidad de repuesto adicional en la salida de ese comando:

"Para raid5 hay una optimización: mdadm toma uno de los discos y lo marca como 'repuesto'; luego crea la matriz en modo degradado. El núcleo marca el disco de repuesto como 'reconstrucción' y comienza a leer desde 'bueno' discos, calcula la paridad y determina qué debe estar en el disco de repuesto y luego simplemente escribe en él ".

Una vez que finaliza la inicialización de la matriz, el número de repuestos informados vuelve al número seleccionado en el momento de la creación.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.