
Imagine acordar de manhã e encontrar seu servidor doméstico sem resposta. Após investigar, você descobre que uma unidade NVMe falhou, levando consigo seus serviços auto-hospedados e dados. Ou talvez você seja um administrador de sistemas e o SSD de uma estação de trabalho vem acumulando erros silenciosamente há meses, até que um usuário relata arquivos corrompidos.
Falhas em unidades raramente são instantâneas; elas emitem avisos sutis (como aumento de temperatura, contagem de erros crescentes e indicadores de desgaste), mas apenas se você estiver monitorando. A maioria das pessoas só verifica a saúde do disco depois que os problemas começam, e aí pode ser tarde demais.
Performance Co-Pilot (PCP) é uma estrutura de código aberto para coleta, monitoramento e análise de métricas de desempenho do sistema. Atualizações recentes expandiram suas capacidades de monitoramento de unidades com:
- Coleta de métricas SMART para HDDs, SSDs e unidades NVMe
- Decodificação do registro de erros NVMe com mensagens legíveis por humanos
- Rastreamento de unidades baseado em WWID que sobrevive a mudanças de nome de dispositivo entre reinicializações
- Telemetria Seagate FARM para diagnósticos estendidos específicos do fabricante
Neste artigo, você configurará o monitoramento de unidades com PCP no Fedora, aprenderá quais métricas são mais importantes e construirá um painel no Grafana para visualizar a saúde das suas unidades ao longo do tempo.
Pré-requisitos
Para acompanhar, você precisará de:
- Fedora Workstation ou Server (Fedora 39 ou posterior recomendado)
- Acesso root ou sudo para instalar pacotes e PMDAs
- smartmontools instalado (o agente SMART do PCP depende do smartctl)
Você pode verificar se o smartmontools está disponível:
$ rpm -q smartmontools
Se não estiver instalado:
$ sudo dnf install smartmontools
O que é SMART?
SMART (Self-Monitoring, Analysis and Reporting Technology) é um sistema de monitoramento integrado em discos rígidos modernos, SSDs e dispositivos NVMe. O SMART rastreia continuamente indicadores como nivelamento de desgaste, taxas de erro, temperatura e horas de funcionamento. Essas são métricas de confiabilidade que podem ajudar a indicar falhas iminentes.
A maioria das pessoas verifica os dados SMART apenas uma vez, usando ferramentas como smartmontools (smartctl -a /dev/sda) e somente quando já suspeitam de um problema. Essa abordagem oferece apenas um retrato instantâneo. O PCP adota uma abordagem diferente: seu agente SMART coleta essas métricas continuamente em segundo plano, construindo tendências históricas que você pode analisar.
A temperatura do seu disco aumentou repentinamente ontem durante uma transferência de arquivos grandes? O indicador de desgaste do seu NVMe subiu de 5% para 15% nos últimos seis meses? O monitoramento contínuo detecta esses padrões. Falhas em unidades raramente acontecem sem aviso; pistas são dadas por meio de valores SMART que mudam ao longo do tempo.
Instalando e ativando o PCP com o SMART PMDA
Começar é simples. Instale os pacotes necessários:
$ sudo dnf install pcp pcp-pmda-smart
O pacote pcp-pmda-smart fornece o agente de monitoramento SMART. Em seguida, instale o PMDA (Performance Metrics Domain Agent):
$ cd /var/lib/pcp/pmdas/smart/ $ sudo ./Install
O instalador solicitará opções de configuração. Os padrões funcionam bem para a maioria das configurações, então pressione Enter para aceitá-los.
Inicie e, opcionalmente, habilite o daemon coletor do PCP:
$ sudo systemctl start pmcd $ sudo systemctl enable pmcd
Verifique se as métricas SMART estão disponíveis:

Se você vir métricas listadas, está pronto para prosseguir.
Consultando métricas SMART
Agora que o monitoramento está em execução, vamos dar uma olhada nas métricas que mais importam.
Temperatura
A temperatura da unidade é um dos indicadores de saúde mais fáceis de monitorar. Consulte-a com:
$ pminfo -ft smart.attributes.temperature_celsius.value
Para unidades NVMe, use:
$ pminfo -ft smart.nvme_attributes.temperature_sensor_one
Como orientação geral: temperaturas sustentadas acima de 60 °C para HDDs ou 70 °C para SSDs e NVMe indicam possíveis problemas de refrigeração. Temperaturas altas constantes aceleram o desgaste e reduzem a vida útil da unidade.
Para observar as temperaturas atualizando em tempo real (a cada 5 segundos):
$ pmrep -t 5s smart.nvme_attributes.temperature_sensor_one smart.attributes.temperature_celsius.value
Pressione Ctrl+C para parar.

Indicadores de desgaste e idade
Toda unidade tem uma vida útil finita. Essas métricas ajudam você a acompanhar em que ponto do ciclo de vida uma unidade se encontra.
Horas de funcionamento (power-on hours) rastreia o tempo total de operação:
$ pminfo -ft smart.attributes.power_on_hours.value $ pminfo -ft smart.nvme_attributes.power_on_hours # NVMe
Uma unidade com 50.000 horas (aproximadamente 5,7 anos de operação contínua) é significativamente mais antiga do que uma com 5.000 horas.
Contagem de ciclos de energia (power cycle count) mostra quantas vezes a unidade foi ligada e desligada:
$ pminfo -ft smart.attributes.power_cycle_count.value $ pminfo -ft smart.nvme_attributes.power_cycles # NVMe
Ciclos de energia excessivos podem acelerar o desgaste mecânico em HDDs e contribuir para o desgaste das células flash em SSDs.
Para unidades NVMe, smart.nvme_attributes.percentage_used é a métrica de desgaste mais importante. Ela varia de 0 a 100%, refletindo a resistência consumida da unidade. Acima de 80% significa desgaste significativo. Acima de 90%, comece a planejar uma substituição.
$ pminfo -ft smart.nvme_attributes.percentage_used
Métricas críticas de erro
Estas são as métricas que você espera que permaneçam em zero. Qualquer valor diferente de zero ou uma tendência crescente aponta para problemas físicos na unidade.
Contagem de setores realocados mostra setores defeituosos que a unidade detectou e remapeou para áreas de reserva. Unidades modernas reservam setores para esse fim, mas uma vez que o remapeamento começa, sinaliza mídia em deterioração:
$ pminfo -ft smart.attributes.reallocated_sector_count.value
Contagem atual de setores pendentes rastreia setores aguardando remapeamento. Um valor diferente de zero sugere que a unidade está ativamente lutando com áreas ruins:
$ pminfo -ft smart.attributes.current_pending_sector.value
Para uma visão geral rápida de todas as unidades de uma vez:
$ pmrep -s 1 smart.health smart.attributes.temperature_celsius.value smart.nvme_attributes.temperature_sensor_one smart.nvme_attributes.percentage_used

Rastreamento de unidades com base em WWID
Um desafio comum no monitoramento de unidades é que os nomes dos dispositivos podem mudar. Sua unidade NVMe pode ser /dev/nvme0n1 hoje, mas após uma reinicialização ou atualização de BIOS pode se tornar /dev/nvme1n1. Conectar unidades USB a quente ou adicionar novo armazenamento também pode embaralhar as atribuições de dispositivos.
O PCP resolve isso com o namespace de métricas smart.wwid.*. WWID (World Wide Identifier) é um identificador único atribuído a cada unidade durante a fabricação. Ele nunca muda, independentemente de como o sistema operacional nomeia o dispositivo.
Aqui está a diferença na prática:

O namespace baseado em WWID é particularmente útil para configurações com múltiplas unidades (servidores domésticos, estações de trabalho com unidades externas ou laptops com docking stations). Seu histórico de monitoramento permanece consistente mesmo quando os nomes dos dispositivos mudam.
Coleta de registros de erros NVMe
Além dos atributos SMART padrão, as unidades NVMe mantêm um registro de erros detalhado (página de log 0x01) que registra cada evento de erro encontrado pela unidade. O SMART PMDA pode coletar e decodificar esses registros, oferecendo visibilidade sobre problemas que os contadores SMART básicos não revelam.
Enquanto smart.nvme_attributes.media_and_data_integrity_errors fornece uma contagem, o registro de erros informa o que aconteceu, quando aconteceu e onde na unidade ocorreu. Cada entrada de log inclui:
- Tipo de erro e código de status
- Comando que acionou o erro
- Endereço lógico de bloco (LBA) da falha
- Informações do namespace e da fila de submissão
- Carimbo de data/hora do evento de erro
Esse nível de detalhe ajuda a diagnosticar problemas intermitentes. Talvez sua unidade NVMe só apresente erros sob cargas de trabalho específicas ou os erros se agrupem em uma determinada faixa de endereços.
Consulte as métricas do registro de erros:
$ pminfo -ft smart.nvme_error_log
A métrica mais importante é smart.nvme_error_log.error_count, que deve ser zero em uma unidade saudável. Se você vir valores diferentes de zero, verifique smart.nvme_error_log.status_code para descrições de erros legíveis por humanos. Códigos de erro comuns incluem:
- Erro de Transferência de Dados: Problema ao ler ou gravar dados
- Erro Interno do Dispositivo: Problemas no controlador ou firmware
- Comando Abortado: Comando foi cancelado ou expirou
- Falha de Gravação: A operação de gravação falhou
Erros recorrentes, especialmente com o mesmo código de status ou afetando a mesma faixa de LBA, indicam um problema real que precisa de atenção.
Suporte a logs FARM para unidades Seagate
Se você tiver unidades Seagate, o PCP oferece monitoramento adicional através do PMDA FARM (Field Accessible Reliability Metrics). O FARM é o monitoramento estendido da Seagate que vai além do SMART padrão, fornecendo insights mais profundos sobre o comportamento da unidade.
O que o FARM oferece
Os logs FARM capturam dados operacionais que o SMART não rastreia:
- Métricas de energia: Horas de energia de gravação por cabeça, total de horas de funcionamento com granularidade mais fina
- Histórico de erros: Taxas de erro de leitura e gravação discriminadas por cabeça e zona
- Dados de desempenho: Estatísticas de latência de comando, rastreamento de profundidade de fila
- Histórico ambiental: Tendências de temperatura ao longo da vida útil da unidade, exposição à umidade
- Padrões de carga de trabalho: Proporção de I/O sequencial vs. aleatório, equilíbrio de leitura/gravação
- Estatísticas específicas da cabeça: Desempenho individual da cabeça de leitura/gravação (para HDDs)
Configurando o PMDA FARM
O suporte FARM funciona para unidades Seagate SATA e SAS. Instale e ative-o:
$ sudo dnf install pcp-pmda-farm $ cd /var/lib/pcp/pmdas/farm/ $ sudo ./Install
Consulte as métricas FARM disponíveis:
$ pminfo farm | head -10 farm.smart_attribute.power_on_hours farm.environment.current_temperature farm.reliability.uncorrectable_read_errors farm.reliability.uncorrectable_write_errors ...
O FARM é especialmente útil para rastrear tendências de saúde de longo prazo, diagnosticar problemas sutis não visíveis em dados SMART básicos e verificar se as especificações da unidade correspondem ao uso real.
Nota: As métricas FARM são específicas da Seagate. Elas não funcionarão com Western Digital, Samsung ou outros fabricantes. Para monitoramento universal, use o PMDA SMART abordado anteriormente.
Visualizando com Grafana
O PCP se integra ao Grafana através do plugin grafana-pcp, permitindo criar painéis que visualizam a saúde da unidade ao longo do tempo. É aqui que o monitoramento contínuo compensa. Você pode identificar tendências, configurar alertas e ficar de olho em toda a sua frota de unidades a partir de um único painel.
Instalando o plugin PCP do Grafana
Instale o Grafana e o plugin PCP:
$ sudo dnf install grafana grafana-pcp
Inicie os serviços necessários:
$ sudo systemctl start grafana-server pmproxy $ sudo systemctl enable grafana-server pmproxy
Abra o Grafana em seu navegador em http://localhost:3000 (credenciais padrão: admin/admin).
Antes de adicionar uma fonte de dados, talvez seja necessário ativar o plugin Performance Co-Pilot. Vá para Administration > Plugins and data > Plugins, pesquise por Performance Co-Pilot e clique em Enable. Se o plugin já estiver ativado, você pode pular esta etapa.
Configurando a fonte de dados PCP Vector
Vá para Connections > Data sources > Add data source e selecione PCP Vector. O único campo obrigatório é a URL:
http://localhost:44322
Clique em Save & Test para verificar a conexão.
Construindo painéis de monitoramento de unidade
Abaixo estão configurações de painel que você pode usar em seus dashboards. Para adicionar um painel, clique em Add > Visualization em qualquer dashboard, selecione a fonte de dados PCP Vector e insira o nome da métrica no campo de consulta.
Painel de série temporal de temperatura da unidade:
Este painel mostra a temperatura da unidade ao longo do tempo, com limites de cores para níveis de aviso.
{
"type": "timeseries",
"title": "Drive Temperature",
"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 }
}
Painel de medidor de porcentagem de desgaste NVMe:
Um medidor mostrando quanto da resistência de cada unidade NVMe foi consumida.
{
"type": "gauge",
"title": "NVMe Wear Level",
"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 }
}
Painel de status de saúde da unidade:
Um painel de estatísticas mostrando a avaliação geral de saúde para cada unidade.
{
"type": "stat",
"title": "Drive Health Status",
"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": "PASSED", "color": "green" },
"FAILED": { "text": "FAILED", "color": "red" }
}
}
]
},
"overrides": [
{
"matcher": { "id": "byType", "options": "string" },
"properties": [
{ "id": "unit", "value": "string" }
]
}
]
},
"gridPos": { "h": 6, "w": 8, "x": 8, "y": 8 }
}
Um arquivo JSON completo e importável do painel do Grafana é fornecido junto com este post como pcp-drive-monitoring-dashboard.json. Importe-o via Dashboards > Import no Grafana.

Alertas automatizados com pmie
O PCP inclui o pmie (Performance Metrics Inference Engine), uma ferramenta baseada em regras que avalia expressões de métricas e aciona ações quando as condições são atendidas. Enquanto os dashboards do Grafana exigem que alguém esteja observando, o pmie pode alertá-lo automaticamente.
Para iniciar e, opcionalmente, habilitar o pmie:
$ sudo systemctl start pmie $ sudo systemctl enable pmie
Explorando métricas com pmie
Antes de escrever regras de alerta, você pode usar o pmie no modo detalhado para visualizar métricas da linha de comando. Esta é uma maneira útil de se familiarizar com a sintaxe:
$ echo 'temp_check = smart.nvme_attributes.temperature_sensor_one;' | pmie -e -v -t 5second temp_check (Mon Jun 30 10:15:01 2026): 35 temp_check (Mon Jun 30 10:15:06 2026): 35 temp_check (Mon Jun 30 10:15:11 2026): 36
Pressione Ctrl+C para parar. A flag -e mostra a expressão avaliada, -v mostra valores mesmo quando nenhuma ação é acionada e -t define o intervalo de avaliação.
Você pode adicionar condições e ações para transformar isso em uma regra. Aqui está um exemplo que imprime uma mensagem sempre que a temperatura de uma unidade NVMe está acima de 0 (efetivamente mostrando todas as unidades):
$ echo 'temp_check = some_inst(smart.nvme_attributes.temperature_sensor_one > 0) -> print "NVMe temp:" " %i:%v";' | pmie -e -v -t 5second Mon Jun 30 10:15:01 2026: NVMe temp: nvme0n1:35 temp_check (Mon Jun 30 10:15:01 2026): true Mon Jun 30 10:15:06 2026: NVMe temp: nvme0n1:36 temp_check (Mon Jun 30 10:15:06 2026): true
O token %i expande para o nome da instância (a unidade) e %v para o valor da métrica.
Escrevendo regras de alerta
Agora vamos criar regras práticas que alertam sobre problemas reais. Salve o seguinte em /etc/pcp/pmie/smart-health.pmie:
// Alert if any NVMe drive temperature exceeds 70 °C
some_inst(smart.nvme_attributes.temperature_sensor_one > 70)
-> syslog 10 min "NVMe drive temperature critical:" " %i at %v °C";
// Alert if any NVMe drive wear level exceeds 80%
some_inst(smart.nvme_attributes.percentage_used > 80)
-> syslog 24 hour "NVMe drive wear level high:" " %i at %v%";
// Alert if any drive has reallocated sectors
some_inst(smart.attributes.reallocated_sector_count.value > 0)
-> syslog 24 hour "Drive has reallocated sectors:" " %i with %v sectors";
A ação syslog escreve no registro do sistema com a tag pcp-pmie. O tempo após syslog (por exemplo, 10 min, 24 hour) é um acelerador que evita alertas repetidos, para que você não inunde seus logs se uma condição permanecer verdadeira.
Testando e executando regras pmie
Teste suas regras primeiro na linha de comando:
$ sudo pmie -v -c /etc/pcp/pmie/smart-health.pmie -t 10second
Isso avalia as regras a cada 10 segundos e imprime saída detalhada para que você possa vê-las sendo acionadas. Quando estiver satisfeito com as regras, você pode executar o pmie como um serviço persistente. A instância pmie do sistema é gerenciada pelo pmie_check e configurada em /etc/pcp/pmie/control. Adicione uma entrada apontando para o seu arquivo de regras para que elas sejam avaliadas continuamente junto com as regras padrão do PCP.
Um arquivo completo de regras smart-health.pmie cobrindo alertas de temperatura, desgaste e erros para unidades NVMe e SATA é fornecido junto com este post na seção de conclusões. Copie-o para /etc/pcp/pmie/ para começar.
Outras ações estão disponíveis além do syslog. Use shell para executar comandos arbitrários (como enviar um e-mail ou notificação de desktop), print para saída stdout ou encadeie ações com & para executar várias ações quando uma regra for acionada.
Monitoramento contínuo com pmlogger
O pmlogger é um utilitário central incluído no PCP e registra métricas automaticamente quando em execução. Para iniciá-lo e habilitá-lo na inicialização:
$ sudo systemctl start pmlogger $ sudo systemctl enable pmlogger
Por padrão, o pmlogger captura um amplo conjunto de métricas do sistema. Para garantir que as métricas SMART da unidade sejam incluídas, execute:
$ sudo pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
Quando solicitado, habilite o grupo S.M.A.R.T drive statistics [Linux]. Isso garante que as métricas de saúde da unidade sejam capturadas continuamente, permitindo que você revise tendências históricas usando ferramentas como pmchart, pmrep ou Grafana com a fonte de dados PCP Valkey.
Com o pmlogger em execução, você constrói um histórico da saúde de suas unidades. Se uma unidade começar a falhar em seis meses, você poderá olhar para trás e ver exatamente quando os sinais de alerta começaram.
Conclusão
As falhas de unidade dão avisos, através de métricas SMART, registros de erros e degradação de desempenho. Com os recursos de monitoramento de unidade do PCP, você tem as ferramentas para capturar esses avisos antes que se transformem em perda de dados.
Neste artigo, abordamos a configuração do PMDA SMART para monitoramento universal de saúde da unidade, interpretação de métricas-chave como temperatura, níveis de desgaste, contagens de erros e rastreamento confiável de unidades com identificadores baseados em WWID. Usuários NVMe podem se aprofundar com a coleta de registros de erros, e proprietários de unidades Seagate têm acesso à telemetria estendida FARM. Combinado com dashboards do Grafana e o pmlogger, você obtém visibilidade contínua da saúde de suas unidades.
O principal ponto: o monitoramento contínuo captura tendências que verificações pontuais não percebem. Alguns minutos de configuração hoje podem economizar horas de trabalho de recuperação (ou pior, perda de dados irrecuperável) amanhã.
Para obter mais informações, visite a documentação do Performance Co-Pilot e a documentação do plugin grafana-pcp. O painel do Grafana usado neste post está disponível para download aqui e pode ser importado via Dashboards > Import no Grafana. As regras de alerta do pmie também estão disponíveis para download aqui e podem ser copiadas para /etc/pcp/pmie/ para uso com o pmie.



