Faça um teste de velocidade de disco no Linux com fio (IOPS, vazão e latência) e verifique a saúde de NVMe e SSD com smartctl e nvme-cli.
Para que serve
Quando um banco de dados, uma VM ou um backup fica lento, o disco é um dos primeiros suspeitos. Este artigo mostra como fazer um teste de velocidade de disco nos SSDs e NVMe com o fio (IOPS, vazão e latência), e como verificar a saúde dos discos com smartctl e nvme-cli, para saber se o problema é carga, configuração ou desgaste.
Pré-requisitos
- Acesso root no Linux ou no host Proxmox VE.
- Pacotes:
apt install fio smartmontools nvme-cli - Pelo menos 10 GB livres no sistema de arquivos que será testado.
fio para um dispositivo inteiro (/dev/nvme0n1, /dev/sda, /dev/md0) em testes de escrita. Isso sobrescreve dados e destrói partições, RAID e pools ZFS. Os exemplos abaixo usam sempre um arquivo de teste. Os testes também geram carga pesada: rode fora do horário de pico.Teste de velocidade de disco e de saúde passo a passo
1. Identifique os discos
lsblk -o NAME,SIZE,MODEL,ROTA,MOUNTPOINTS
nvme list
ssacli ctrl all show config # SSDs no RAID da controladora HPE Smart Array (maioria dos servidores)
cat /proc/mdstat # RAID por software (mdadm), sempre o caso dos NVMe que não estão em ZFS
zpool status # NVMe em ZFS espelhado (comum no Proxmox)
Anote qual ponto de montagem fica em cada disco: o sistema costuma ficar nos SSDs SATA, que na maioria dos servidores estão em RAID por hardware na controladora HPE Smart Array (aparecem como um único disco de modelo LOGICAL VOLUME), e os dados/VMs nos NVMe, que ficam sempre em RAID por software (mdadm ou ZFS espelhado). O ssacli não vem instalado; veja como instalar no artigo "Como verificar o RAID da controladora HPE Smart Array (ssacli) no Linux e no Proxmox".
2. Rode os testes com fio
Entre em um diretório do disco que você quer medir (por exemplo, o armazenamento das VMs) e rode um teste por vez. Cada um dura 60 segundos.
cd /caminho/no/disco/testado
# 1) Leitura aleatória 4K (perfil de banco de dados e VMs)
fio --name=randread --filename=fio-teste --size=4G --rw=randread --bs=4k \
--ioengine=io_uring --direct=1 --iodepth=32 --numjobs=4 \
--time_based --runtime=60 --group_reporting
# 2) Escrita aleatória 4K
fio --name=randwrite --filename=fio-teste --size=4G --rw=randwrite --bs=4k \
--ioengine=io_uring --direct=1 --iodepth=32 --numjobs=4 \
--time_based --runtime=60 --group_reporting
# 3) Leitura sequencial 1M (backup, cópia de arquivos grandes)
fio --name=seqread --filename=fio-teste --size=4G --rw=read --bs=1M \
--ioengine=io_uring --direct=1 --iodepth=16 --numjobs=1 \
--time_based --runtime=60 --group_reporting
# 4) Latência de escrita síncrona 4K, uma requisição por vez (commits de banco)
fio --name=synclat --filename=fio-teste --size=1G --rw=randwrite --bs=4k \
--ioengine=io_uring --direct=1 --iodepth=1 --numjobs=1 --fsync=1 \
--time_based --runtime=60
# ao terminar
rm -f fio-teste
O que cada opção faz: --direct=1 ignora o cache de páginas do Linux para medir o disco e não a RAM; --iodepth é quantas requisições ficam pendentes ao mesmo tempo por processo; --numjobs é o número de processos em paralelo; --group_reporting soma os resultados. Se o kernel não suportar io_uring, troque por --ioengine=libaio.
3. Leia o resultado
- IOPS (
IOPS=): operações por segundo. É a métrica principal nos testes 4K. - BW: vazão em MiB/s ou GiB/s. É a métrica principal no teste sequencial.
- clat (completion latency): tempo que o dispositivo levou para concluir cada operação. Olhe os percentis (
99.00th,99.90th): picos altos nesses percentis explicam travamentos ocasionais mesmo com média boa.
Como referência geral, NVMe entrega dezenas a centenas de milhares de IOPS em 4K aleatório com fila alta, e SSD SATA fica limitado a algo em torno de 550 MB/s no sequencial pela própria interface. Os números exatos dependem do modelo, do RAID e do sistema de arquivos. O mais útil é comparar: o mesmo teste no host e dentro da VM, ou hoje e depois de uma mudança. Para entender as diferenças entre os tipos de disco, veja também o artigo «NVMe, SSD SATA ou HDD: qual a diferença e qual usar no servidor».
4. Cuidados ao testar no Proxmox
- ZFS: o cache em RAM do ZFS (ARC) pode inflar muito os números de leitura. Use um arquivo de teste maior que a RAM livre ou foque nos testes de escrita e de latência síncrona.
- Dentro da VM: o resultado inclui a sobrecarga da virtualização e as opções do disco virtual (controladora VirtIO SCSI single, IO thread, modo de cache). Compare com o mesmo teste no host para ver quanto se perde na camada virtual.
- Banco de dados em VM: para ajustar cache e ZFS depois de medir, veja também o artigo «Banco de dados em VM no Proxmox: disco, cache e ZFS (volblocksize, recordsize e sync)».
- Outras VMs: um backup ou outra VM fazendo I/O pesado no mesmo disco afeta o resultado. Confira com
iostat -x 2(pacotesysstat) antes de testar.
5. Verifique a saúde dos NVMe
nvme smart-log /dev/nvme0
nvme error-log /dev/nvme0 | head -40
Campos que importam:
| Campo | O que significa | Quando se preocupar |
|---|---|---|
critical_warning | Alerta do próprio controlador | Qualquer valor diferente de 0 |
percentage_used | Estimativa de vida útil consumida | Acima de 80–90% (pode passar de 100%) |
available_spare | Blocos reserva restantes | Perto ou abaixo de available_spare_threshold |
media_errors | Dados que o disco não conseguiu ler | Maior que 0 ou crescendo |
temperature | Temperatura atual | Acima de cerca de 70 °C de forma sustentada |
Para um autoteste do NVMe (se o modelo suportar): nvme device-self-test /dev/nvme0 -s 1 (curto) ou -s 2 (estendido). Veja o resultado com nvme self-test-log /dev/nvme0.
6. Verifique a saúde dos SSDs SATA com smartctl
smartctl -H /dev/sda # resumo: PASSED ou FAILED
smartctl -a /dev/sda # todos os atributos e logs
smartctl -t long /dev/sda # autoteste completo, roda em segundo plano
smartctl -l selftest /dev/sda # resultado dos autotestes
Atributos a observar: Reallocated_Sector_Ct, Current_Pending_Sector, Offline_Uncorrectable (devem ficar em 0 ou estáveis) e o indicador de desgaste do fabricante (Wear_Leveling_Count, Media_Wearout_Indicator ou Percent_Lifetime_Remain, conforme o modelo). O smartctl -a /dev/nvme0 também funciona para NVMe e mostra as mesmas informações do nvme smart-log.
SSDs na controladora HPE Smart Array (caso da maioria dos servidores): o /dev/sda é o volume lógico, e o smartctl -a /dev/sda não mostra os SSDs. Leia cada disco físico pela controladora com smartctl -a -d cciss,0 /dev/sg0, -d cciss,1 etc. (descubra o /dev/sgN da controladora com lsscsi -g; em muitos servidores o próprio /dev/sda também funciona) ou com ssacli ctrl slot=0 pd all show detail. O passo a passo completo está no artigo sobre a HPE Smart Array. Os comandos acima, sem -d, valem para os poucos servidores sem controladora.
Como saber se funcionou
- Você tem números de IOPS, vazão e latência p99 para cada disco e pode compará-los com testes futuros.
smartctl -HretornaPASSED,critical_warningé 0 emedia_errorsé 0 em todos os NVMe.- Na controladora HPE,
ssacli ctrl all show configmostraOKem todos os discos; no RAID por software,cat /proc/mdstatmostra[UU]; no ZFS,zpool statusmostraONLINEsem erros.
Problemas comuns
- Resultados absurdamente altos: faltou
--direct=1ou o arquivo cabe no cache (ARC do ZFS). Aumente o--size. - Escrita muito mais lenta que leitura em SSD SATA: pode ser normal em escrita contínua (cache SLC esgotado) ou falta de TRIM. Rode
fstrim -ave confira se ofstrim.timerestá ativo. - Um disco do RAID com latência bem maior que o outro: compare os dois com
iostat -x 2e veja o SMART desse disco. Um disco degradando derruba o desempenho do conjunto. smartctlnão lê os atributos: o disco pode estar atrás de uma controladora RAID. Use a opção-dadequada (smartctl --scanajuda a descobrir).
Perguntas frequentes
O teste com fio apaga os dados do disco?
Não, se você usar um arquivo de teste, como nos exemplos. Nunca aponte o fio para o dispositivo inteiro (/dev/nvme0n1, /dev/sda, /dev/md0) em testes de escrita: isso destrói dados, RAID e pools ZFS.
Por que o dd não é bom para teste de velocidade de disco?
O dd faz só escrita ou leitura sequencial, com uma requisição por vez, e sem cuidado mede o cache da RAM. O fio testa acesso aleatório, fila e latência, que é o que pesa em bancos e VMs.
Qual resultado é normal para NVMe e SSD SATA?
NVMe entrega dezenas a centenas de milhares de IOPS em 4K aleatório com fila alta; SSD SATA fica em torno de 550 MB/s no sequencial. Compare sempre com seus próprios testes anteriores.
Como saber se o NVMe está chegando ao fim da vida útil?
Rode nvme smart-log e veja percentage_used (preocupe-se acima de 80–90%), available_spare e media_errors.
Por que o smartctl não mostra os SSDs no servidor HPE?
Os SSDs estão atrás da controladora HPE Smart Array, que mostra um volume lógico. Use smartctl -d cciss,N ou o ssacli para ler cada disco físico.
Precisa de ajuda?
Se o SMART indicar erros, critical_warning diferente de zero ou um disco sair do RAID, abra um ticket anexando a saída de smartctl -a ou nvme smart-log do disco e o estado do RAID/ZFS. Mantenha seu backup em dia antes de qualquer troca de disco.
