mdadm - Eliminar el disco de RAID0

11

Entonces, me gustaría saber si es posible hacer lo siguiente con mdadm:

  1. Comienzo con la configuración RAID0 en 2 discos: sday sdb.
  2. Me gustaría agregar un disco más a la matriz sdcy mover todos los datos sdba ella.
  3. Desconectarse sdb.

En este momento sólo veo una opción - dejo la matriz, copio sdba sdccon ddo cualquier otra herramienta de bloque de copiar e iniciar la parte posterior matriz.

¿Echo de menos algo? ¿Es posible hacer esto con mdadm?

maniaco
fuente
Puede convertir sdb en un espejo temporal y luego sincronizar sdc en segundo plano; esto redujo el tiempo de inactividad necesario, aunque no hice esto como principiante en su lugar.
peterh - Restablecer Monica
No soy un principiante seguro :) ¿Puedes contarme más sobre el espejo temporal? ¿Es la característica mdadm?
maniaque
No, es una característica de incursión simple. Pensé en una matriz temporal raid1, que podría ser el lugar de sdb en su matriz raid1. Mientras sincroniza sdb a sdc, también puede usarlo como parte de su matriz raid0.
peterh - Restablecer Monica
Entonces, ¿te entiendo bien? 1. Detener la matriz. 2. Cree una matriz RAID1 más con sbd y sdc. 3. ¿Y cómo podría preguntar mdadm para iniciar mi RAID0 con md1 en lugar de sdb?
maniaque
No he investigado mucho, pero ciertamente parece que deberías poder crecer desde un RAID0 -> RAID5. Luego, vuelva a reducir a RAID0.
Zoredache

Respuestas:

17

En primer lugar: para aquellos que todavía creen en "RAID0 no tiene repuesto". Podría tener un repuesto manual, hecho por humanos, que entienden los niveles RAID y mdadm. mdadm es RAID de software, por lo que podría hacer muchas cosas interesantes.

¡Créditos a Zoredache por la idea!

Entonces, la situación:

  • tienes una matriz RAID0 de dos discos
  • desea reemplazar uno de ellos sin tiempo de inactividad de la matriz

Si el tiempo de inactividad es aceptable, siempre puede hacer una copia en bloque del disco con dd y volver a ensamblar la matriz, mdadm funcionará correctamente.

Solución: use RAID4 como solución intermedia

RAID0 -> RAID4 -> RAID0

Entonces, si no recuerda RAID4, es simple. Tiene un bloque de paridad, pero a diferencia de RAID5 no se distribuye a través de la matriz, sino que reside en UN disco. Ese es el punto, esto es importante y esta es la razón por la cual RAID5 no funcionará.

Lo que necesitará: dos discos más del mismo tamaño, como el disco que desea reemplazar.

Medio ambiente:

  • Ubuntu 14.04 Thrusty Thar
  • mdadm - v3.2.5 - 18 de mayo de 2012
  • / dev / sdb: comienza con él, lo reemplazará
  • / dev / sdc - comienza con eso
  • / dev / sdd: se usará temporalmente
  • / dev / sde: se usará en lugar de sdb

La mejor guía mdadm de repuesto en caliente RAID0;)

sudo mdadm -C /dev/md0 -l 0 -n 2 /dev/sd[bc]

md0 : active raid0 sdc[1] sdb[0]
      2096128 blocks super 1.2 512k chunks

Hemos creado la matriz raid0, se ve dulce.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

Este es nuestro punto de control: si incluso un bit difiere en el resultado /dev/md0, hemos fallado.

sudo mdadm /dev/md0 --grow --level=4

md0 : active raid4 sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Entonces, crecimos nuestra matriz para que sea RAID4. Todavía no hemos agregado el disco de paridad, así que hagámoslo. El crecimiento será instantáneo: no hay nada que volver a calcular o recalcular.

sudo mdadm /dev/md0 -a /dev/sdd

md0 : active raid4 sdd[3] sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [===>.................]  recovery = 19.7% (207784/1048064) finish=0.2min speed=51946K/sec

Hemos agregado sddcomo disco de paridad. Es importante recordar esto: ¡el orden de los discos en la primera fila no está sincronizado con la imagen en la segunda fila! [UU_]

sdd se muestra primero, pero de hecho es el último, y no contiene los datos, sino la paridad.

sudo mdadm /dev/md0 -f /dev/sdb

md0 : active raid4 sdd[3] sdc[1] sdb[0](F)
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]

Hemos hecho que nuestro disco sdb sea defectuoso, para eliminarlo en los próximos pasos.

sudo mdadm --detail /dev/md0

State : clean, degraded

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty spare   /dev/sdb

Los detalles nos muestran la eliminación del primer disco y aquí podemos ver el verdadero orden de los discos en la matriz. Es importante rastrear el disco con paridad, no debemos dejarlo en la matriz cuando regresemos a RAID0.

sudo mdadm /dev/md0 -r /dev/sdb

md0 : active raid4 sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]

sdb se elimina por completo, podría ser quitado.

sudo mdadm /dev/md0 -a /dev/sde

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
      [==>..................]  recovery = 14.8% (156648/1048064) finish=0.2min speed=52216K/sec

Hemos agregado el reemplazo para nuestro disco sdb. Y aquí vamos: ahora los datos de SDB se están recuperando utilizando la paridad. Sweeeeet

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/3] [UUU]

Hecho. En este momento estamos completamente seguros: todos los datos de sdb se recuperan y ahora tenemos que eliminar sdd (recuerde, tiene paridad).

sudo mdadm /dev/md0 -f /dev/sdd

md0 : active raid4 sde[4] sdd[3](F) sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Hecho sdd defectuoso.

sudo mdadm /dev/md0 -r /dev/sdd

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Se eliminó sdd de nuestra matriz. Estamos listos para convertirnos en RAID0 nuevamente.

sudo mdadm /dev/md0 --grow --level=0 --backup-file=backup

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [=>...................]  reshape =  7.0% (73728/1048064) finish=1.5min speed=10532K/sec

Aaaaaa y bang!

md0 : active raid0 sde[4] sdc[1]
      2096128 blocks super 1.2 512k chunks

Hecho. Veamos la suma de comprobación md5.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

¿Alguna pregunta más? Entonces RAID0 podría tener un repuesto dinámico. Se llama "usuario";)

maniaco
fuente
1

Hasta donde sé, una vez que configura un RAID0, no puede cambiar uno de los discos. Puede realizar una copia de seguridad y cambiar los discos y restaurar la copia de seguridad. Simplemente RAID5 esos 3 discos que tienes. De esa manera, en el futuro, puede soltar un disco y aún reconstruirlo.

joeg1ff
fuente
Bueno, sé cómo hacer lo que hablo con RAID5: puedo agregar un nuevo disco a la matriz (como repuesto), luego marcar el disco que me gusta mover como defectuoso y eliminarlo de la matriz, limpiando el superbloque después. Pero estoy interesado en la misma operación con RAID0 :)
maniaque
@maniaque Se llama RAID 0 porque cero es la cantidad de RAID que obtienes. No se debe colocar absolutamente nada de importancia en un RAID 0.
Michael Hampton
@MichaelHampton Creo que quiere decir redundancia, no RAID, pero su declaración es 100% correcta.
joeg1ff
@MichaelHampton Por favor, mira mi respuesta a continuación :)
maniaque
0

RAID 0 no proporciona redundancia.

Por lo tanto, no es compatible con el reemplazo del disco caliente.

usuario2743554
fuente
1
Solo mira abajo, por favor. No hay nada imposible, cuando entiendes los niveles de RAID;)
maniaco