Como ver a saúde do SSD e HD com PowerShell (Get-PhysicalDisk)

Como ver a saúde do SSD e HD com PowerShell (Get-PhysicalDisk)

O disco quase nunca avisa antes de morrer. Num dia o Windows demora mais pra abrir, no outro aparece um erro de leitura, e na semana seguinte o SSD simplesmente some da BIOS. A boa notícia: o Windows já guarda dados de saúde de cada disco, e você consegue lê-los em segundos com dois cmdlets nativos do PowerShell, sem instalar programa nenhum.

O que são Get-PhysicalDisk e Get-StorageReliabilityCounter

Os dois fazem parte do módulo Storage, que já vem no Windows 10, Windows 11 e no Windows Server. O Get-PhysicalDisk lista os discos físicos e o estado geral de cada um. O Get-StorageReliabilityCounter vai mais fundo e, segundo a documentação da Microsoft, retorna contadores de confiabilidade como temperatura, erros, desgaste e tempo de uso do dispositivo.

Abra o PowerShell como administrador. Sem elevação, vários contadores voltam vazios.

Passo 1: visão geral dos discos

Get-PhysicalDisk | Select-Object FriendlyName, MediaType, BusType, HealthStatus, OperationalStatus, @{n='GB';e={[math]::Round($_.Size/1GB)}}

A saída lista modelo, tipo de mídia (HDD ou SSD), barramento (SATA, NVMe, USB), capacidade em GB e dois campos de estado:

  • HealthStatus: Healthy, Warning ou Unhealthy. Qualquer coisa diferente de Healthy pede backup imediato.
  • OperationalStatus: OK é o esperado. Valores como Lost Communication ou Predictive Failure indicam problema real.

Como saber se meu SSD ou HD está falhando?

Rode Get-PhysicalDisk e confira o HealthStatus: se não for Healthy, faça backup agora. Depois olhe os contadores de erro e desgaste com Get-StorageReliabilityCounter.

O HealthStatus é um indicador grosseiro: o disco pode aparecer como Healthy e já ter sinais de desgaste. Por isso o próximo passo importa.

Passo 2: temperatura, desgaste e erros

Get-PhysicalDisk | Get-StorageReliabilityCounter |
  Select-Object DeviceId, Temperature, TemperatureMax, Wear, PowerOnHours, ReadErrorsTotal, WriteErrorsTotal

O que cada campo diz:

  • Temperature / TemperatureMax: temperatura atual e o pico registrado, em °C. SSD NVMe esquentando muito costuma ser falta de fluxo de ar ou dissipador ausente.
  • Wear: percentual de desgaste do SSD. Quanto maior, mais perto do fim da vida útil das células.
  • PowerOnHours: total de horas que o disco ficou ligado.
  • ReadErrorsTotal / WriteErrorsTotal: erros acumulados. Número que cresce entre uma checagem e outra é o sinal mais confiável de problema.

Um detalhe que pega muita gente: nem todo disco expõe todos os contadores. O próprio exemplo da documentação da Microsoft mostra o campo Wear em branco. Depende do firmware, do driver e do barramento — discos em caixas USB, por exemplo, muitas vezes não repassam esses dados. Campo vazio não significa disco saudável; significa que você não tem essa informação.

Passo 3: juntar tudo numa tabela só

Get-PhysicalDisk | ForEach-Object {
  $r = $_ | Get-StorageReliabilityCounter
  [pscustomobject]@{
    Disco       = $_.FriendlyName
    Tipo        = $_.MediaType
    Saude       = $_.HealthStatus
    TempC       = $r.Temperature
    Desgaste    = $r.Wear
    HorasLigado = $r.PowerOnHours
    ErrosLeitura = $r.ReadErrorsTotal
  }
} | Format-Table -AutoSize

Esse formato cabe numa tela e serve de relatório rápido pra mostrar ao cliente ou colar num chamado.

Passo 4: guardar um histórico e comparar

Um número isolado diz pouco. O que denuncia disco em fim de vida é a tendência. Salve a saída em CSV com a data:

Get-PhysicalDisk | ForEach-Object {
  $r = $_ | Get-StorageReliabilityCounter
  [pscustomobject]@{
    Data = Get-Date -Format 'yyyy-MM-dd'
    Disco = $_.FriendlyName
    Saude = $_.HealthStatus
    Desgaste = $r.Wear
    ErrosLeitura = $r.ReadErrorsTotal
  }
} | Export-Csv -Path "C:\Audit\discos.csv" -Append -NoTypeInformation -Encoding UTF8

A pasta C:\Audit precisa existir antes. Pra rodar isso toda semana sem lembrar, agende com o schtasks ou o Agendador de Tarefas — o passo a passo está no post sobre agendar tarefas no Windows pelo terminal. Se a coluna ErrosLeitura sobe de um CSV pro outro, o disco está degradando.

Cruzar com os logs do Windows

Quando o disco começa a falhar, o Windows registra eventos de erro de I/O no log de sistema. Dá pra puxar os mais recentes com o Get-WinEvent:

Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='disk'} -MaxEvents 20 -ErrorAction SilentlyContinue |
  Select-Object TimeCreated, Id, Message

Se aparecerem eventos repetidos junto com erros nos contadores, a combinação é forte. O post sobre investigar erros do Windows com Get-WinEvent explica como refinar esse filtro.

O que fazer se o disco estiver com problema

  1. Backup primeiro. Antes de qualquer diagnóstico adicional, copie o que importa. A regra de backup 3-2-1 vale aqui, e o Robocopy resolve a cópia sem programa extra.
  2. Evite estressar o disco. Desfragmentar ou rodar varreduras longas num disco instável pode acelerar a falha.
  3. Troque o disco. Se o HealthStatus já não é Healthy ou os erros crescem, a decisão racional é substituir. Aproveite o disco antigo só pra dados descartáveis, e apague com segurança se ele for descartado.

Vale lembrar o limite do método: esses contadores vêm do que o disco e o driver reportam. Ferramentas como o smartctl (smartmontools) leem atributos SMART brutos e mostram mais detalhe, mas pra uma checagem de rotina o PowerShell nativo já cobre o essencial.

Disco com saúde monitorada é disco que você troca com calma, não no desespero. Se você ainda não tem um backup automático rodando, comece por ele: o post sobre backup automático com Robocopy leva uns dez minutos pra configurar.

Comentários