Te despiertas una mañana y tu servidor casero no responde. Después de investigar, descubres que un disco NVMe ha fallado, llevándose consigo tus servicios autoalojados y tus datos. Quizás eres administrador de sistemas y el SSD de una estación de trabajo lleva meses acumulando errores silenciosamente, y ahora un usuario reporta archivos corruptos.
Las fallas de disco raramente son instantáneas; suelen dar advertencias sutiles (aumento de temperatura, incremento en los contadores de errores e indicadores de desgaste), pero solo si estás atento. La mayoría de la gente revisa la salud del disco solo después de que empiezan los problemas, y para entonces puede ser demasiado tarde.
Performance Co-Pilot (PCP) es un marco de trabajo de código abierto para la recolección, monitorización y análisis de métricas de rendimiento del sistema. Las actualizaciones recientes han ampliado sus capacidades de monitorización de discos con:
- Recolección de métricas SMART para HDDs, SSDs y discos NVMe
- Decodificación de registros de errores NVMe con mensajes de error legibles
- Seguimiento de discos por WWID que sobrevive a cambios de nombre de dispositivo entre reinicios
- Telemetría Seagate FARM para diagnósticos extendidos específicos del fabricante
En este artículo, configurarás la monitorización de discos con PCP en Fedora, aprenderás qué métricas son más importantes y construirás un panel de Grafana para visualizar la salud de tus discos a lo largo del tiempo.
Requisitos previos
Para seguir este tutorial, necesitarás:
- Fedora Workstation o Server (se recomienda Fedora 39 o posterior)
- Acceso de root o sudo para instalar paquetes y PMDAs
- smartmontools instalado (el agente SMART de PCP depende de smartctl)
Puedes verificar que smartmontools está disponible:
$ rpm -q smartmontools
Si no está instalado:
$ sudo dnf install smartmontools
¿Qué es SMART?
SMART (Tecnología de Autosupervisión, Análisis y Reporte) es un sistema de monitorización integrado en los discos duros modernos, SSDs y dispositivos NVMe. SMART rastrea continuamente indicadores como la nivelación de desgaste, tasas de error, temperatura y horas de encendido. Estas son métricas de fiabilidad que pueden ayudar a detectar fallos inminentes.
La mayoría de la gente solo consulta los datos de SMART una vez, usando herramientas como smartmontools (smartctl -a /dev/sda) y solo cuando ya sospechan de un problema. Ese enfoque te da una única instantánea. PCP adopta un enfoque diferente: su agente SMART recopila estas métricas de forma continua en segundo plano, construyendo tendencias históricas que puedes analizar.
¿Subió la temperatura de tu disco ayer durante una transferencia de archivos grande? ¿El indicador de desgaste de tu NVMe aumentó del 5% al 15% en los últimos seis meses? La monitorización continua detecta estos patrones. Las fallas de disco raramente ocurren sin advertencia; las pistas se dan a través de valores SMART que cambian con el tiempo.
Instalación y activación de PCP con el PMDA SMART
Comenzar es sencillo. Instala los paquetes necesarios:
$ sudo dnf install pcp pcp-pmda-smart
El paquete pcp-pmda-smart proporciona el agente de monitorización SMART. A continuación, instala el PMDA (Agente de Dominio de Métricas de Rendimiento):
$ cd /var/lib/pcp/pmdas/smart/ $ sudo ./Install
El instalador te pedirá opciones de configuración. Los valores predeterminados funcionan bien para la mayoría de configuraciones, así que presiona Enter para aceptarlos.
Inicia y, opcionalmente, habilita el demonio recolector de PCP:
$ sudo systemctl start pmcd $ sudo systemctl enable pmcd
Verifica que las métricas SMART estén disponibles:

Si ves las métricas listadas, ya estás listo.
Consultando métricas SMART
Ahora que la monitorización está en marcha, echemos un vistazo a las métricas que más importan.
Temperatura
La temperatura del disco es uno de los indicadores de salud más fáciles de rastrear. Consúltala con:
$ pminfo -ft smart.attributes.temperature_celsius.value
Para discos NVMe, usa:
$ pminfo -ft smart.nvme_attributes.temperature_sensor_one
Como regla general: temperaturas sostenidas por encima de 60 °C en HDDs o 70 °C en SSDs y discos NVMe indican posibles problemas de refrigeración. Las temperaturas altas constantes aceleran el desgaste y reducen la vida útil del disco.
Para observar las temperaturas actualizarse en tiempo real (cada 5 segundos):
$ pmrep -t 5s smart.nvme_attributes.temperature_sensor_one smart.attributes.temperature_celsius.value
Presiona Ctrl+C para detener.

Indicadores de desgaste y antigüedad
Cada disco tiene una vida útil finita. Estas métricas te ayudan a seguir en qué punto de su ciclo de vida se encuentra un disco.
Horas de encendido rastrea el tiempo total de funcionamiento:
$ pminfo -ft smart.attributes.power_on_hours.value $ pminfo -ft smart.nvme_attributes.power_on_hours # NVMe
Un disco con 50.000 horas (aproximadamente 5,7 años de operación continua) es significativamente más viejo que uno con 5.000 horas.
Contador de ciclos de encendido muestra cuántas veces se ha encendido y apagado el disco:
$ pminfo -ft smart.attributes.power_cycle_count.value $ pminfo -ft smart.nvme_attributes.power_cycles # NVMe
Un ciclo de encendido excesivo puede acelerar el desgaste mecánico en HDDs y contribuir al desgaste de celdas flash en SSDs.
Para discos NVMe, smart.nvme_attributes.percentage_used es la métrica de desgaste más importante. Va de 0 a 100%, reflejando la resistencia consumida del disco. Por encima del 80% significa desgaste significativo. Por encima del 90%, empieza a planificar un reemplazo.
$ pminfo -ft smart.nvme_attributes.percentage_used
Métricas críticas de error
Estas son las métricas que esperas que permanezcan en cero. Cualquier valor distinto de cero o una tendencia creciente apunta a problemas físicos en el disco.
Contador de sectores reasignados muestra los sectores defectuosos que el disco ha detectado y reasignado a áreas de reserva. Los discos modernos reservan sectores para este propósito, pero una vez que comienza la reasignación indica un deterioro del medio:
$ pminfo -ft smart.attributes.reallocated_sector_count.value
Contador de sectores pendientes actuales rastrea los sectores que esperan ser reasignados. Un valor distinto de cero sugiere que el disco está luchando activamente con áreas defectuosas:
$ pminfo -ft smart.attributes.current_pending_sector.value
Para un resumen rápido de todos los discos a la vez:
$ pmrep -s 1 smart.health smart.attributes.temperature_celsius.value smart.nvme_attributes.temperature_sensor_one smart.nvme_attributes.percentage_used

Seguimiento de discos por WWID
Un desafío común con la monitorización de discos es que los nombres de dispositivo pueden cambiar. Tu disco NVMe puede ser /dev/nvme0n1 hoy, pero después de un reinicio o actualización de BIOS podría convertirse en /dev/nvme1n1. Conectar discos USB en caliente o añadir nuevo almacenamiento también puede reorganizar las asignaciones de dispositivos.
PCP resuelve esto con el espacio de nombres de métricas smart.wwid.*. WWID (Identificador Mundial) es un identificador único asignado a cada disco durante la fabricación. Nunca cambia, independientemente de cómo el sistema operativo nombre el dispositivo.
Esta es la diferencia en la práctica:

El espacio de nombres basado en WWID es particularmente útil para configuraciones con múltiples discos (servidores de laboratorio casero, estaciones de trabajo con discos externos o portátiles con estaciones de acoplamiento). Tu historial de monitorización se mantiene consistente incluso cuando los nombres de dispositivo no lo hacen.
Recolección de registros de errores NVMe
Más allá de los atributos SMART estándar, los discos NVMe mantienen un registro detallado de errores (página de registro 0x01) que registra cada evento de error que encuentra el disco. El PMDA SMART puede recolectar y decodificar estos registros, dándote visibilidad sobre problemas que los contadores SMART básicos no revelan.
Mientras que smart.nvme_attributes.media_and_data_integrity_errors te da un conteo, el registro de errores te dice qué pasó, cuándo pasó y dónde en el disco ocurrió. Cada entrada del registro incluye:
- Tipo de error y código de estado
- Comando que desencadenó el error
- Dirección de bloque lógico (LBA) del fallo
- Información de espacio de nombres y cola de envío
- Marca de tiempo del evento de error
Este nivel de detalle ayuda a diagnosticar problemas intermitentes. Quizás tu disco NVMe solo arroja errores bajo cargas de trabajo específicas o los errores se agrupan en un rango de direcciones particular.
Consulta las métricas del registro de errores:
$ pminfo -ft smart.nvme_error_log
La métrica más importante es smart.nvme_error_log.error_count, que debería ser cero en un disco sano. Si ves valores distintos de cero, verifica smart.nvme_error_log.status_code para obtener descripciones de error legibles. Los códigos de error comunes incluyen:
- Error de transferencia de datos: Problema al leer o escribir datos
- Error interno del dispositivo: Problemas con el controlador o firmware
- Comando abortado: El comando fue cancelado o expiró
- Fallo de escritura: La operación de escritura falló
Los errores recurrentes, especialmente con el mismo código de estado o que afectan al mismo rango de LBA, indican un problema real que necesita atención.
Soporte de registros FARM para discos Seagate
Si tienes discos Seagate, PCP ofrece monitorización adicional a través del PMDA FARM (Métricas de Fiabilidad Accesibles en Campo). FARM es la monitorización extendida de Seagate que va más allá del SMART estándar, proporcionando información más profunda sobre el comportamiento del disco.
Qué proporciona FARM
Los registros FARM capturan datos operativos que SMART no rastrea:
- Métricas de energía: Horas de escritura por cabeza, total de horas de encendido con mayor granularidad
- Historial de errores: Tasas de error de lectura y escritura desglosadas por cabeza y zona
- Datos de rendimiento: Estadísticas de latencia de comandos, seguimiento de profundidad de cola
- Historial ambiental: Tendencias de temperatura a lo largo de la vida útil del disco, exposición a humedad
- Patrones de carga de trabajo: Proporciones de E/S secuencial vs aleatoria, equilibrio lectura/escritura
- Estadísticas específicas por cabeza: Rendimiento individual de cabezas de lectura/escritura (para HDDs)
Configurando el PMDA FARM
El soporte FARM funciona tanto para discos Seagate SATA como SAS. Instálalo y actívalo:
$ sudo dnf install pcp-pmda-farm $ cd /var/lib/pcp/pmdas/farm/ $ sudo ./Install
Consulta las métricas FARM disponibles:
$ pminfo farm | head -10
FARM es especialmente útil para rastrear tendencias de salud a largo plazo, diagnosticar problemas sutiles no visibles en datos SMART básicos y verificar que las especificaciones del disco coincidan con el uso real.
Nota: Las métricas FARM son específicas de Seagate. No funcionarán con Western Digital, Samsung u otros fabricantes. Para monitorización universal, usa el PMDA SMART descrito anteriormente.
Visualización con Grafana
PCP se integra con Grafana a través del plugin grafana-pcp, permitiéndote construir paneles que visualizan la salud del disco a lo largo del tiempo. Aquí es donde la monitorización continua vale la pena. Puedes detectar tendencias, configurar alertas y vigilar toda tu flota de discos desde un único panel.
Instalando el plugin de Grafana PCP
Instala Grafana y el plugin PCP:
$ sudo dnf install grafana grafana-pcp
Inicia los servicios necesarios:
$ sudo systemctl start grafana-server pmproxy $ sudo systemctl enable grafana-server pmproxy
Abre Grafana en tu navegador en http://localhost:3000 (credenciales por defecto: admin/admin).
Antes de añadir una fuente de datos, es posible que necesites habilitar el plugin Performance Co-Pilot. Ve a Administración > Plugins y datos > Plugins, busca Performance Co-Pilot y haz clic en Habilitar. Si el plugin ya está habilitado, puedes omitir este paso.
Configurando la fuente de datos PCP Vector
Ve a Conexiones > Fuentes de datos > Añadir fuente de datos y selecciona PCP Vector. El único campo obligatorio es la URL:
http://localhost:44322
Haz clic en Guardar y probar para verificar la conexión.
Construyendo paneles de monitorización de discos
A continuación se muestran configuraciones de panel que puedes usar en tus dashboards. Para añadir un panel, haz clic en Añadir > Visualización en cualquier dashboard, selecciona la fuente de datos PCP Vector e introduce el nombre de la métrica en el campo de consulta.
Panel de series temporales de temperatura del disco:
Este panel muestra la temperatura del disco a lo largo del tiempo, con umbrales de color para niveles de advertencia.
{ "type": "timeseries", "title": "Temperatura del disco", "datasource": { "type": "pcp-vector-datasource", "uid": "PCP_VECTOR" }, "targets": [ { "expr": "smart.nvme_attributes.temperature_sensor_one", "format": "time_series" }, { "expr": "smart.attributes.temperature_celsius.value", "format": "time_series" } ], "fieldConfig": { "defaults": { "unit": "°C", "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "yellow", "value": 50 }, { "color": "orange", "value": 60 }, { "color": "red", "value": 70 } ] }, "custom": { "thresholdsStyle": { "mode": "area" } } }, "overrides": [ { "matcher": { "id": "byType", "options": "number" }, "properties": [ { "id": "unit", "value": "°C" } ] } ] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 0 } }
Panel de indicador de porcentaje de desgaste NVMe:
Un indicador que muestra cuánto de la resistencia de cada disco NVMe se ha consumido.
{ "type": "gauge", "title": "Nivel de desgaste NVMe", "datasource": { "type": "pcp-vector-datasource", "uid": "PCP_VECTOR" }, "targets": [ { "expr": "smart.nvme_attributes.percentage_used", "format": "time_series" } ], "fieldConfig": { "defaults": { "unit": "percent", "min": 0, "max": 100, "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "yellow", "value": 50 }, { "color": "orange", "value": 80 }, { "color": "red", "value": 90 } ] } }, "overrides": [ { "matcher": { "id": "byType", "options": "number" }, "properties": [ { "id": "unit", "value": "percent" } ] } ] }, "gridPos": { "h": 6, "w": 8, "x": 0, "y": 8 } }
Panel de estado de salud del disco:
Un panel de estadísticas que muestra la evaluación general de salud para cada disco.
{ "type": "stat", "title": "Estado de salud del disco", "datasource": { "type": "pcp-vector-datasource", "uid": "PCP_VECTOR" }, "targets": [ { "expr": "smart.health", "format": "time_series" } ], "fieldConfig": { "defaults": { "unit": "string", "mappings": [ { "type": "value", "options": { "PASSED": { "text": "APROBADO", "color": "green" }, "FAILED": { "text": "FALLÓ", "color": "red" } } } ] }, "overrides": [ { "matcher": { "id": "byType", "options": "string" }, "properties": [ { "id": "unit", "value": "string" } ] } ] }, "gridPos": { "h": 6, "w": 8, "x": 8, "y": 8 } }
Se proporciona un archivo JSON de panel de Grafana completo e importable junto con este artículo como pcp-drive-monitoring-dashboard.json. Impórtalo desde Dashboards > Importar en Grafana.

Alertas automatizadas con pmie
PCP incluye pmie (Motor de Inferencia de Métricas de Rendimiento), una herramienta basada en reglas que evalúa expresiones métricas y dispara acciones cuando se cumplen las condiciones. Mientras que los paneles de Grafana requieren que alguien esté mirando, pmie puede alertarte automáticamente.
Para iniciar y opcionalmente habilitar pmie:
$ sudo systemctl start pmie $ sudo systemctl enable pmie
Explorando métricas con pmie
Antes de escribir reglas de alerta, puedes usar pmie en modo detallado para ver métricas desde la línea de comandos. Esta es una manera útil de familiarizarse con la sintaxis:
$ echo 'temp_check = smart.nvme_attributes.temperature_sensor_one;' | pmie -e -v -t 5second
Presiona Ctrl+C para detener. La bandera -e muestra la expresión evaluada, -v muestra valores incluso cuando no se dispara ninguna acción, y -t establece el intervalo de evaluación.
Puedes agregar condiciones y acciones para convertir esto en una regla. Aquí hay un ejemplo que imprime un mensaje cada vez que la temperatura de un disco NVMe está por encima de 0 (lo que efectivamente muestra todos los discos):
$ echo 'temp_check = some_inst(smart.nvme_attributes.temperature_sensor_one > 0) -> print "Temp NVMe:" " %i:%v";' | pmie -e -v -t 5second
El token %i se expande al nombre de la instancia (el disco) y %v al valor de la métrica.
Escribiendo reglas de alerta
Ahora creemos reglas prácticas que alerten sobre problemas reales. Guarda lo siguiente en /etc/pcp/pmie/smart-health.pmie:
// Alerta si algún disco NVMe supera los 70 °C
some_inst(smart.nvme_attributes.temperature_sensor_one > 70)
-> syslog 10 min "Temperatura crítica de NVMe:" " %i a %v °C";
// Alerta si el nivel de desgaste de algún NVMe supera el 80%
some_inst(smart.nvme_attributes.percentage_used > 80)
-> syslog 24 hour "Nivel de desgaste alto de NVMe:" " %i al %v%%";
// Alerta si algún disco tiene sectores reasignados
some_inst(smart.attributes.reallocated_sector_count.value > 0)
-> syslog 24 hour "El disco tiene sectores reasignados:" " %i con %v sectores";
La acción syslog escribe en el registro del sistema con la etiqueta pcp-pmie. El tiempo después de syslog (por ejemplo, 10 min, 24 hour) es un acelerador que evita alertas repetidas, por lo que no inundarás tus registros si una condición sigue siendo verdadera.
Probando y ejecutando reglas pmie
Prueba tus reglas primero desde la línea de comandos:
$ sudo pmie -v -c /etc/pcp/pmie/smart-health.pmie -t 10second
Esto evalúa las reglas cada 10 segundos e imprime una salida detallada para que puedas verlas dispararse. Una vez que estés satisfecho con las reglas, puedes ejecutar pmie como un servicio persistente. La instancia de pmie de todo el sistema es gestionada por pmie_check y configurada en /etc/pcp/pmie/control. Añade una entrada que apunte a tu archivo de reglas para que sean evaluadas continuamente junto con las reglas por defecto de PCP.
Un archivo completo de reglas smart-health.pmie que cubre alertas de temperatura, desgaste y errores tanto para discos NVMe como SATA se proporciona junto con este artículo en la sección de conclusiones. Cópialo a /etc/pcp/pmie/ para empezar.
Hay otras acciones disponibles además de syslog. Usa shell para ejecutar comandos arbitrarios (como enviar un correo electrónico o una notificación de escritorio), print para salida estándar, o encadena acciones con & para ejecutar múltiples acciones cuando se dispara una regla.
Monitorización continua con pmlogger
pmlogger es una utilidad central incluida con PCP, y registra métricas automáticamente cuando está en ejecución. Para iniciarlo y habilitarlo al arrancar:
$ sudo systemctl start pmlogger $ sudo systemctl enable pmlogger
Por defecto, pmlogger captura un amplio conjunto de métricas del sistema. Para asegurarte de que las métricas SMART de los discos estén incluidas, ejecuta:
$ sudo pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
Cuando se te solicite, habilita el grupo S.M.A.R.T drive statistics [Linux]. Esto asegura que las métricas de salud del disco se capturen continuamente, permitiéndote revisar tendencias históricas usando herramientas como pmchart, pmrep o Grafana con la fuente de datos PCP Valkey.
Con pmlogger en ejecución, construyes un registro histórico de la salud de tus discos. Si un disco comienza a fallar en seis meses, puedes mirar atrás y ver exactamente cuándo empezaron las señales de advertencia.
Conclusión
Las fallas de disco dan advertencias, a través de métricas SMART, registros de errores y degradación del rendimiento. Con las capacidades de monitorización de discos de PCP, tienes las herramientas para detectar estas advertencias antes de que se conviertan en pérdida de datos.
En este artículo cubrimos la configuración del PMDA SMART para la monitorización universal de la salud del disco, la interpretación de métricas clave como temperatura, niveles de desgaste, conteos de error y el seguimiento confiable de discos con identificadores basados en WWID. Los usuarios de NVMe pueden profundizar con la recolección de registros de errores, y los propietarios de discos Seagate tienen acceso a la telemetría extendida FARM. Combinado con paneles de Grafana y pmlogger, obtienes visibilidad continua de la salud de tus discos.
La conclusión clave: la monitorización continua detecta tendencias que las comprobaciones puntuales pasan por alto. Unos minutos de configuración hoy pueden ahorrar horas de trabajo de recuperación (o peor, pérdida de datos irrecuperable) mañana.
Para más información, visita la documentación de Performance Co-Pilot y la documentación del plugin grafana-pcp. El panel de Grafana usado en este artículo está disponible para descargar aquí y puede importarse desde Dashboards > Importar en Grafana. Las reglas de alerta pmie también están disponibles para descargar aquí y pueden copiarse a /etc/pcp/pmie/ para usarlas con pmie.



