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,WarningoUnhealthy. Cualquier valor distinto deHealthypide una copia de seguridad inmediata. - OperationalStatus: lo esperado es
OK. Valores comoLost CommunicationoPredictive Failureindican 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, WriteErrorsTotalQué 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 -AutoSizeEste 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 UTF8La 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, MessageSi 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
- 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.
- No estreses el disco. Desfragmentar o ejecutar análisis largos en un disco inestable puede acelerar el fallo.
- Cambia el disco. Si el
HealthStatusya no esHealthyo 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