¿Reducir RAID quitando un disco?

14

Tengo un Synology NAS con 12 bahías. Inicialmente, decidimos asignar los 12 discos para un solo volumen RAID-6, pero ahora nos gustaría reducir el volumen para usar solo 10 discos y asignar dos discos duros como repuestos.

El Asistente de administrador de volumen puede expandir fácilmente el volumen agregando discos duros, pero no he encontrado la manera de reducir el volumen quitando discos duros . ¿Cómo puedo hacer eso sin tener que reiniciar todo el sistema?

Pierre Arnaud
fuente
¿Cuál es el objetivo aquí? Actualmente, se utilizan dos discos como paridad, por lo que la matriz puede tolerar dos fallas. Si desea dos repuestos, podría dejarlos cerca y tener la misma tolerancia, pero con más espacio en disco.
Paul
Claro, pero tengo que ir a la oficina, sacar un disco e insertar un disco de reemplazo. Tener un repuesto permite hacer esto de forma remota.
Pierre Arnaud
¿Su Synology tiene MDADM incorporado si lo hace?
Paul
Sí, tengo acceso a la herramienta mdadm.
Pierre Arnaud

Respuestas:

19

Para esto, voy a suponer que hay 12 discos en la matriz, y cada uno tiene 1 TB de tamaño.

Eso significa que hay 10 TB de almacenamiento. Esto es, por ejemplo, siempre que no esté utilizando más de 6 discos (6 TB) de almacenamiento, no importa de qué tamaño sean.

Descargo de responsabilidad obligatorio: Synology no admite nada de esto, por lo que debería consultar con ellos si este enfoque puede causar problemas, realizar copias de seguridad de antemano y cerrar los servicios de Synology de antemano. Synology utiliza matrices de incursiones md estándar hasta donde yo sé, y son accesibles si el disco se mueve a un servidor estándar que admita md, por lo que no debería haber problemas.

Visión general

La secuencia es así:

  1. Reduce el tamaño del sistema de archivos
  2. Reduce el tamaño del volumen lógico
  3. Reduce el tamaño de la matriz
  4. Cambiar el tamaño del sistema de archivos
  5. Convierta los discos de repuesto en repuestos activos

Sistema de archivos

Encuentra la partición principal, usando df -h, debería verse algo así como:

Filesystem                Size      Used Available Use% Mounted on
/dev/vg1/volume_1         10T       5T   5T         50% /volume1

Use este comando para cambiar el tamaño al máximo que necesita y no más:

umount /dev/vg1/volume_1
resize2fs -M /dev/vg1/volume_1

Revisa ahora:

mount /dev/vg1/volume_1 /volume1
df -h

Filesystem                Size      Used Available Use% Mounted on
/dev/vg1/volume_1         5T       5T    0T        100% /volume1

Volumen

Para reducir el tamaño del volumen, usa lvreduce (hazlo un poco más grande por si acaso):

umount /dev/vg1/volume_1
lvreduce -L 5.2T /dev/vg1/volume_1

Ahora que se ha reducido el volumen lógico, use pvresize para reducir el tamaño del volumen físico:

pvresize --setphysicalvolumesize 5.3T /dev/md0

Si el cambio de tamaño falla, vea esta otra pregunta para mover las porciones de datos que se asignaron al final del volumen físico hacia el principio.

Ahora tenemos un volumen de 5.3T en una matriz de 10T, por lo que podemos reducir de forma segura el tamaño de la matriz en 2T.

Formación

Descubre el dispositivo md:

 pvdisplay -C
 PV         VG      Fmt  Attr PSize   PFree
 /dev/md0   vg1     lvm2 a--  5.3t    0.1t

El primer paso es decirle a mdadm que reduzca el tamaño de la matriz (con grow):

mdadm --grow -n10 /dev/md0
mdadm: this change will reduce the size of the array.
       use --grow --array-size first to truncate array.
       e.g. mdadm --grow /dev/md0 --array-size 9683819520

Esto significa que para ajustar la matriz actual en 10 discos, necesitamos reducir el tamaño de la matriz.

 mdadm --grow /dev/md0 --array-size 9683819520

Ahora es más pequeño, podemos reducir la cantidad de discos:

 mdadm --grow -n10 /dev/md0 --backup-file /root/mdadm.md0.backup

Esto llevará mucho tiempo, y puede monitorearse aquí:

 cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md4 : active raid6 sda4[0] sdb4[1] sdc4[2] sdd4[3] sde4[4] sdf4[5] sdg4[6] sdh4[7] sdi4[1] sdj4[1] 
      [>....................]  reshape =  1.8% (9186496/484190976)
                              finish=821.3min speed=9638K/sec [UUUUUUUUUU__]

Pero no necesitamos esperar.

Cambie el tamaño del PV, LV y el sistema de archivos al máximo:

pvresize /dev/md0
lvextend -l 100%FREE /dev/vg1/volume_1
e2fsck -f /dev/vg1/volume_1
resize2fs /dev/vg1/volume_1

Establecer discos de repuesto como repuestos

No hay nada que hacer aquí, los discos de repuesto en una matriz son repuestos automáticamente. Una vez que haya completado la remodelación, verifique el estado:

cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md4 : active raid6 sda4[0] sdb4[1] sdc4[2] sdd4[3] sde4[4] sdf4[5] sdg4[6] sdh4[7] sdi4[S] sdj4[S] 
Pablo
fuente
Muchas gracias por estas instrucciones detalladas. Primero esperaré a que mi matriz RAID termine de reconstruirse después de haber reemplazado un HDD (capacidad total: 17.86 TB, está tomando algo de tiempo).
Pierre Arnaud
También eche un vistazo a la hoja de trucos mdadm ( ducea.com/2009/03/08/mdadm-cheat-sheet ).
Pierre Arnaud
@ Pablo - superuser.com/questions/1274328/... marcar este comentario para el retiro después de determinar si se puede ayudar al usuario
Ramhound
¡Tener cuidado! Creo que esta respuesta podría conducir a la pérdida de datos, como es: ¡no hay verificación de que lvm lv esté realmente al comienzo del pv! (que no está garantizado con lvm). Consulte unix.stackexchange.com/questions/67702/… (y unix.stackexchange.com/questions/67702/… en caso de error) para ver una forma de garantizar que el final del PV esté libre para reducirse.
Ekleog
@Ekleog Gracias, este comentario sería mejor ubicado como parte de la respuesta en caso de que se pierda
Paul