La tecnología S.M.A.R.T. permite monitorizar los diferentes parámetros del disco como pueden ser: la velocidad de los platos del disco, sectores defectuosos, errores de calibración, CRC, distancias medias entre el cabezal y el plato, temperatura del disco, etc.

Con este pequeño script pandoraFMS nos avisará si hay algún problema para poder reaccionar a tiempo. Si tienes algún servidor en cierta empresa francesa que empieza por O y acaba en VH deberías de ponerlo si o si. 🙂

El script necesita tener instalada una versión mas o menos moderna de las smartmontools ya que las versiones más antiguas no incluyen el parametro –scan de smartctl

#!/bin/bash
 
OK="PASSED"
 
for i in $(smartctl --scan | awk {'print $1'})
        do
                SMART=$(smartctl -H $i | grep "SMART overall-health self-assessment test result"|tr -d " " |awk '{split($0,a,":");print a[2]}')
                if [ $SMART != $OK ]
                then
                        SALIDA="1"
                        DESCRIBE="ERROR EN DISCO $i"
                else
                        SALIDA="0"
                        DESCRIBE="Check de errores de HD $i con smart"
                fi
                echo "<module>";
                echo "<name>< ![CDATA[Smart $i]]></name>";
                echo "<type>< ![CDATA[generic_data]]></type>";
                echo "<data>< ![CDATA[$SALIDA]]></data>";
                echo "<description>< ![CDATA[$DESCRIBE]]></description>";
                echo "<min_critical>1</min_critical>";
                echo "</module>";
 
        done

PLUS: Si no utilizas PandoraFMS y quieres tener controlada la salud de tus discos este script te enviará un email si S.M.A.R.T. detecta algún problema. Necesitas tener instalado, además del smartmontools, mailutils para poder enviar el email.

#!/bin/bash
OK="PASSED"
for i in $(smartctl --scan | awk {'print $1'})
        do
                SMART=$(smartctl -H $i | grep "SMART overall-health self-assessment test result"|tr -d " " |awk '{split($0,a,":");print a[2]}')
                echo $SMART
                if [ $SMART != $OK ]
                then
                        TO_ADDRESS="correo@micorreoorigen.com"
                        FROM_ADDRESS="correo@micorreodestino.com"
                        SUBJECT="Error en disco smart"
                        BODY=" El disco xxxxx ha dado un error. Revisar cuanto antes"
                        echo ${BODY}| mail -s ${SUBJECT} ${TO_ADDRESS} -- -r ${FROM_ADDRESS}
 
                fi;
 
        done

Mas información sobre S.M.A.R.T:
http://sourceforge.net/apps/trac/smartmontools/wiki
http://lime-technology.com/wiki/index.php/Understanding_SMART_Reports
http://en.wikipedia.org/wiki/S.M.A.R.T

Este sencillo script para pandorafms nos permite comprobar si un raid software tiene algún problema para poder actuar cuanto antes.

#!/bin/bash
for i in $(mdadm --detail --scan | cut -d" " -f2)
        do
                ESTADORAID=$(mdadm --query --detail $i | grep "State :" | tr -d " ")
 
                CHECK=$(echo $ESTADORAID | egrep -c "State:clean,checking|State:active|State:clean")
 
 
                if [ $CHECK -eq 0 ]
                then
                        SALIDA="1"
      #                  DESCRIBE="ERROR EN ARRAY $i"
                        DESCRIBE=$ESTADORAID
                else
                        SALIDA="0"
                        DESCRIBE="Check OK de errores de Raid $i con mdadm"
                fi
                echo "<module>";
                echo "<name>< ![CDATA[Check_raid $i]]></name>";
                echo "<type>< ![CDATA[generic_data]]></type>";
                echo "<data>< ![CDATA[$SALIDA]]></data>";
                echo "<description>< ![CDATA[$DESCRIBE]]></description>";
                echo "<min_critical>1</min_critical>";
                echo "</module>";
 
        done

El script se guarda en la carpeta de plugins del agente de pandora y en la configuración del agente deberíamos añadir la siguiente línea:
module_plugin check_raid

Si queréis comprobarlo a mano se podría utilizar el siguiente comando:

mdadm --detail --scan | cut -d" " -f2 | xargs -I ARG mdadm --query --detail ARG | grep "State :"

Y si no os funcionara mdadm con un simple:

cat /proc/mdstat

Podríais ver el estado del array