Configurar smartmontools en FreeBSD 14.2 para supervisar el estado de discos SSD y/o nvme y enviar correos mediante DMA usando los servidores de Gmail
Instalar smartmontools
pkg install smartmontools
Habilitar el servicio smartd para que inicie al arrancar el sistema
sysrc smartd_enable="YES"
Iniciar servicio
service smartd start
Identificar el disco SSD
Primero listar los discos disponibles
smartctl --scan /dev/da0 -d sat # /dev/da0 [SAT], ATA device /dev/nvme0 -d nvme # /dev/nvme0, NVMe device
Configurar smartd para monitorear el SSD
Editar el archivo de configuración
cp /usr/local/etc/smartd.conf.sample /usr/local/etc/smartd.conf
Agregar esta línea para monitorear el SSD y enviar alertas por correo electrónico
/dev/da0 -d sat -H -l error -l selftest -f -m tucorreo@protonmail.comExplicación
-H Comprueba el estado general SMART -l error Revisa el log de errores -l selftest Revisa el log de autopruebas -f Revisa fallos futuros -m Dirección de correo para notificaciones
Comprobar que el disco habla con el disco /dev/da0
# smartctl -d sat -a /dev/da0 smartctl 7.5 2025-04-30 r5714 [FreeBSD 14.3-RELEASE-p2 amd64] (local build) Copyright (C) 2002-25, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Toshiba 2.5" HDD MQ04UBD... Device Model: TOSHIBA MQ04UBD200 Serial Number: Y0JKT0QOT LU WWN Device Id: 0 000000 000000000 Firmware Version: JT001U User Capacity: 2,000,398,934,016 bytes [2.00 TB] Sector Sizes: 512 bytes logical, 4096 bytes physical Rotation Rate: 5400 rpm Form Factor: 2.5 inches Zoned Device: Device managed zones Device is: In smartctl database 7.5/5706 ATA Version is: ACS-3 T13/2161-D revision 5 SATA Version is: SATA 3.3, 3.0 Gb/s (current: 3.0 Gb/s) Local Time is: Tue Sep 23 15:03:29 2025 CEST SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED ...
Configurar DMA para enviar correos por Gmail
https://gnulinuxcodigo.blogspot.com/2024/12/freebsd-dma-dragonfly-mail-agent.html
FreeBSD 14.2 usa DMA como agente de correo por defecto.
Probando el envío de correos
echo "Prueba de correo desde FreeBSD" | mail -s "Prueba" tucorreo@protonmail.com
o, otra forma para lograr el mismo resultado
cat >> mensaje.txt<<EOF Esto es una prueba de correo desde usando el agente DMA. EOF mail -v -s prueba tucorreo@protonmail.com < mensaje.txt
Verificar el log de DMA
tail -f /var/log/maillog ... Sep 19 08:59:00 tormenta dma[dd67.2b6bad248050][86005]: trying remote delivery to smtp.gmail.com [74.125.133.109] pref 0 Sep 19 08:59:00 tormenta dma[dd67.2b6bad248050][86005]: using SMTP authentication for user tucorreo@gmail.com Sep 19 08:59:01 tormenta dma[dd67.2b6bad248050][86005]:delivery successful
Para que smartmontools vigile un disco NVMe
Averiguar el nodo del NVMe
nvmecontrol devlist nvme0: CT500P2SSD8 nvme0ns1 (476940MB) ls -l /dev/nvme* crw------- 1 root wheel 0x33 Sep 20 15:41 /dev/nvme0 crw------- 1 root wheel 0x40 Sep 20 15:41 /dev/nvme0ns1
Comprobar que smartctl habla con el NVMe
smartctl -d nvme /dev/nvme0ns1 -i smartctl 7.5 2025-04-30 r5714 [FreeBSD 14.2-RELEASE-p1 amd64] (local build) Copyright (C) 2002-25, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Number: CT500P2SSD8 Serial Number: 2216E629B1D4 Firmware Version: P2CR048 PCI Vendor/Subsystem ID: 0xc0a9 IEEE OUI Identifier: 0x00a075 Total NVM Capacity: 500,107,862,016 [500 GB] Unallocated NVM Capacity: 0 Controller ID: 1 NVMe Version: 1.3 Number of Namespaces: 1 Namespace 1 Size/Capacity: 500,107,862,016 [500 GB] Namespace 1 Formatted LBA Size: 512 Namespace 1 IEEE EUI-64: 00a075 61b0000125 Local Time is: Fri Sep 19 09:36:00 2025 CEST
Mostrará modelo, serial, versión NVMe, etc.
Crear una entrada específica para el NVMe en /usr/local/etc/smartd.conf
/dev/nvme0ns1 -d nvme -H -l error -l selftest -f -m tucorreo@protonmail.com -M test
Explicación
-d nvme - le dice a smartd que use el backend NVMe -H - atributo "Health" -l error - log de errores -l selftest - log de autopruebas -f - predicción de fallos -m - destinatario -M test - envía un correo de bienvenida al arrancar smartd (útil para verificar).
service smartd restart
En /var/log/daemon.log se verá
tail -f /var/log/daemon.log ... Sep 19 09:55:34 tormenta smartd[87644]: Device: /dev/nvme0, opened Sep 19 09:55:34 tormenta smartd[87644]: Device: /dev/nvme0, CT500P3SSD8, S/N:2240E6733488, FW:P9CR30A Sep 19 09:55:34 tormenta smartd[87644]: Device: /dev/nvme0, is SMART capable. Adding to "monitor" list. Sep 19 09:55:34 tormenta smartd[87644]: Monitoring 1 ATA/SATA, 0 SCSI/SAS and 1 NVMe devices
Arrancar o reiniciar el demonio
service smartd restart
En /var/log/daemon.log se verá la línea "Device:/dev/nvme0ns1,opened" y si se incluye -M test, un correo inmediato.
En FreeBSD el paquete smartmontools no instala helper de notificación; hay que crearlo.
Crear el script que smartd invoca y asegurarse de que llame a /usr/bin/mail smartd siempre ejecuta el script con sh, por lo que la shell personal (csh) no afecta en absoluto.
cat > /usr/local/sbin/smartdnotify-mailout <<'EOF' #!/bin/sh # SMARTD_ADDRESS direccion destino # SMARTD_SUBJECT asunto # SMARTD_MESSAGE cuerpo del mensaje exec /usr/bin/mail -s "$SMARTD_SUBJECT" "$SMARTD_ADDRESS" <<EOF_MAIL $SMARTD_MESSAGE EOF_MAIL EOF
Contenido del archivo /usr/local/sbin/smartdnotify-mailout
#!/bin/sh # SMARTD_ADDRESS direccion destino # SMARTD_SUBJECT asunto # SMARTD_MESSAGE cuerpo del mensaje exec /usr/bin/mail -s "$SMARTD_SUBJECT" "$SMARTD_ADDRESS" <<EOF $SMARTD_MESSAGE EOF
Hay que darle permisos de ejecución
chmod 755 /usr/local/sbin/smartdnotify-mailout
Verificar que smartd lo va a usar
grep ^mailout /usr/local/etc/smartd.conf
Si tuviera una línea como
MAILER /usr/local/libexec/smartdnotify
comentarla o borrarla para que smartd use el helper estándar.
Simular las variables que smartd exporta (shell csh)
setenv SMARTD_ADDRESS "tucorreo@protonmail.com" setenv SMARTD_SUBJECT "SMART alerta" setenv SMARTD_MESSAGE "Problema en disco detectado"
En csh las variables anteriores sólo existen en esa shell; Cuando smartd arranca como servicio, no las ve.
La solución es asegurarse de que smartd exporte esas variables él mismo
Forzar un correo de prueba
service smartd restart
si smartd ya está corriendo
pkill -USR1 smartd
Verificar la entrega
tail -f /var/log/maillog ... Sep 21 16:14:42 tormenta dma[8210.32674c848000][49835]: trying remote delivery to smtp.gmail.com [64.233.184.109] pref 0 Sep 21 16:14:43 tormenta dma[f8210.32674c848000][49835]: using SMTP authentication for user tucorreo@gmail.com Sep 21 16:14:43 tormenta dma[f820e.57c02fa48000][49825]: <tucorreo@protonmail.com> delivery successful Sep 21 16:14:44 tormenta dma[f8210.32674c848000][49835]: <tucorreo@protonmail.com> delivery successful
El mensaje "SMART daemon startup" llegará a la bandeja de entrada
Comprobaciones
smartd invoca realmente el helper?
Verlo en tiempo real
service smartd stop smartd -d -c /usr/local/etc/smartd.conf
En otra terminal forzar el envío
pkill -USR1 smartd
En la primera terminal debe aparecer
Executing "/usr/local/sbin/smartdnotify-mailout"
Si no aparece el problema es parseo de smartd.conf (espacio, salto de línea, falta -M test, etc.)
Borrar las variables del shell (no hacen falta), csh
unsetenv SMARTD_SUBJECT SMARTD_MESSAGE SMARTD_ADDRESS
No se necesita setenv en ningún fichero. Reiniciar smartd con service smartd restart y el demonio exportará las variables antes de llamar al helper.
Ahora ya se puede quitar -M test de ambas líneas cuando ya no se desee recibir el correo de bienvenida cada vez que reinicie smartd
-M test sólo fuerza el envío de un aviso al arrancar el demonio. No afecta a las alertas reales; esas se mandan siempre cuando ocurran.
A partir de ahora no se recibirá el mail "SMART daemon startup". Sí recibirás cualquier alerta real cuando smartd la detecte.
Verificar el estado actual y forzar una alerta en cualquier momento sin reiniciar el servicio.
Lectura rápida en caliente (sin detener smartd)
smartctl -d nvme -A /dev/nvme0ns1 smartctl -d nvme -H /dev/nvme0ns1 smartctl -d nvme -l /dev/nvme0 smartctl -d sat -A /dev/da0 smartctl -d sat -H /dev/da0 smartctl -d sat -l error /dev/da0
Forzar un evento para comprobar que las alertas siguen funcionando
kill -USR1 $(pgrep smartd) # sh kill -USR1 `pgrep smartd` # csh
Ver que está vigilando smartd en este momento
tail -f /var/log/daemon.log | grep smartd
Cada 30 minutos, que es el valor por defecto, vuelve a comprobar y registrará cualquier cambio.
Mensajes recibidos en mi correo (uno por cada disco)
Primer mensaje
This message was generated by the smartd daemon running on: host name: tormenta DNS domain: [Empty] The following warning/error was logged by the smartd daemon: TEST EMAIL from smartd for device: /dev/da0 [SAT] Device info: TOSHIBA MQ04UBD200, S/N:Y0JKT0QOT, WWN:0-000000-000000000, FW:JT001U, 2.00 TB For details see host's SYSLOG.
Segundo mensaje
This message was generated by the smartd daemon running on: host name: tormenta DNS domain: [Empty] The following warning/error was logged by the smartd daemon: TEST EMAIL from smartd for device: /dev/nvme0ns1 Device info: CT500P3SSD8, S/N:2240E6733488, FW:P9CR30A, NSID:1 For details see host's SYSLOG.FreeBSD es genial!.