Cómo ver la salud del SSD y el HDD con PowerShell (Get-PhysicalDisk)

Cómo ver la salud del SSD y el HDD con PowerShell (Get-PhysicalDisk)

El disco casi nunca avisa antes de morir. Un día Windows tarda más en arrancar, al siguiente aparece un error de lectura y a la semana el SSD desaparece de la BIOS. La buena noticia: Windows ya guarda datos de salud de cada disco y puedes leerlos en segundos con dos cmdlets nativos de PowerShell, sin instalar ningún programa.

Qué son Get-PhysicalDisk y Get-StorageReliabilityCounter

Ambos forman parte del módulo Storage, que viene incluido en Windows 10, Windows 11 y Windows Server. Get-PhysicalDisk lista los discos físicos y el estado general de cada uno. Get-StorageReliabilityCounter va más a fondo y, según la documentación de Microsoft, devuelve contadores de fiabilidad como temperatura, errores, desgaste y tiempo de uso del dispositivo.

Abre PowerShell como administrador. Sin elevación, varios contadores regresan vacíos.

Paso 1: visión general de los discos

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

La salida muestra modelo, tipo de medio (HDD o SSD), bus (SATA, NVMe, USB), capacidad en GB y dos campos de estado:

  • HealthStatus: Healthy, Warning o Unhealthy. Cualquier valor distinto de Healthy pide una copia de seguridad inmediata.
  • OperationalStatus: lo esperado es OK. Valores como Lost Communication o Predictive Failure indican un problema real.

¿Cómo saber si mi SSD o HDD está fallando?

Ejecuta Get-PhysicalDisk y revisa el HealthStatus: si no es Healthy, haz una copia de seguridad ahora. Después mira los contadores de errores y desgaste con Get-StorageReliabilityCounter.

El HealthStatus es un indicador grueso: el disco puede aparecer como Healthy y ya mostrar señales de desgaste. Por eso el siguiente paso importa.

Paso 2: temperatura, desgaste y errores

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

Qué dice cada campo:

  • Temperature / TemperatureMax: temperatura actual y el pico registrado, en °C. Un SSD NVMe que se calienta mucho suele indicar poco flujo de aire o falta de disipador.
  • Wear: porcentaje de desgaste del SSD. Cuanto mayor, más cerca está del final de la vida útil de las celdas.
  • PowerOnHours: total de horas que el disco ha estado encendido.
  • ReadErrorsTotal / WriteErrorsTotal: errores acumulados. Un número que crece entre una revisión y otra es la señal más fiable de problema.

Un detalle que sorprende a muchos: no todos los discos exponen todos los contadores. El propio ejemplo de la documentación de Microsoft muestra el campo Wear en blanco. Depende del firmware, del controlador y del bus; los discos en carcasas USB, por ejemplo, a menudo no transmiten estos datos. Un campo vacío no significa disco sano; significa que no tienes esa información.

Paso 3: todo en una sola tabla

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

Este formato cabe en una pantalla y sirve de informe rápido para mostrar a un cliente o pegar en un ticket.

Paso 4: guardar un historial y comparar

Un número aislado dice poco. Lo que delata a un disco al final de su vida es la tendencia. Guarda la salida en CSV con la fecha:

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

La carpeta C:\Audit debe existir antes. Para ejecutarlo cada semana sin acordarte, prográmalo con schtasks o el Programador de tareas; el paso a paso está en el post sobre programar tareas en Windows desde la terminal. Si la columna ErrosLeitura sube de un CSV al siguiente, el disco se está degradando.

Cruzar con los registros de Windows

Cuando un disco empieza a fallar, Windows registra eventos de error de E/S en el registro del sistema. Puedes sacar los más recientes con Get-WinEvent:

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

Si aparecen eventos repetidos junto con errores en los contadores, la combinación es fuerte. El post sobre investigar errores de Windows con Get-WinEvent explica cómo afinar este filtro.

Qué hacer si el disco tiene problemas

  1. Primero la copia de seguridad. Antes de cualquier diagnóstico adicional, copia lo importante. La regla de copias de seguridad 3-2-1 aplica aquí, y Robocopy resuelve la copia sin programas extra.
  2. No estreses el disco. Desfragmentar o ejecutar análisis largos en un disco inestable puede acelerar el fallo.
  3. Cambia el disco. Si el HealthStatus ya no es Healthy o los errores siguen creciendo, lo racional es reemplazarlo. Aprovecha el disco viejo solo para datos desechables y bórralo de forma segura si lo vas a desechar.

Conviene recordar el límite del método: estos contadores vienen de lo que el disco y el controlador reportan. Herramientas como smartctl (smartmontools) leen atributos SMART en bruto y muestran más detalle, pero para una revisión de rutina el PowerShell nativo cubre lo esencial.

Un disco con la salud monitorizada es un disco que cambias con calma, no con prisa. Si aún no tienes una copia de seguridad automática, empieza por ahí: el post sobre copia de seguridad automática con Robocopy tarda unos diez minutos en configurarse.

Comentarios