En corto
| |
De 3 discos a 4 en un RAID 5: la capacidad útil pasa de 2 a 3 discos. El reshape reescribe todos los stripes y tarda horas o días según el tamaño; el array sigue en servicio mientras tanto.
Antes de tocar nada
Backup. El reshape es la operación más delicada de md: reescribe todos los datos con el array en producción. Si algo se va a romper, es aquí.
Array sano.
mdadm --detail /dev/md0debe decirState : cleansindegraded,recoveringniresyncing. Nunca hagas--growsobre un array degradado.Discos sanos.
smartctl -H /dev/sdXen todos los miembros. Un disco que muere a mitad del reshape de un RAID 5 es pérdida total.Disco nuevo del mismo tamaño o mayor. Si el array usa particiones en vez de discos completos, copia la tabla del disco existente al nuevo:
1 2sfdisk -d /dev/sda | sfdisk /dev/sdd # MBR sgdisk -R /dev/sdd /dev/sda && sgdisk -G /dev/sdd # GPT (-G regenera los GUID)y añade
/dev/sdd1en lugar de/dev/sdd.
Paso a paso
1. Añadir el disco. Entra como spare:
| |
2. Crecer el array. Es lo que arranca el reshape:
| |
--backup-file guarda una copia de los stripes que están siendo reescritos en el tramo crítico del reshape. Tiene que estar en un disco que no forme parte del array y que no sea tmpfs. En arrays con metadata 1.2 y espacio libre antes del área de datos mdadm a veces avisa de que no lo necesita; darlo no hace daño.
3. Vigilar.
| |
Por defecto md se autolimita para no matar el rendimiento (speed_limit_min = 1000 KB/s cuando hay carga). Si el array no está atendiendo a nadie, súbelo:
| |
4. Crecer el sistema de archivos. Cuando /proc/mdstat ya no muestre reshape, mdadm --detail dará Raid Devices : 4 y un Array Size mayor. El sistema de archivos sigue ocupando el tamaño viejo:
| |
5. Limpieza. Borra el backup-file. /etc/mdadm/mdadm.conf no cambia: la línea ARRAY identifica el array por UUID, no por número de discos. Si / vive en el array, regenera el initramfs por prudencia (update-initramfs -u en Debian/Ubuntu, dracut -f en RHEL/Fedora).
Trampas
- No se puede deshacer. Una vez empieza el reshape solo termina hacia delante. Puedes reiniciar la máquina (continúa solo al ensamblar) pero no cancelarlo.
- Corte de luz a mitad. Si al arrancar el array no se ensambla,
mdadm --assemble /dev/md0 --backup-file=/root/md0-grow.bak /dev/sd[abcd]; ahí es donde el backup-file se gana el nombre. - Bitmap. Si mdadm se niega por el write-intent bitmap, quítalo antes y vuelve a ponerlo al terminar:
mdadm --grow --bitmap=none /dev/md0…mdadm --grow --bitmap=internal /dev/md0. - Cambiar el chunk (
mdadm --grow --chunk=128 /dev/md0) también es un reshape completo, con las mismas reglas. - Discos grandes en RAID 5 son una apuesta: con 4 discos de 8 TB, la reconstrucción tras un fallo dura días sin redundancia. El mismo
--growpermite pasar a RAID 6:mdadm --grow /dev/md0 --level=6 --raid-devices=5 --backup-file=…. - Discos completos vs particiones. Mezclar
/dev/sddcon/dev/sda1funciona pero luego confunde; sigue el patrón que ya tenga el array.
Referencias: Growing en la Linux RAID Wiki y man 8 mdadm (sección GROW MODE).