h1

Monitorizando un RAID en Linux

2/09/08

Hace poco tuve que montar un RAID con mirroring por software en el curro. Pero no voy a contar cómo se monta el RAID (si googleas un poco encontrarás cantidades industriales de información al respecto) sino cómo monitorizarlo para recibir un correo cada vez que haya algún problema.

Nota: esto está probado en una openSUSE 10.3 pero no creo que difiera mucho, si es que lo hace, con cualquier otra distribución.

Una vez montado el RAID la primera y más simple comprobación es consular el fichero “/proc/mdstat”:

localhost:~/scripts # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[0] sdb1[1]
312568576 blocks [2/2] [UU]

unused devices: <none>
localhost:~/scripts #

Esto no tiene mucha chicha: tenemos un RAID 1 llamado “/dev/md0” que utiliza las particiones “/dev/sdc1” y “/dev/sdb1” y todo está correcto.

Ahora debemos asegurarnos de tener funcionando el mdadmd. Este demonio se encarga de la monitorización propiamente dicha. La configuración de este demonio se encuentra en el fichero “/etc/sysconfig/mdadm”. A nosotros nos interesan sólo dos parámetros:

  • MDADM_PROGRAM=”/nuestro/script.sh”
  • MDADM_SCAN=yes

En el primero definimos el script al que debe pasarle los eventos que genere y en el segundo le indicamos que obtenga los datos del RAID del fichero “/proc/mdstat” (ahorrándonos el trabajo ;)

Este pequeño script trata los estados recibidos del mdadmd:


#!/bin/sh
#
# raidmon.sh
#
# Script que recoge los eventos generados por el mdadmd y envia
# un correo si hubiera algun problema.
#
# 01/09/2008
#
################################################################

ESTADO=$1
F_LOG=/root/scripts/raidmon.log
F_TMP=/root/scripts/.raidmon.tmp

# Lista de destinatarios separados por comas:
DEST=paco@pepe.com,pepe@paco.com

# Escribimos el correo:
echo "Tipo de evento: $ESTADO" > $F_TMP
echo >> $F_TMP
echo "Fichero mdstat:" >> $F_TMP
echo >> $F_TMP
cat /proc/mdstat >> $F_TMP

# Enviamos el correo para los eventos definidos:
case $ESTADO in

 Fail|DegradedArray|RebuildStarted|RebuildFinished)
   /bin/mail -s "Evento en RAID" "$DEST" < $F_TMP
   ;;

 *)
   ;;

esac

# Hacemos log:
date >> $F_LOG

if [ $ESTADO ]; then
  cat $F_TMP >> $F_LOG
else
  echo "Todo correcto" >> $F_LOG
fi

echo "#################################" >> $F_LOG

rm $F_TMP

exit 0

Copiamos el script en la ruta que hayamos definido en MDADM_PROGRAM y si todo está bien ya debería funcionar: el mdadmd monitoriza el RAID y envía los eventos generados a nuestro script. Si el evento es de tipo Fail, DegradedArray, RebuildStarted o RebuildFinished envía un emilio. Si es de cualquier otro tipo o todo ha ido bien (evento nulo) escribe en un registro en el log.

Para probarlo podemos introducir el siguiente churro en la consola:

mdadm -F -p ./nuestro_script.sh –scan -t -1

Y veremos el el log algo como:

Tue Sep  2 12:10:20 CEST 2008
Tipo de evento: TestMessage

Fichero mdstat:

Personalities : [raid1]
md0 : active raid1 sdc1[0] sdb1[1]
312568576 blocks [2/2] [UU]

unused devices: <none>

A parte de tenerlo vigilado es muy conveniente programar una reconstrucción de vez en cuando. Yo lo he metido en el crontab para que se ejecute todos los sábados. El comando es el siguiente:

echo repair >/sys/block/md0/md/sync_action

Ojo al md0. Puede que el tuyo sea md1, md2, …

Bola extra: buscando información al respecto he llegado al blog de Iván López en el que cuenta cómo hacer esto mismo pero enviando SMS con el API de Google Calendar.

Bibliografía: Web de Novell, Blog de Iván López, Wiki de openSUSE y, por supuesto, los imprescindibles man.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: