Alerta sobre el posible fallo del disco duro

Imagen de jriosa
0 puntos

A veces los discos duros fallan y con la tecnología S.M.A.R.T. es posible intentar anticiparnos al fallo de un disco duro.

Necesitamos de un paquete llamado smartmontools, y para alertarnos sobre nuestra cuenta de correo el paquete sendEmail.

Smartmontools tiene un demonio que hace ejecutar programas y nos avisará si hay problemas en nuestros disco duros (smartd), pero lo cierto es que no he sido capaz de encontrar la forma de parametrizar el envío a una cuenta de correo. Es decir no sé como hace para enviar un correo con un determinado usuario, a un determinado servidor etc.

Con lo cual me he creado un script que hace lo siguiente, se ejecuta el comando smartctl -Hc /dev/sda y si hay el test resulta bueno aparecerá algo de este estilo
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Así que si no encuentro esto me conviene inventigar que le pasa al disco duro

Os adjunto el script por si alguien le interesa esta aplicación.

#!/bin/bash
# Version 0.0.1 uso G.P.L.
# script para saber si se nustro disco duro tiene problemas, se debe tener s.m.a.r.t. activado y el paquete smartmontools
# ejecutamos cada día nuestro ordenador y enviamos por correo electrónico si es el caso
# pocentaje de aviso límite, por ejemplo 80%, debe ser un número

ResultadoTest=""
# Poner todos los disco duros del equipo separado por espacios en blanco para monitorizarlos
# DiscosPC="/dev/sda /dev/sdb /dev/sdc"
DiscosPC="/dev/sda"


for HD in $DiscosPC; do
	echo "Analizando el disco duro $HD"
	ResultadoTest=$(smartctl -Hc $HD | grep PASSED)
	echo "El resultado del test al $HD es $ResultadoTest"
	if [ "$ResultadoTest" = "" ];then
		# enviamos aviso por correo electrónico
		# Asunto del correo
		Asunto="El disco duro $HD en el $HOSTNAME no ha superado la prueba de S.M.A.R.T"
		# Email To ?
		De="UsuariodeEnvio@dominio.com"
		# Email text/message
		Cuerpo="Es muy posible que tu disco tenga problemas pronto. Haz copia de seguridad de tus datos y reemplaza a la mayor brevedad posible el disco ..."
		# Persona destinatario del mensaje
		Destinatario="destinatario@dominio.com"
		# Servidor de correo
		ServidorSMTP="Servidor.dominio.com"
		# Usuario de envío
		Usuario="UsuariodeEnvio"
		# Contraseña de envío
		Password="PassworddelUsuariodeEnvio"
		# enviamos using sendEmail
		sendEmail -f "$De" -t "$Destinatario" -u "$Asunto" -m "$Cuerpo" -s "$ServidorSMTP" -xu "$Usuario" -xp "$Password"
	else
		echo "Parece que el test sobre el disco duro $HD ha salido bien"
	fi
done

P.D. Se debe ejecutar como root (smartctl lo requiere)

Imagen de jriosa
+1
0
-1

Después de leer algo más acerca de este tema, he cambiado la sentencia a usar smartctl -Hc $HD por esta otra smartctl -q errorsonly -H -l selftest $HD

Entre las posible mejoras a hacer sería hacer una función donde descubriera los discos duros de la máquina y así no modificar el script en cada máquina instalada como está en las líneas
# DiscosPC="/dev/sda /dev/sdb /dev/sdc"
DiscosPC="/dev/sda"

También se podría pasar en el texto del correo el resultado de un test más detallado, pero si esto te falla lo mejor es hacer copia de seguridad y sustituir el disco pienso yo.

#!/bin/bash
# Version 0.0.2 uso G.P.L.
# script para saber si se nustro disco duro tiene problemas, se debe tener s.m.a.r.t. activado en el disco y el paquete smartmontools
# ejecutamos cada cierto tiempo usando crontab -e en nuestro ordenador y enviamos por correo electrónico si es el caso


ResultadoTest=""
DiscosPC="/dev/sda"

for HD in $DiscosPC; do
	echo "Analizando el disco duro $HD"
	ResultadoTest=$(smartctl -q errorsonly -H -l selftest $HD)

	#echo "El resultado del test al $HD es $ResultadoTest"
	if [ "$ResultadoTest" = "" ];then
		echo "Parece que el test sobre el disco duro $HD ha salido bien"
	else
		# enviamos aviso por correo electrónico
		
		# Asunto del correo
		Asunto="El disco duro $HD en el $HOSTNAME no ha superado la prueba de S.M.A.R.T"
		# Email To ?
               De="UsuariodeEnvio@dominio.com"
		# Email text/message
		Cuerpo="Es muy posible que tu disco tenga problemas pronto. Haz copia de seguridad de tus datos y reemplaza a la mayor brevedad posible el disco ... Ejecuta smartctl -l error $DiscosPC para ver lo errores."
		# Persona destinatario del mensaje
		Destinatario="destinatario@dominio.com"
		# Servidor de correo
		ServidorSMTP="Servidor.dominio.com"
		# Usuario de envío
		Usuario="Usuario de envío de correo"
		# Contraseña de envío
		Password="contraseña del usuario de correo de envío"
		# enviamos using sendEmail
		sendEmail -f "$De" -t "$Destinatario" -u "$Asunto" -m "$Cuerpo" -s "$ServidorSMTP" -xu "$Usuario" -xp "$Password"

	fi
done

+1
0
-1
Imagen de jriosa
+1
0
-1

Después de leer este enlace https://help.ubuntu.com/community/Smartmontools y de hacer un seguimiento a los archivos

  • /etc/default/smartmontools
  • /etc/smartd.conf

Al final otra opción es modificar el archivo /etc/smartmontools/run.d/10mail, para que envíe la prueba usando sendemail en lugar de mailx como MTA.
Adjunta un fichero con el resultado de la prueba en lugar de meterlo en el texto del correo.
Comenta la última línea y añade las líneas para usar sendemail

#Asunto del correo
Asunto="El disco duro en el $HOSTNAME no ha superado la prueba de S.M.A.R.T"
# Email To ?
De="remitente@midominio.com"
# Email text/message
Cuerpo="Es muy posible que tu disco tenga problemas pronto. Haz copia de seguridad de tus datos y reemplaza a la mayor brevedad posible el disco ... "
# Persona destinatario del mensaje
Destinatario="destinatario@dominio.com"
# Servidor de correo
ServidorSMTP="servidordecorreo.midominio.com"
# Usuario de envío
Usuario="usuariodecorreo"
# Contraseña de envío
Password="Contraseñadecorreo"
# enviamos using sendEmail
sendEmail -f "$De" -t "$Destinatario" -u "$Asunto" -m "$Cuerpo" -s "$ServidorSMTP" -xu "$Usuario" -xp "$Password" -a "$input"

Este es lo puesto en el archivo /etc/smartd.conf

DEVICESCAN -d sat -M test -M exec /usr/share/smartmontools/smartd-runner -m destinatariocorreo@dominio.com

Una vez probado quitar la opción del test quedando

DEVICESCAN -d sat -M exec /usr/share/smartmontools/smartd-runner -m destinatariocorreo@dominio.com
+1
0
-1