Configurar smartmontools en FreeBSD 14.4 para supervisar el estado de discos SSD y/o NVMe y enviar correos mediante mail del sistema o los servidores de Gmail.
Requisitos previos
Paso 1 — Instalar smartmontools
pkg install smartmontools
Habilitar el servicio smartd al arranque
sysrc smartd_enable="YES"
Paso 2 — Configurar DMA para enviar correos por Gmail
FreeBSD 14.4 usa DMA (DragonFly Mail Agent) como agente de correo por defecto. La configuración completa de DMA con Gmail (autenticación, contraseña de aplicación, smarthost) se explica en el siguiente artículo:
https://gnulinuxcodigo.blogspot.com/2024/12/freebsd-dma-dragonfly-mail-agent.html
Probar el envío de correo (directo, sin pasar por el script)
echo "Prueba de correo desde FreeBSD" | mail -s "Prueba" usuario@gmail.com
mail directamente, sin pasar por el script, y sirve para
verificar que DMA funciona antes de integrar smartd. Si no llega el correo,
revisa /var/log/maillog y la configuración de DMA antes de continuar.
Paso 3 — Crear el helper de notificación
En FreeBSD el paquete smartmontools no instala ningún helper de notificación;
hay que crearlo manualmente. Este script es el que smartd invocará cada vez que
necesite enviar un correo, y se encarga de llamar a /usr/bin/mail.
cat > /usr/local/sbin/smartdnotify-mailout <<'EOF'
#!/bin/sh
# ============================================================
# smartdnotify-mailout
#
# Script de notificación para smartd.
# smartd lo invoca con las variables de entorno:
# SMARTD_SUBJECT - asunto del mensaje
# SMARTD_ADDRESS - dirección(es) de destino
# SMARTD_FAILTYPE - tipo de fallo
# SMARTD_DEVICE / SMARTD_DEVICESTRING - dispositivo afectado
#
# El cuerpo del mensaje llega por stdin.
# ============================================================
MAIL=/usr/bin/mail
exec ${MAIL} -s "${SMARTD_SUBJECT}" "${SMARTD_ADDRESS}"
EOF
Dar permisos de ejecución y propietario
chmod 755 /usr/local/sbin/smartdnotify-mailout chown root:wheel /usr/local/sbin/smartdnotify-mailout
Verificar que el contenido es correcto
cat /usr/local/sbin/smartdnotify-mailout
${MAIL},
${SMARTD_SUBJECT} y ${SMARTD_ADDRESS} literales,
sin expandir). Si ves esas variables ya sustituidas por valores, el heredoc
se cerró mal y hay que recrear el archivo.
Prueba manual del script (simulando una llamada de smartd)
echo "Este es un mensaje de prueba enviado por smartdnotify-mailout." \
| env SMARTD_SUBJECT="TEST: prueba de smartdnotify-mailout" \
SMARTD_ADDRESS="usuario@gmail.com" \
/usr/local/sbin/smartdnotify-mailout
env para pasar las variables de entorno de forma portable,
porque la sintaxis VAR=valor comando no funciona en csh
(el shell por defecto de root en FreeBSD).
Paso 4 — Identificar los discos
smartctl --scan /dev/da0 -d sat # /dev/da0 [SAT], ATA device /dev/nvme0 -d nvme # /dev/nvme0, NVMe device
Comprobar que smartctl habla con el NVMe
smartctl -d nvme -a /dev/nvme0
Mostrará modelo, serial, versión NVMe, etc.
smartctl 7.5 2025-04-30 r5714 [FreeBSD 14.4-RELEASE-p8 amd64] (local build) Copyright (C) 2002-25, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Number: CT500P3SSD8 Serial Number: 2240E6733488 Firmware Version: P9CR30A PCI Vendor/Subsystem ID: 0xc0a9 IEEE OUI Identifier: 0x00a075 Controller ID: 1 NVMe Version: 1.4 Number of Namespaces: 1 Namespace 1 Size/Capacity: 500,107,862,016 [500 GB] ...
Paso 5 — Configurar /usr/local/etc/smartd.conf
Este es el contenido completo del fichero de configuración de smartd, adaptado a los dos discos del sistema: el SSD NVMe principal y el disco USB de backup.
# ============================================================
# /usr/local/etc/smartd.conf
# Monitorización SMART
# ============================================================
# Documentación: man 5 smartd.conf
#
# Directivas comunes:
# -a Equivale a: -H -f -t -l error -l selftest -l selfteststs -C 197 -U 198
# -o on Activa el auto offline data collection test
# -S on Activa el auto-save de atributos SMART
# -n standby,q No despierta el disco si está dormido
# -s ... Programa self-tests (S=corto, L=largo)
# -m ... Destinatario del correo
# -M exec ... Ejecuta el script indicado para enviar el correo
# -M test Envía un correo de prueba al arrancar (solo para verificar)
# ============================================================
# ------------------------------------------------------------
# SSD NVMe principal (sistema)
# Self-test corto diario a las 02:00, largo los domingos a las 03:00
# ------------------------------------------------------------
/dev/nvme0 -d nvme \
-a -o on -S on \
-s (S/../.././02|L/../../7/03) \
-m usuario@gmail.com \
-M exec /usr/local/sbin/smartdnotify-mailout
# ------------------------------------------------------------
# Disco USB de backup (Toshiba MQ04UBD200)
# Self-test CORTO diario a las 04:00 (el largo no es viable por USB)
# El disco es extraíble, por eso -d removable
# ------------------------------------------------------------
/dev/da0 -d removable \
-a -o on -S on \
-n standby,q \
-s (S/../.././04) \
-m usuario@gmail.com \
-M exec /usr/local/sbin/smartdnotify-mailout
Claves de la configuración
| Directiva | Motivo |
|---|---|
/dev/nvme0 en lugar de /dev/nda0 |
El dispositivo de caracteres NVMe es el correcto para SMART en FreeBSD |
-d nvme en el NVMe |
Fuerza explícitamente el tipo de dispositivo |
-d removable en el USB |
Permite a smartd arrancar aunque el disco esté desconectado |
-n standby,q en el USB |
No despierta el disco si está en standby |
-s (S/...|L/...) para NVMe |
Self-test corto diario, largo semanal |
-s (S/...) solo para USB |
Únicamente self-test corto (el largo se aborta por el puente USB) |
-M exec |
Ejecuta el script smartdnotify-mailout para enviar el correo |
Paso 6 — Verificar la sintaxis sin reiniciar el servicio
smartd -q onecheck
Interpretación de la validación
Configuration file /usr/local/etc/smartd.conf parsed. ← Sintaxis correcta Device: /dev/nvme0, opened ← NVMe accesible Device: /dev/nvme0, CT500P3SSD8, S/N:2240E6733488, FW:P9CR30A Device: /dev/nvme0, is SMART capable. Adding to "monitor" list. Device: /dev/da0 [SAT], opened ← USB accesible Device: /dev/da0 [SAT], TOSHIBA MQ04UBD200, S/N:Y0JKT0QOT, ... 2.00 TB Device: /dev/da0 [SAT], enabled SMART Attribute Autosave. ← -S on aplicado Device: /dev/da0 [SAT], enabled SMART Automatic Offline Testing. ← -o on aplicado Monitoring 1 ATA/SATA, 0 SCSI/SAS and 1 NVMe devices ← Los dos discos Device: /dev/nvme0, previous short self-test completed without error Device: /dev/da0 [SAT], previous self-test completed without error Started with '-q onecheck' option. All devices successfully checked once. smartd is exiting (exit status 0) ← Salida limpia
-M test a la configuración,
en esta salida aparecerá también una línea del tipo:
Test of /usr/local/sbin/smartdnotify-mailout to usuario@gmail.com: successful.
Es la confirmación de que smartd ha ejecutado el helper correctamente.
Paso 7 — Reiniciar smartd
service smartd restart Stopping smartd. Waiting for PIDS: 29540. Starting smartd. ← Arrancado sin errores
Verificar que arrancó bien
service smartd status smartd is running as pid 32393.
Comprobar la actividad en el log
tail -10 /var/log/messages | grep smartd Sep 24 02:06:19 tormenta smartd[32393]: Device: /dev/nvme0, starting scheduled Short Self-Test (NSID 0xffffffff). Sep 24 02:36:19 tormenta smartd[32393]: Device /dev/nvme0, previous short self-test completed without error Sep 24 03:06:19 tormenta smartd[32393]: Device: /dev/da0 [SAT], is back in ACTIVE or IDLE mode, resuming checks (9 checks skipped)
Comprobación final — smartd invoca al helper
Para verlo en tiempo real, se puede arrancar smartd en primer plano con modo debug
(salir con Ctrl+C):
smartd -d -c /usr/local/etc/smartd.conf
smartd 7.5 2025-04-30 r5714 [FreeBSD 14.4-RELEASE-p8 amd64] (local build) Copyright (C) 2002-25, Bruce Allen, Christian Franke, www.smartmontools.org Opened configuration file /usr/local/etc/smartd.conf Configuration file /usr/local/etc/smartd.conf parsed. Device: /dev/nvme0, opened Device: /dev/nvme0, CT500P3SSD8, S/N:2240E6733488, FW:P9CR30A Device: /dev/nvme0, is SMART capable. Adding to "monitor" list. Device: /dev/da0 [SAT], opened Device: /dev/da0 [SAT], TOSHIBA MQ04UBD200, S/N:Y0JKT0QOT, WWN:0-000000-000000000, FW:JT001U, 2.00 TB Device: /dev/da0 [SAT], found in smartd database 7.5/5706: Toshiba 2.5" HDD MQ04UBD... Device: /dev/da0 [SAT], enabled SMART Attribute Autosave. Device: /dev/da0 [SAT], enabled SMART Automatic Offline Testing. Device: /dev/da0 [SAT], is SMART capable. Adding to "monitor" list. Monitoring 1 ATA/SATA, 0 SCSI/SAS and 1 NVMe devices Device: /dev/nvme0, opened NVMe device Device /dev/nvme0, previous short self-test completed without error Device: /dev/da0 [SAT], opened ATA device Device: /dev/da0 [SAT], previous self-test completed without error
usuario@gmail.com.