Discos NVMe Linux. Vamos criar um guia completo sobre como diagnosticar e testar discos NVMe em servidores Linux, incluindo identificação de problemas, monitoramento de saúde e testes de desempenho. Vou detalhar passo a passo, de forma prática.
1️⃣ Identificando discos NVMe no sistema
Para listar os NVMe disponíveis:
lsblk -d -o NAME,MODEL,SIZE,ROTA
Exemplo de saída:
NAME MODEL SIZE ROTA nvme0n1 Samsung_NVMe_1 1T 0 nvme1n1 Samsung_NVMe_2 2T 0 sda ST1000DM003 1T 1
ROTA = 0indica SSD/NVMe (sem partes móveis).ROTA = 1indica HDD tradicional.
Para ver detalhes mais técnicos do NVMe:
sudo nvme list
Saída típica:
Node SN Model Namespace Usage Format FW Rev ---------- ------------- ---------------- --------- ----- ------ ------- /dev/nvme0n1 S3XXXXXXXX Samsung SSD 980 1 500G 512 B + 0E 4B2QEXM7
2️⃣ Verificando a saúde do NVMe
Discos NVMe têm SMART próprio (nvme-cli) que fornece informações detalhadas de saúde.
sudo nvme smart-log /dev/nvme0n1
Exemplo de saída:
Smart Log for NVME device:nvme0n1 Critical Warning: 0x0 Temperature: 35 C Available Spare: 100% Percentage Used: 5% Data Units Written: 12345 Power Cycles: 10 Power On Hours: 200 Unsafe Shutdowns: 0 Media Errors: 0
✅ Indicadores importantes:
- Percentage Used: Quanto do ciclo de vida do SSD foi utilizado.
- Media Errors / Unsafe Shutdowns: Problemas críticos ou desligamentos incorretos.
- Temperature: Ideal abaixo de 70 °C em uso contínuo.
3️⃣ Testando desempenho de leitura/escrita
Usando fio (testes profissionais de I/O):
- Instale
fio:
sudo apt install fio # Debian/Ubuntu sudo dnf install fio # RHEL/AlmaLinux
- Teste de leitura sequencial:
sudo fio --name=seq_read --filename=/dev/nvme0n1 --rw=read --bs=1M --size=1G --numjobs=1 --time_based --runtime=30 --group_reporting
- Teste de escrita sequencial:
⚠️ Isso sobrescreve dados. Use em disco vazio ou de teste:
sudo fio --name=seq_write --filename=/dev/nvme0n1 --rw=write --bs=1M --size=1G --numjobs=1 --time_based --runtime=30 --group_reporting
- Teste de IOPS aleatório 4K (importante para bancos de dados):
sudo fio --name=rand_readwrite --filename=/dev/nvme0n1 --rw=randrw --bs=4k --size=1G --numjobs=4 --time_based --runtime=60 --group_reporting
4️⃣ Monitoramento contínuo (opcional)
Para servidores em produção, é melhor monitorar a saúde dos NVMe continuamente:
- Com
nvme-cliesmartctlvia cron ou systemd timer. - Integração com Zabbix ou Prometheus:
# Exemplo: coletar % used
nvme smart-log /dev/nvme0n1 | grep 'Percentage Used' | awk '{print $4}'
- Alertas: ≥80 % de uso ou erros repetidos devem gerar alerta imediato.
5️⃣ Testes de integridade (opcional)
O NVMe suporta self-test interno:
sudo nvme device-self-test /dev/nvme0n1 --start --self-test-code=1 # curta duração sudo nvme device-self-test /dev/nvme0n1 --start --self-test-code=2 # longa duração sudo nvme device-self-test /dev/nvme0n1 --result
- Teste curto: ~2 min
- Teste longo: pode levar horas, verifica todos os blocos do SSD.
6️⃣ Diagnóstico de problemas comuns
| Sintoma | Possível causa | Comando útil |
|---|---|---|
| Lentidão intermitente | Alto uso do % used, temperatura alta | nvme smart-log |
| Erros de leitura/escrita | Falha física do SSD | `dmesg |
| Desconexão ou travamento | Problema de driver, PCIe ou cabo | `lspci -vv |
| Alto I/O Wait | Saturação de NVMe por aplicações | iostat -x 1 |
FAQ
Use o comando lsblk ou nvme list para listar todos os NVMe conectados e verificar suas capacidades e namespaces.
Ferramentas como nvme-cli ou smartctl permitem verificar temperatura, ciclos de vida (% used), erros e status de integridade do disco.
O fio é a ferramenta mais recomendada para testar leitura/escrita sequencial e aleatória, além de medir IOPS e throughput.
Não. Testes de escrita sobrescrevem dados. Execute apenas em discos de teste ou backups completos.
É possível criar scripts periódicos ou integrar com Zabbix/Prometheus para alertas de % used, temperatura e erros
Alta temperatura, aumento de % used, erros de leitura/escrita no dmesg, lentidão intermitente ou travamentos podem indicar falha iminente.
