Resincronización de arreglos de disco con MDADM
La complegidad de utilizar algunas controladoras RAID por hardware o el que simplemente no existan como tal en un servidor lleva a muchos administradores de sistemas a utilizar arreglos basados en software. Para ello MDADM resulta bastante práctico, ya sea utilizándolo desde una instalación limpia ( creando el arreglo al instalar ) o inclusive en forma posterior a la instalación. Una vez que el arreglo ya está operativo, mdadm sirve tanto para monitorear como para administrar el arreglo por la línea de comandos.
Esta herramienta crea una instancia que verifica cada cierto tiempo el estado de los arreglos y si lo queremos, es capaz de enviarnos un e-mail en caso de que detecte algún problema.
Una vez configurado, podemos verificar el estado con el comando cat /proc/mdstat . donde es posible obtener una salida como esta:
Personalities : [raid1]
md0 : active raid1 sdd1[0] sdc1[1]
488383936 blocks [2/2] [UU]
bitmap: 1/233 pages [4KB], 1024KB chunk
md3 : active raid1 sda3[0] sdb3[1]
56661184 blocks [2/2] [UU]
bitmap: 0/217 pages [0KB], 128KB chunk
md2 : active raid1 sdb2[1] sda2[0]
19534976 blocks [2/2] [UU]
bitmap: 24/150 pages [96KB], 64KB chunk
Esto nos indica que hay 3 arreglos en el sistema, denominados md0, md2 y md3 respectivamente. Para utilizar mdadm en la verificación detallada de un arreglo, lo hacemos de la siguiente forma:
mdadm --detail /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Tue Mar 24 13:47:11 2009
Raid Level : raid1
Array Size : 488383936 (465.76 GiB 500.11 GB)
Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Thu Jul 1 09:30:15 2010
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : d9b70b0f:d8d9b0aa:a56c0ad1:03f3b8d3 (local to host servicios)
Events : 0.1034316
Number Major Minor RaidDevice State
0 8 49 0 active sync /dev/sdd1
1 8 33 1 active sync /dev/sdc1
En lo anterior vemos que hay 2 discos en un arreglo y que todo está funcionando normalmente, sin embargo hay veces en que por alguna razón particular uno de los discos puede perder la sincronía en el arreglo y quedar fuera de servicio, en esos casos mdadm nos envia un correo con el siguiente contenido:
A DegradedArray event had been detected on md device /dev/md2.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid1]
md0 : active raid1 sdd1[0] sdc1[1]
488383936 blocks [2/2] [UU]
bitmap: 2/233 pages [8KB], 1024KB chunk
md3 : active raid1 sda3[0] sdb3[1]
56661184 blocks [2/2] [UU]
bitmap: 0/217 pages [0KB], 128KB chunk
md2 : active raid1 sda2[0] sdb2[2](F)
19534976 blocks [2/1] [U_]
bitmap: 66/150 pages [264KB], 64KB chunk
mdadm --detail /dev/md2
y asumiendo que sea por ejemplo /dev/sda2 , es sobre este en el que hay que trabajar.mdadm -r /dev/md2 /dev/sda2
Con esto retiramos en caliente lógicamente el disco del arreglo y ya es posible trabajar en el al estar completamente desmontado.
fsck.ext3 /dev/sda2
mdadm --add /dev/md2 /dev/sda2
Esto último integra el disco al arreglo y mdadm se encarga de sincronizar el mismo al arreglo. Es importante decir que esto debe hacerse con el menos movimiento de datos posible al momento de operar, si es posible, hacerlo en modo SINGLE (a prueba de fallos) o con los servicios que acceden a este arreglo, detenidos, para evitar que ocurran problemas o se demore mas de la cuenta.
Para comprobar el progreso de la sincronización, hay 2 alternativas:
cat /proc/mdstat
mdadm --detail /dev/md2
En ambas (con distinto nivel de detalle) se puede observar el progreso.
Una cosa importante es contar con el Intent Bitmap activo, esto es una característica que se le agrega a un arreglo por software y permite hacer sincronizaciones diferenciales entre los discos tras producirse una falla, reduciendo asi los tiempos al no tener que sincronizar el disco completo cada vez que algo ocurre.
Al verificar el detalle de cada arreglo con mdadm de la forma ya mencionada en este artículo, se muestra si está activa o no esta característica, en este casi si lo está.
Para añadir soporte Bitmap, ejecutamos lo siguiente ( considerando a md2 como el arreglo a trabajar) :
mdadm --grow /dev/md2 --bitmap=internal
Muy buena información, gracias por compartirla.