Como Diagnosticar Discos com SMART e Bad Sectors em 2026?
✎ Duarte Spínola | 13 de Julho de 2026
O sistema SMART (Self-Monitoring, Analysis and Reporting Technology) existe há mais de duas décadas, mas continua a ser subutilizado: a maioria dos administradores só verifica o estado dos discos quando uma falha já ocorreu. Em 2026, com discos NVMe Gen5, SSDs de alta densidade e arrays RAID em ambientes de produção, o diagnóstico proactivo não é opcional — é a diferença entre uma janela de manutenção planeada e uma perda de dados às 3 da manhã. Este artigo cobre os atributos SMART críticos para HDDs SATA, SSDs e NVMe, o uso de smartmontools/smartctl no Linux, CrystalDiskInfo no Windows, ferramentas como badblocks e dd_rescue para recuperação de sectores, detecção de degradação em mdadm e ZFS, indicadores de wear leveling em SSDs, monitorização contínua com Nagios/Zabbix/Checkmk e scripts para automatizar a verificação SMART. Tudo em português de Portugal, sem rodeios, com comandos práticos prontos a executar.
1. O que é o SMART e como funciona em 2026
O SMART é um sistema de monitorização integrado no firmware do disco que regista e reporta atributos de saúde — temperatura, sectores realocados, horas de utilização, erros de leitura/escrita, entre dezenas de outros. O padrão original (SMART ATA, definido na especificação S.M.A.R.T. da smartmontools) evoluiu, mas o princípio mantém-se: cada atributo tem um valor normalizado (RAW_VALUE), um valor actual (VALUE), um pior valor registado (WORST) e um limite de falha (THRESH). Quando o VALUE cai abaixo do THRESH, o disco sinaliza falha iminente.
Em 2026, existem três ecossistemas SMART distintos:
| Tecnologia | Protocolo | Estrutura SMART | Ferramenta principal |
|---|---|---|---|
| HDD SATA | ATA/SATA | Atributos ID 1-254 com RAW_VALUE | smartctl -a /dev/sdX |
| SSD SATA | ATA/SATA | Atributos ID 1-254 + atributos específicos SSD | smartctl -a /dev/sdX |
| NVMe | NVMe (PCIe) | Log pages SMART (sem IDs de atributos) | smartctl -a /dev/nvmeXnY |
O ponto crítico: SMART não prevê todas as falhas. Estudos históricos (documentação smartmontools, man page smartctl) indicam que 30-40% das falhas de disco ocorrem sem qualquer aviso prévio do SMART. O SMART é um indicador necessário, mas não suficiente — deve ser complementado com verificação de bad sectors, monitorização de RAID/ZFS e backups funcionais.
2. Atributos SMART críticos para discos SATA/HDD
Nem todos os mais de 50 atributos SMART têm significado prático. Para diagnóstico de discos mecânicos SATA, os seguintes são os que realmente importam:
| ID | Nome | Interpretação | Acção recomendada |
|---|---|---|---|
| 5 | Reallocated Sector Count | Sectores remapeados para área de reserva. RAW > 0 indica desgaste físico. | Monitorizar tendência; substituir se crescer rapidamente |
| 9 | Power-On Hours | Horas totais de utilização. Indica idade do disco. | Comparar com MTBF do fabricante |
| 12 | Power Cycle Count | Número de ciclos ligar/desligar. | Referência contextual |
| 187 | Reported Uncorrectable Errors | Erros de leitura não corrigíveis reportados. | Investigar com badblocks; considerar substituição |
| 188 | Command Timeout | Timeout de comandos. Pode indicar cabo SATA defeituoso. | Verificar cabos antes de condenar o disco |
| 194 | Temperature Celsius | Temperatura actual em °C. | Investigar se > 50°C (refrigeração) |
| 197 | Current Pending Sector Count | Sectores pendentes de realocação — não lêem correctamente mas ainda não foram remapeados. | Crítico: executar badblocks ou dd_rescue; risco de perda de dados |
| 198 | Offline Uncorrectable | Sectores que não podem ser corrigidos offline. Mais grave que 197. | Substituir disco iminentemente |
| 199 | UDMA CRC Error Count | Erros CRC na interface. Indica problema de cabo, não de disco. | Substituir cabo SATA |
| 200 | Write Error Rate | Taxa de erros de escrita (alguns fabricantes). | Monitorizar tendência |
Os três atributos que ditam substituição imediata
Reallocated Sector Count (ID 5): quando o firmware encontra um sector que não consegue ler ou escrever, remapeia-o para uma área de reserva. Cada realocação reduz a capacidade de reserva. Se o RAW_VALUE for diferente de zero, o disco já tem sectores físicos danificados. Uma tendência crescente (novos realocados em semanas ou dias) indica falha mecânica em curso.
Current Pending Sector Count (ID 197): sectores que falharam na leitura mas ainda não foram realocados. Isto é diferente do ID 5 — o disco ainda não decidiu remapear porque pode conseguir ler os dados numa tentativa posterior. Se uma escrita for bem-sucedida nesse sector, ele deixa de ser pendente. Se falhar novamente, torna-se realocação (ID 5). Um valor > 0 não é necessariamente fatal, mas exige verificação com badblocks ou leitura completa do disco.
Offline Uncorrectable (ID 198): sectores onde o scan offline do SMART detectou erros irrecuperáveis. Estes são os mais graves — o disco tentou corrigir e não conseguiu. Se o valor for diferente de zero, o disco deve ser substituído o mais rapidamente possível, idealmente antes do próximo reboot.
3. Atributos NVMe SMART — diferenças e métricas específicas
Os discos NVMe não usam o sistema de atributos ID 1-254 do ATA. Em vez disso, usam log pages SMART com métricas normalizadas pela especificação NVMe. As ferramentas como smartctl já suportam leitura destes log pages, mas a interpretação é diferente:
| Métrica NVMe | Descrição | Acção recomendada |
|---|---|---|
| Critical Warning | Flags de aviso (bitmask): spare baixo, temperatura alta, fiabilidade degradada, modo só de leitura. | Se diferente de 0, investigar imediatamente |
| Composite Temperature | Temperatura composta (pode incluir sensor interno). | Investigar se > 70°C |
| Available Spare | Percentagem de blocos de reserva disponíveis. | Se < threshold (normalmente 10%), plano substituição |
| Available Spare Threshold | Limite mínimo de reserva que acciona aviso. | Referência do fabricante |
| Percentage Used | Percentagem de vida útil usada (0-100%). | A 100% o disco atingiu endurance nominal; substituir |
| Data Units Written | Dados escritos em unidades de 512000 bytes. | Comparar com TBW nominal do SSD |
| Power On Hours | Horas totais ligado. | Contextual |
| Power Cycles | Ciclos ligar/desligar. | Contextual |
| Media Errors | Erros de media não corrigíveis. | Se > 0, avaliar substituição |
| Unsafe Shutdowns | Encerramentos sem comando shutdown correcto. | Investigar fonte de alimentação/UPS |
Diferenças práticas HDD vs NVMe
sudo smartctl -A /dev/sda | grep -E “^( 5|197|198|199)”
# NVMe — log page SMART completo
sudo smartctl -a /dev/nvme0n1
O comando NVMe não precisa de -A porque o SMART é um log page único, não uma lista de atributos separados. A métrica mais importante em NVMe é Percentage Used — um valor de 80% significa que o SSD já consumiu 80% da sua endurance nominal (definida em TBW — Terabytes Written). Diferente dos HDDs onde Reallocated Sector Count é o indicador principal, em NVMe a vida útil é predominantemente função de escrita acumulada, não de sectores físicos danificados.
4. smartmontools e smartctl no Linux — instalação e comandos práticos
O smartmontools é o pacote standard para diagnóstico SMART em Linux e inclui duas ferramentas: smartctl (execução manual) e smartd (daemon de monitorização contínua). A instalação varia por distribuição:
sudo apt install smartmontools
# RHEL/Rocky/Alma/Fedora
sudo dnf install smartmontools
# Arch/Manjaro
sudo pacman -S smartmontools
# openSUSE
sudo zypper install smartmontools
Comandos essenciais
sudo smartctl –scan
# Visão geral completa do disco (informações + SMART + atributos)
sudo smartctl -a /dev/sda
# Apenas atributos SMART (tabela com VALUE/WORST/THRESH/RAW)
sudo smartctl -A /dev/sda
# Apenas estado de saúde (PASS/FAIL)
sudo smartctl -H /dev/sda
# Verificar erros registados no log de erros SMART
sudo smartctl -l error /dev/sda
# Verificar testes SMART self-test executados e resultados
sudo smartctl -l selftest /dev/sda
# Iniciar teste curto (~2 minutos, não destrutivo)
sudo smartctl -t short /dev/sda
# Iniciar teste longo (pode levar várias horas, não destrutivo)
sudo smartctl -t long /dev/sda
# Verificar progresso de teste em execução
sudo smartctl -a /dev/sda | grep -A5 “Self-test execution status”
# Para NVMe
sudo smartctl -a /dev/nvme0n1
sudo smartctl -H /dev/nvme0n1
Configurar smartd para monitorização automática
O smartd lê SMART periodicamente e regista alertas no syslog. A configuração está em /etc/smartd.conf (Debian/Ubuntu) ou /etc/smartmontools/smartd.conf:
DEVICESCAN -d auto -m [email protected] -s (S/../.././01|L/../../6/03) -M test
A linha acima escaneia automaticamente todos os discos, envia email para [email protected] se detectar degradação, executa teste curto todos os dias às 01h00 e teste longo aos sábados às 03h00. O -M test envia um email de teste ao iniciar para confirmar que o envio funciona. Em Debian/Ubuntu, activar o daemon:
Para mais detalhes sobre a sintaxe de agendamento (-s), consultar a man page do smartd.
5. CrystalDiskInfo no Windows — diagnóstico gráfico
Em ambientes Windows, CrystalDiskInfo é a ferramenta de referência para leitura de SMART. Lê os mesmos atributos que smartctl, mas apresenta-os numa interface gráfica com código de cores:
- Azul (Bom): todos os atributos estão dentro dos limites.
- Amarelo (Atenção): um ou mais atributos indicam desgaste (ex: Reallocated Sector Count > 0, ou SSD Percentage Used > 90%).
- Vermelho (Mau): um atributo crítico ultrapassou o limite de falha (THRESH).
Configuração recomendada para sysadmins
- Descarregar CrystalDiskInfo (versão Shizuku ou Standard) de crystalmark.info/downloads.
- No menu “Function”, activar “Auto Refresh” e definir intervalo (ex: 5 minutos).
- Em “Alert Options”, configurar alerta por email se um disco passar a estado “Caution” ou “Bad”.
- Em “Startup”, activar “Resident” para iniciar com o Windows.
- Para discos NVMe, o CrystalDiskInfo 9.x suporta leitura nativa de log pages SMART NVMe — confirmar que a versão instalada é 9.0 ou superior.
CrystalDiskInfo vs smartctl — quando usar cada um
| Critério | CrystalDiskInfo | smartctl |
|---|---|---|
| Plataforma | Windows | Linux (também existe porta Windows) |
| Interface | GUI, código de cores | CLI, output tabular |
| Alertas automáticas | Sim (email, pop-up) | Via smartd (email/syslog) |
| NVMe suporte | Versão 9.x+ | Nativo desde smartmontools 6.5+ |
| Scripts de automação | Limitado (CLI mode existe mas limitado) | Total (bash, cron, Nagios) |
| Custo | Gratuito (Shizuku) / Opensource | Gratuito (GPL) |
Em ambientes mistos Windows/Linux, a combinação CrystalDiskInfo (estações Windows) + smartd (servidores Linux) é o padrão recomendado.
6. Badblocks e dd_rescue — detecção e recuperação de sectores
Quando o SMART reporta Current Pending Sector Count (ID 197) ou Offline Uncorrectable (ID 198) diferente de zero, é necessário verificar fisicamente o disco para localizar e isolar os sectores danificados.
badblocks — detecção de sectores danificados
O badblocks faz parte do e2fsprogs e procura sectores defeituosos. Existem dois modos principais:
sudo badblocks -sv -b 4096 -c 128 /dev/sda
# Modo de escrita (DESTRUTIVO — apaga todos os dados)
# USAR APENAS EM DISCOS NOVOS OU APÓS BACKUP COMPLETO
sudo badblocks -wsv -b 4096 /dev/sda
# Modo read-write não destrutivo (requer filesystem desmontado)
# Escreve padrão, lê, compara — detecta sectores inconsistentes
sudo badblocks -nsv -b 4096 /dev/sda
Para discos em produção com filesystems ext4/xfs, a abordagem mais segura é executar badblocks read-only e depois usar e2fsck para marcar os blocos como bad:
sudo e2fsck -cc /dev/sda1
O -cc executa badblocks em modo read-only e marca os blocos encontrados como bad no bitmap do filesystem, evitando que sejam usados. Para xfs, usar xfs_repair com opções de verificação.
dd_rescue / ddrescue — recuperação de dados de discos com falhas
Quando um disco tem sectores danificados e é necessário recuperar dados antes de o retirar de serviço, o GNU ddrescue (não confundir com dd_rescue antigo) é a ferramenta de eleição. Copia dados de um disco com falhas para outro, saltando blocos com erros e voltando depois para tentar recuperar o máximo possível:
sudo apt install gddrescue # Debian/Ubuntu
sudo dnf install ddrescue # Fedora/RHEL
# Copiar disco com falhas para ficheiro imagem (primeira passagem rápida)
sudo ddrescue -n /dev/sda /mnt/backup/sda.img /mnt/backup/sda.map
# Segunda passagem — tentar recuperar blocos que falharam na primeira
sudo ddrescue -d -r3 /dev/sda /mnt/backup/sda.img /mnt/backup/sda.map
# Copiar directamente para disco novo (mesma capacidade ou maior)
sudo ddrescue -n /dev/sda /dev/sdb /mnt/backup/sdb.map
O ficheiro .map (mapfile) é essencial — regista que blocos foram copiados com sucesso, quais falharam e onde retomar. Nunca executar ddrescue sem mapfile. A primeira passagem (-n) copia rapidamente saltando erros; a segunda (-d -r3) usa acesso directo ao disco e tenta cada bloco falhado até 3 vezes.
Quando usar cada ferramenta
| Cenário | Ferramenta | Justificação |
|---|---|---|
| Disco novo, verificar antes de colocar em produção | badblocks -wsv | Teste destrutivo aceitável em disco vazio |
| Disco em produção, ID 197 > 0 | badblocks -sv (read-only) + e2fsck -cc | Marcar bad blocks sem perder dados |
| Disco com falha, recuperar dados | ddrescue -n + ddrescue -r3 | Recuperar máximo antes de retirar disco |
| Disco com ID 198 > 0 | Substituir disco, usar ddrescue para backup | Risco de falha iminente |
7. Degradação de RAID com mdadm e ZFS pool — detecção e resposta
mdadm — RAID software Linux
Quando um disco falha num array mdadm, o array degrada (passa de “clean” para “degraded”). A detecção rápida é essencial porque um array degradado não tem tolerância a falhas — uma segunda falha causa perda de dados.
sudo mdadm –detail –scan
# Verificar estado de um array específico
sudo mdadm –detail /dev/md0
# Verificar se há discos com falha no array
cat /proc/mdstat
# Exemplo de output degradado:
# md0 : active raid1 sda1[0] sdb1[1](F)
# 2095360 blocks super 1.2 [2/1] [U_]
# O [U_] indica que o segundo disco falhou (underscore = falha, U = activo)
# Marcar disco como faulty e remover do array
sudo mdadm –fail /dev/md0 /dev/sdb1
sudo mdadm –remove /dev/md0 /dev/sdb1
# Adicionar disco novo ao array (rebuild inicia automaticamente)
sudo mdadm –add /dev/md0 /dev/sdc1
# Monitorizar progresso do rebuild
cat /proc/mdstat
# Ou, com detalhe:
sudo mdadm –detail /dev/md0 | grep -i rebuild
# Verificar tempo estimado de rebuild
sudo mdadm –detail /dev/md0 | grep -i “rebuild\|finish”
Importante: verificar SMART dos discos restantes
Após uma falha de disco, verificar o SMART de TODOS os discos restantes do array. Falhas correlacionadas (discos do mesmo lote, mesma idade, mesma temperatura) são comuns:
for dev in /dev/sda /dev/sdb /dev/sdc; do
echo “=== $dev ===”
sudo smartctl -H $dev
sudo smartctl -A $dev | grep -E “^ 5|^197|^198|^199”
done
ZFS pool — degradação e diagnóstico
O ZFS tem uma vantagem sobre o mdadm: detecta silenciosamente corrupção de dados através de checksums. Um pool degradado é visível com zpool status:
sudo zpool status
# Estado detalhado com eventos recentes
sudo zpool status -v
sudo zpool events
# Exemplo de output degradado:
# pool: tank
# state: DEGRADED
# status: One or more devices has been removed by the administrator.
# action: Attach the missing device or replace it.
# scan: resilver requested, but not started
# config:
# tank DEGRADED
# mirror-0 DEGRADED
# sda1 ONLINE
# sdb1 UNAVAIL (was removed)
Substituir disco em pool ZFS
sudo zpool status
# Offline o disco (se ainda estiver parcialmente acessível)
sudo zpool offline tank sdb1
# Substituir fisicamente o disco e identificar o novo dispositivo
lsblk
# Substituir no pool
sudo zpool replace tank sdb1 /dev/sdc1
# Ou, se o disco novo já está no mesmo slot (mesmo nome):
sudo zpool replace tank sdb1
# Monitorizar resilver
sudo zpool status tank
# Verificar erros de leitura/escrita no pool
sudo zpool status -v tank | grep -E “errors|CKSUM”
Scrub periódico em ZFS
O scrub é a verificação activa de todos os blocos do pool — lê todos os dados e compara com checksums. Em 2026, a recomendação é executar scrub mensalmente em pools de produção:
sudo zpool scrub tank
# Verificar progresso
sudo zpool status tank
# Verificar histórico de scrubs
sudo zpool history tank | grep scrub
Comparação mdadm vs ZFS para diagnóstico
| Critério | mdadm | ZFS |
|---|---|---|
| Detecção de corrupção silenciosa | Não (bit rot não detectado) | Sim (checksum em todos os blocos) |
| Notificação de degradação | mdadm –monitor (email) | zpool events + zfs events |
| Reparação automática | Apenas reconstrói paridade | Resilver + auto-repair com checksums |
| Verificação activa | badblocks manual | zpool scrub (automático) |
| Comando de estado | cat /proc/mdstat | zpool status |
| Substituir disco | mdadm –remove + –add | zpool replace |
8. SSD Wear Leveling e quando substituir um disco
Os SSDs não têm sectores físicos no sentido tradicional — usam células NAND flash que se desgastam com ciclos de escrita/apagação. O wear leveling distribui as escritas por todas as células para evitar desgaste desigual. Os atributos SMART específicos de SSDs que indicam desgaste:
Atributos SMART específicos de SSDs SATA
| ID | Nome | Interpretação |
|---|---|---|
| 5 | Reallocated Sector Count | Blocos reformados (bad blocks substituídos por reserves) |
| 177 | Wear Leveling Count | Contador de ciclos de wear leveling (alguns fabricantes) |
| 179 | Used Reserved Block Count | Blocos de reserva já consumidos |
| 180 | Unused Reserved Block Count | Blocos de reserva ainda disponíveis |
| 231 | SSD Life Left | Percentagem de vida útil restante (Samsung) |
| 233 | Media Wearout Indicator | Indicador de desgaste (Intel/Samsung) |
| 241 | Total LBAs Written | Total de sectores lógicos escritos |
| 242 | Total LBAs Read | Total de sectores lógicos lidos |
NVMe — Percentage Used é o indicador principal
Em NVMe, a métrica Percentage Used (do log page SMART) é a mais directa: representa a percentagem de endurance nominal já consumida. Um valor de 100% não significa que o disco vai falhar imediatamente, mas que atingiu o limite de garantia do fabricante (TBW nominal).
sudo smartctl -a /dev/nvme0n1 | grep -i “percentage used”
Critérios para substituir um disco — quando age
| Sinal | Ferramenta | Quando substituir |
|---|---|---|
| Reallocated Sector Count (ID 5) > 0 e a crescer | smartctl -A | Substituir quando RAW exceder threshold do fabricante ou crescer > 10% por semana |
| Current Pending Sector (ID 197) > 0 | smartctl -A + badblocks | Após badblocks não resolver, substituir |
| Offline Uncorrectable (ID 198) > 0 | smartctl -A | Substituir imediatamente |
| SSD Percentage Used > 80% | smartctl -a (NVMe) | Planear substituição; > 95% substituir |
| SSD Wear Leveling Count alto | smartctl -A | Verificar documentação do fabricante para threshold |
| mdadm array degradado sem causa óbvia | mdadm –detail + smartctl | Verificar SMART de todos os discos; substituir o com problema |
| ZFS pool com erros CKSUM crescentes | zpool status -v | Investigar disco; substituir se erros persistirem após scrub |
| Temperatura > 55°C consistente | smartctl -A (ID 194) | Melhorar refrigeração; se persistir, verificar se disco está em falha |
| Discos com > 5 anos (HDD) ou > endurance TBW (SSD) | smartctl -a + datasheet | Substituir proactivamente em ambientes críticos |
Calculadora prática de TBW
A endurance nominal de um SSD é expressa em TBW (Terabytes Written). Por exemplo, um Samsung 990 Pro 1TB tem ~600 TBW. Para estimar vida útil:
sudo smartctl -A /dev/sda | awk ‘/^241/ {print $10 * 512 / 1024^4 ” TB escritos”}’
Se um SSD com 600 TBW já tem 500 TB escritos (83%), está perto do fim da vida nominal. Em NVMe, o Percentage Used já incorpora esta relação automaticamente.
9. Monitorização com Nagios, Zabbix e Checkmk + scripts de automação SMART
A verificação manual de SMART é insuficiente em ambientes com múltiplos servidores. A monitorização contínua garante que alertas são gerados antes que a falha se torne crítica.
Nagios — plugin check_smart
O check_smart é o plugin standard para integração de smartctl com Nagios:
wget https://raw.githubusercontent.com/NagiosEnterprises/nagios-plugins/master/plugins/check_smart
sudo cp check_smart /usr/local/nagios/libexec/
sudo chmod +x /usr/local/nagios/libexec/check_smart
# Testar manualmente
sudo /usr/local/nagios/libexec/check_smart -d /dev/sda -i ata
# Output exemplo:
# SMART OK – 197 Current_Pending_Sector = 0, 198 Offline_Uncorrectable = 0, 5 Reallocated_Sector_Ct = 0
Configuração no Nagios (commands.cfg):
command_name check_smart
command_line $USER1$/check_smart -d $ARG1$ -i $ARG2$
}
Configuração no host (host.cfg):
use generic-service
host_name servidor-prod
service_description SMART /dev/sda
check_command check_smart!/dev/sda!ata
}
Zabbix — template SMART via smartctl
O Zabbix não tem um template nativo para SMART, mas a abordagem standard usa descoberta de discos (LLD) com user parameters:
UserParameter=smart.discovery[*],sudo smartctl –scan | awk ‘NR>0 {print “{#DISK}:”$1}’ | jq .
UserParameter=smart.health[*],sudo smartctl -H $1 | grep -i “result” | awk ‘{print $$NF}’
UserParameter=smart.attr[*],sudo smartctl -A $1 | awk ‘/^ $2/ {print $$10}’
Para que o Zabbix consiga executar smartctl com sudo, adicionar ao sudoers:
Configurar a descoberta de discos e itens (triggers) no template Zabbix para alertar quando:
smart.health[/dev/sda]!= “PASSED”smart.attr[/dev/sda,5]> 0 (Reallocated Sector Count)smart.attr[/dev/sda,197]> 0 (Current Pending Sector)smart.attr[/dev/sda,198]> 0 (Offline Uncorrectable)
Checkmk — plugin nativo de SMART
O Checkmk tem um plugin de SMART que monitoriza automaticamente os discos detectados. Para activar:
- No Checkmk, ir a Setup > Services > Service monitoring > Host service rules.
- Adicionar regra “SMART monitoring”.
- Seleccionar discos a monitorizar (ou “all” para auto-descoberta).
- Configurar níveis de alerta para atributos críticos (ID 5, 197, 198).
O Checkmk também monitoriza mdadm automaticamente se o agente Linux estiver instalado. Os arrays em estado “degraded” accionam automaticamente um alerta WARN.
Script de verificação SMART para cron ou execução ad-hoc
O seguinte script Bash verifica todos os discos do sistema e reporta atributos críticos. Pode ser executado manualmente ou via cron:
# smart_check.sh — Verificação SMART automatizada
# Verifica todos os discos detectados e reporta atributos críticos
# Uso: sudo ./smart_check.sh [–alert] [–email [email protected]]
ALERT_EMAIL=””
SEND_ALERT=false
while [[ $# -gt 0 ]]; do
case $1 in
–alert) SEND_ALERT=true; shift ;;
–email) ALERT_EMAIL=”$2″; shift 2 ;;
*) shift ;;
esac
done
# Atributos críticos a verificar (ID:Nome:Threshold)
CRITICAL_ATTRS=(
“5:Reallocated_Sector_Ct:0”
“197:Current_Pending_Sector:0”
“198:Offline_Uncorrectable:0”
“199:UDMA_CRC_Error_Count:0”
)
# Discos NVMe — métricas diferentes
NVME_CRITICALS=(“Media_and_Data_Integrity_Errors:0” “Available_Spare:10″)
REPORT=””
PROBLEMS_FOUND=false
# Descobrir discos
DISKS=$(sudo smartctl –scan | awk ‘{print $1}’ | sort -u)
for disk in $DISKS; do
# Determinar se é NVMe ou ATA
if echo “$disk” | grep -q “nvme”; then
disk_type=”nvme”
else
disk_type=”ata”
fi
# Estado de saúde geral
health=$(sudo smartctl -H “$disk” 2>/dev/null | grep -i “result” | awk ‘{print $NF}’)
REPORT+=”— $disk (tipo: $disk_type, saúde: $health) —“$’\n’
if [[ “$health” != “PASSED” && “$health” != “OK” ]]; then
PROBLEMS_FOUND=true
REPORT+=” ALERTA: Estado de saúde não é PASSED”$’\n’
fi
if [[ “$disk_type” == “nvme” ]]; then
# Verificar métricas NVMe
for metric in “${NVME_CRITICALS[@]}”; do
name=”${metric%%:*}”
threshold=”${metric##*:}”
value=$(sudo smartctl -a “$disk” 2>/dev/null | grep -i “$name” | awk ‘{print $NF}’)
if [[ -n “$value” && “$value” -gt “$threshold” ]]; then
PROBLEMS_FOUND=true
REPORT+=” ALERTA: $name = $value (threshold: $threshold)”$’\n’
fi
done
else
# Verificar atributos ATA
for attr in “${CRITICAL_ATTRS[@]}”; do
id=”${attr%%:*}”
rest=”${attr#*:}”
name=”${rest%%:*}”
threshold=”${rest##*:}”
raw=$(sudo smartctl -A “$disk” 2>/dev/null | awk -v id=”^${id} ” ‘$0 ~ id {print $10}’)
if [[ -n “$raw” && “$raw” -gt “$threshold” ]]; then
PROBLEMS_FOUND=true
REPORT+=” ALERTA: ID $id ($name) RAW=$raw (threshold: $threshold)”$’\n’
fi
done
fi
REPORT+=$’\n’
done
# Output do relatório
echo “$REPORT”
# Enviar email se houver problemas e –alert estiver activo
if [[ “$PROBLEMS_FOUND” == true && “$SEND_ALERT” == true && -n “$ALERT_EMAIL” ]]; then
echo “$REPORT” | mail -s “[SMART ALERT] Problemas detectados em $(hostname)” “$ALERT_EMAIL”
echo “Email enviado para $ALERT_EMAIL”
fi
# Exit code para integração com monitoring
if [[ “$PROBLEMS_FOUND” == true ]]; then
exit 1
else
exit 0
fi
Instalação do script:
sudo chmod +x /usr/local/bin/smart_check.sh
# Execução manual
sudo /usr/local/bin/smart_check.sh
# Cron — verificação diária às 06h00 com alerta por email
echo “0 6 * * * root /usr/local/bin/smart_check.sh –alert –email [email protected]” | sudo tee /etc/cron.d/smart-check
# systemd timer (alternativa ao cron)
sudo tee /etc/systemd/system/smart-check.service << ‘EOF’
[Unit]
Description=SMART disk health check
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/smart_check.sh –alert –email [email protected]
EOF
sudo tee /etc/systemd/system/smart-check.timer << ‘EOF’
[Unit]
Description=Run SMART check daily
[Timer]
OnCalendar=*-*-* 06:00:00
Persistent=true
[Install]
WantedBy=timers.target
EOF
sudo systemctl enable –now smart-check.timer
Script adicional — verificação de arrays mdadm
# mdadm_check.sh — Verifica estado de todos os arrays mdadm
# Gera alerta se algum array não estiver “clean”
PROBLEMS=false
REPORT=””
# Verificar estado de cada array
for md in /dev/md/*; do
[[ -e “$md” ]] || continue
state=$(sudo mdadm –detail “$md” 2>/dev/null | grep “State :” | awk ‘{print $3}’)
active=$(sudo mdadm –detail “$md” 2>/dev/null | grep “Active Devices” | awk ‘{print $4}’)
working=$(sudo mdadm –detail “$md” 2>/dev/null | grep “Working Devices” | awk ‘{print $4}’)
failed=$(sudo mdadm –detail “$md” 2>/dev/null | grep “Failed Devices” | awk ‘{print $4}’)
REPORT+=”$md: estado=$state, activos=$active, a funcionar=$working, falhados=$failed”$’\n’
if [[ “$state” != “clean” || “$failed” -gt 0 ]]; then
PROBLEMS=true
REPORT+=” ALERTA: Array $md em estado $state com $failed discos falhados”$’\n’
fi
done
echo “$REPORT”
[[ “$PROBLEMS” == true ]] && exit 1 || exit 0
Checklist Pré-Produção
Antes de colocar um servidor em produção, verificar os seguintes pontos de diagnóstico de discos:
- [ ] Instalar smartmontools em todos os servidores Linux (
apt install smartmontools/dnf install smartmontools) - [ ] Configurar smartd em
/etc/smartd.confcomDEVICESCANe email de alerta configurado - [ ] Activar e iniciar o serviço:
sudo systemctl enable --now smartmontools - [ ] Executar
smartctl -Hem todos os discos e confirmar resultado PASSED antes de aceitar o servidor - [ ] Verificar que Reallocated Sector Count (ID 5), Current Pending Sector (ID 197) e Offline Uncorrectable (ID 198) são todos 0 em discos novos
- [ ] Em NVMe, verificar que Percentage Used < 5% e Available Spare > threshold
- [ ] Para discos com ID 197 > 0, executar
badblocks -svee2fsck -ccantes de colocar em produção - [ ] Configurar teste SMART curto diário e teste longo semanal em smartd (
-s (S/../.././01|L/../../6/03)) - [ ] Instalar CrystalDiskInfo em todas as estações Windows com auto-refresh e alertas por email activados
- [ ] Para arrays mdadm, configurar
mdadm --monitor --scancom email de alerta (MAILADDR [email protected]em/etc/mdadm/mdadm.conf) - [ ] Para pools ZFS, agendar scrub mensal via cron ou systemd timer
- [ ] Integrar SMART no Nagios (check_smart), Zabbix (user parameters + LLD) ou Checkmk (plugin nativo)
- [ ] Instalar o script
smart_check.shem/usr/local/bin/e configurar cron ou systemd timer diário - [ ] Verificar que alertas de SMART chegam ao administrador (teste com
-M testem smartd ou email de teste manual) - [ ] Documentar TBW nominal de cada SSD e Percentage Used actual para baseline de monitorização
- [ ] Configurar sudoers para Nagios/Zabbix poder executar smartctl sem password
- [ ] Em ambientes com discos hot-swap, verificar que a substituição de disco é testada (mdadm –add / zpool replace) antes de uma falha real
- [ ] Confirmar que backups 3-2-1 estão operacionais — SMART previne, mas não substitui backups
Artigos Relacionados
- Backup 3-2-1: A Regra que Salva Dados em 2026
- RAID 2026: mdadm vs ZFS vs Btrfs — Qual Escolher?
- ZFS em Produção: Configuração e Boas Práticas
- NVMe vs SATA SSD em 2026: Vale a Penna a Mudança?
- Recuperação de Dados com ddrescue: Guia Prático
- Monitorização de Servidores Linux com Nagios e Checkmk
- Ransomware 2026: Protecção e Recuperação de Infra-estruturas
- Windows 11 24H2/25H2: O que Mudou para Sysadmins
Fontes
- smartmontools.org — Documentação oficial
- smartmontools — Self-Monitoring
- smartmontools — NVMe Support
- smartmontools — SSD Attributes
- smartmontools — Nagios Integration
- man7.org — man page smartctl(8)
- man7.org — man page smartd(8)
- man7.org — man page badblocks(8)
- crystalmark.info — CrystalDiskInfo
- crystalmark.info — Downloads
- GNU ddrescue — Manual oficial
- checkmk.com — Checkmk
