La mejor manera de hacer crecer el software de Linux RAID 1 a RAID 10

22

mdadm no parece admitir el crecimiento de una matriz del nivel 1 al nivel 10.

Tengo dos discos en RAID 1. Quiero agregar dos discos nuevos y convertir la matriz a una matriz RAID 10 de cuatro discos.

Mi estrategia actual:

  1. Haz una buena copia de seguridad.
  2. Cree una matriz RAID 10 degradada de 4 discos con dos discos faltantes.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove un disco de la matriz RAID 1.
  5. Agregue el disco disponible a la matriz RAID 10 y espere a que se complete la resincronización.
  6. Destruya la matriz RAID 1 y agregue el último disco a la matriz RAID 10.

El problema es la falta de redundancia en el paso 5.

¿Hay una mejor manera?

Hans Malherbe
fuente
55
No olvide el paso 0. Haga una buena copia de seguridad de todo.
Anthony Lewis
Creo que tus pasos son correctos. Pierde la redundancia durante el período en que copia los datos de un conjunto a otro.
Kevin Kuphal el
¿Es posible crear un 4disk RAID10 degradado?
pauska
1
Sí, solo usa "/ dev / hda missing / dev / hdb missing", porque de lo contrario pierde un par completo y todo se desmorona. La "respuesta aceptada" para esta pregunta, por cierto, es completamente incorrecta y no funciona.
womble
También estoy buscando una buena manera de hacer esto, y creo que el método descrito en la pregunta es el mejor que he encontrado hasta ahora. La respuesta de Mark Turner no ayuda porque crea una matriz de 2 dispositivos que no se puede cambiar a 4 dispositivos (los otros 2 solo se pueden agregar como repuestos). Y la respuesta de Suresh Kumar es la misma que se describe en la pregunta, excepto que no funcionará exactamente así; los dispositivos que faltan tienen que ser el 2do y 4to, no el 3ro y 4to. Acerca de los pasos en la pregunta: creo que el paso 5 tiene redundancia completa, y el paso 6 tiene redundancia para la mitad de los datos. De hecho, veo que los pasos fueron renumerados
Aditsu 05 de

Respuestas:

8

Con linux softraid puede hacer una matriz RAID 10 con solo dos discos.

Nombres de dispositivos utilizados a continuación:

  • md0 es la matriz anterior de tipo / nivel RAID1.
  • md1 es la nueva matriz de tipo / nivel RAID10.
  • sda1y sdb2son particiones nuevas y vacías (sin datos).
  • sda2y sdc1son particiones antiguas (con datos cruciales).

Reemplace los nombres para adaptarse a su caso de uso. Use, por ejemplo, lsblkpara ver su diseño actual.

0) Copia de seguridad, Copia de seguridad, Copia de seguridad, Copia de seguridad oh y BACKUP

1) Cree la nueva matriz (4 dispositivos: 2 existentes, 2 faltantes):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Tenga en cuenta que en este ejemplo, el diseño sda1tiene una contraparte faltante y sdb2otra contraparte faltante. Sus datos md1no son seguros en este momento (de hecho, es RAID0 hasta que agregue miembros faltantes).

Para ver el diseño y otros detalles del uso de la matriz creada:

mdadm -D /dev/md1

¡Nota! Debe guardar el diseño de la matriz:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) Formatear y montar. El /dev/md1debe ser inmediatamente utilizable, pero debe formatearse y luego montarse.

3) Copiar archivos. Utilice, por ejemplo, rsync para copiar datos del RAID 1 anterior al nuevo RAID 10. (este es solo un comando de ejemplo, lea las páginas del manual para rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Fallar la primera parte del RAID1 anterior (md0) y agregarlo al nuevo RAID10 (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

¡Nota! Esto borrará los datos de sda2. El md0debe seguir siendo útil, pero sólo si el otro miembro de la banda estaba en pleno funcionamiento.

También tenga en cuenta que esto comenzará a sincronizar / recuperar procesos md1. Para verificar el estado, use uno de los siguientes comandos:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

Espere hasta que termine la recuperación.

5) Instale GRUB en la nueva matriz (suponiendo que esté arrancando desde ella). Algunos CD de rescate / arranque de Linux funcionan mejor.

6) Arrancar en una nueva matriz. SI FUNCIONÓ CORRECTAMENTE Destruya la matriz anterior y agregue el disco restante a la nueva matriz.

PUNTO SIN RETORNO

En este punto, destruirá los datos del último miembro de la matriz md0 anterior. Esté absolutamente seguro de que todo está funcionando.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

Y de nuevo, espere hasta que md1finalice la recuperación .

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) Actualizar la configuración de mdadm

Recuerde actualizar /etc/mdadm/mdadm.conf(eliminar md0).

Y guarde la configuración en initramfs (estará disponible después del reinicio)

update-initramfs -u
Mark Turner
fuente
1
¿Dónde entran los cuatro discos?
womble
Eh? Indico claramente que cree la matriz con 2 discos, copie los datos, falle la incursión 1 quitando un disco, agregue ese disco al RAID10, luego arranque al RAID10, si funcionó, destruya el RAID1 y mueva ese último disco a the new RAID ....
Mark Turner el
44
Editaste tu respuesta después de mi comentario. Además, su procedimiento proporciona un RAID-10 de dos discos con dos repuestos ... apenas un RAID-10 de cuatro discos. Los volúmenes RAID-10 tampoco pueden ser reformados.
womble
2
Ejecuté los comandos tal como los proporcionó, y termino con un RAID-10 de dos discos con dos repuestos, como se muestra en / proc / mdstat. Esto está en el kernel 2.6.30, con mdadm v2.6.7.2.
womble
3
"mdadm: raid10 array / dev / md1 no se puede reformar". Esto también se menciona en la página de manual de mdadm.
womble
9

Siga el mismo procedimiento que Mark Turner pero cuando cree la matriz de incursiones, mencione 2 discos faltantes

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Y luego proceda con otros pasos.

En resumen, cree RAID10 con un total de 4 discos (de los cuales faltan 2), vuelva a sincronizar, agregue otros dos discos después de eso.

Sam Whited
fuente
6

Acabo de pasar de LVM en dos discos de 2 TB mdadm RAID 1 a LVM en cuatro discos RAID 10 (dos originales + dos discos nuevos).

Como señaló @aditsu, el orden de las unidades es importante al crear la matriz.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

El código anterior proporciona una matriz utilizable con dos discos faltantes (agregue números de partición si no está utilizando discos completos). Tan pronto como se agregue el tercer disco, comenzará a sincronizarse. Agregué el cuarto disco antes de que el tercero terminara de sincronizarse. Se mostró como repuesto hasta que el tercer disco terminó y luego comenzó a sincronizarse.

Pasos para mi situación:

  1. Haz una buena copia de seguridad.

  2. Cree una matriz RAID 10 degradada de 4 discos con dos discos faltantes (llamaremos a los discos faltantes n. ° 2 y 4).

  3. Dígale a su esposa que no cambie / agregue ningún archivo que le interese

  4. Falla y elimina un disco de la matriz RAID 1 (disco 4).

  5. Mueva las extensiones físicas de la matriz RAID 1 a la matriz RAID 10 dejando el disco 2 vacío.

  6. Elimine la matriz RAID 1 activa, agregue ese disco ahora vacío (disco 2) a la matriz RAID 10 y espere a que se complete la resincronización.

  7. Agregue el primer disco eliminado de RAID 1 (disco 4) a la matriz RAID 10.

  8. Dale a la esposa, adelante.

En el paso 7, creo que las unidades 1, 2 o 4 pueden fallar (durante la resincronización del disco 4) sin matar la matriz. Si la unidad 3 falla, los datos en la matriz son tostados.

user75601
fuente
+1, especialmente para el paso 3;)
-1, instrucción poco clara, no tengo esposa, pierdo mis datos
ZAB
1

He movido mi raid1 a raid10 ahora y aunque esta página me ayudó, pero faltan algunas cosas en las respuestas anteriores. Especialmente mi objetivo era mantener las horas de nacimiento ext4.

la configuración fue:

  • 2 discos raid1 de cada tipo msdos y md0 con partición ext4 y mbr con msdos
  • 2 nuevos discos nuevos que se convierten en las nuevas primarias (todas del mismo tamaño)
  • resultando en una incursión de 4 discos md127 ext4 pero debido al tamaño tuve que cambiar de mbr a gpt
  • es mi disco de inicio, por lo que no se requiere ni se pretende configurar el gestor de arranque
  • usando mi ubuntu cotidiano (entonces: no usando el disco de rescate externo)
  • usando gparted, dd y mdadm

como alguien dijo antes: el paso cero debe ser una copia de seguridad y siempre puede haber algo mal en el proceso que resulte en una pérdida de datos extrema

  1. APOYO

  2. configuración de la nueva incursión

    1. crear una nueva incursión

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (Descubrí que el diseño es importante ... el segundo y el cuarto parecen ser los duplicados en una incursión 'cercana' predeterminada)

    2. configure la partición de la incursión que estaba usando gparted configurando gpt en el md127 y luego agregando una nueva partición (ext4) del tamaño de la anterior o superior
  3. emigrar

    1. ahora obteniendo los datos ... primero estaba tratando de usar rsync que funcionó pero no pude mantener la hora de nacimiento ... use dd para clonar de la incursión anterior a la nueva

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      ESPERE
      , puede verificar enviando USR1 a ese proceso

      kill -s USR1 <pid>
      
    2. arreglar el raid
      gparted es una gran herramienta: le dices que verifique y arregle la partición y cambie su tamaño al tamaño completo de ese disco con solo unos pocos clics del mouse;)

    3. configure un nuevo uuid para esa partición y actualice su fstab con él (cambie el uuid)

    4. almacenar su incursión en conf

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      y quitar el viejo

      vim /etc/mdadm/mdadm.conf 
      
    5. reiniciar si no está en un rescusystem
  4. destruyendo el viejo

    1. fallar el primero y agregarlo a la nueva incursión

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      luego haga gpt en ese dispositivo y configure una nueva partición vacía

      mdadm /dev/md127 --add /dev/sdc1
      

      ESPERE
      , puede consultar con

      cat /proc/mdstat
      
    2. para el segundo

      mdadm --stop /dev/md0 
      

      luego haga gpt en ese último dispositivo y configure una nueva partición vacía nuevamente

      mdadm /dev/md127 --add /dev/sdd1
      

      ESPERE DE NUEVO

Cielo de verano
fuente
0

Lo hice con LVM. Configuración inicial: - sda2, sdb2 - y creó raid1 md1 en la parte superior. Se utilizaron sda1 y sdb1 para la segunda incursión raid1 para / partición de arranque. - md1 era pv en el espacio del grupo de volumen, con algunos lvm en él.

Agregué discos sdc y sdd y creé particiones como en sda / sdb.

Asi que:

  1. md10 creado como:

    mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 missing / dev / sdd2

  2. extender vg en él:

    pvcreate / dev / md10 vgextend space / dev / md10

  3. movió volúmenes de md1 a md10:

    pvmove -v / dev / md1 / dev / md10

(esperar a que termine) 4. reducir el grupo de volumen:

vgreduce space /dev/md1
pvremove /dev/md1
  1. detener matriz md1:

    mdadm -S / dev / md1

  2. agregue discos del viejo md1 al md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. actualizar la configuración en /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(y elimine el viejo md1)

Todo hecho en el sistema en vivo, con volúmenes activos utilizados para kvm's;)

indefinido
fuente