Sigue leyendo para descubrir cómo ver los discos que tienen errores mediante un script de PowerShell que nos permita ver en un momento cual es su estado, o para poder automatizar una tarea que monitorice el estado cada “x” tiempo.
Como todo aquel administrador de sistemas que peine canas ya sabe, tener claro el estado de los discos de nuestros servidores es algo crucial, porque un error catastrófico en los discos puede hacer que caigan sobre nosotros las siete plagas de Egipto.
No hay situación más estresante que tener una pérdida de storage, y lo digo por experiencia… Bueno, sí, hay algo peor, que es sufrir la pérdida de almacenamiento y que se complemente maravillosamente con una copia de seguridad inexistente o mal realizada.
Por eso debemos tener en mente la necesidad de chequear el estado de los discos de nuestros servidores (y estaciones de trabajo más delicadas) de vez en cuando.
Consultando el estado de un disco mediante script de PowerShell:
Podemos usar el comando “get-physicaldisk” para comprobar el estado de los discos conectados a nuestro sistema.
Si lanzamos el comando sin modificadores:
# get-physicaldisk
Se muestra el estado de los discos conectados. Si miramos los estados, podemos ver que, en principio, dado que esta máquina no tiene problemas, muestra los discos como “Healty” (o sea sanos o sin errores).
Existen varios estados para los discos:
- Healthy: Sanos o sin errores. Se mostrarán en los casos en los que los discos no tengan ningún tipo de error.
- Failure: Fallo o con errores. Se muestra cuando el sistema chequea algún tipo de fallo, que puede ser físico o lógico.
Viendo estos estados, podríamos decir que tenemos la posibilidad de hacer la búsqueda de discos en función de su estado.
Dado que al devolver los estados de los discos nos muestra una de esas cadenas, podemos filtrar para encontrar lo que nos interese.
Para el filtrado podemos usar las comparaciones:
- eq: Equal, o igual, hará match cuando la cadena sea idéntica a la comparada.
- ne: No equal, o distintas, se mostrará la cadena que no concuerde con lo comparado.
Haciendo uso de esto, podemos lanzar el siguiente comando que nos permite ver solo los discos que están “sanos”:
# get-physicaldisk | Where-Object { $_.HealthStatus -eq «Healthy» }
O este otro, que nos muestra los que tienen algún error, o sea, no están “sanos”:
# get-physicaldisk | Where-Object { $_.HealthStatus -ne «Healthy» }
Aunque también lo podríamos hacer mediante la consulta en relación con los discos con fallos, mediante la búsqueda de “Failure”, de la misma manera que antes.
# get-physicaldisk | Where-Object { $_.HealthStatus -eq «Failure» }
O este otro, que nos muestra los que no tienen errores, o sea, que están “sanos”:
# get-physicaldisk | Where-Object { $_.HealthStatus -ne «Failure» }
Construyendo nuestro script de PowerShell para comprobar la salud de los discos:
Ahora que ya sabemos hacer consultas del estado de los discos, lo natural sería hacer la consulta híbrida, mediante la mezcla de ambos, o mediante el uso de estructuras como “if/else” o “try/catch”, y es justo esto lo que debemos explorar a continuación.
En este caso, mediante una estructura de “if/else” en la cual pasamos una variable “$Disk” que busca ver si los discos están sanos (-eq “Healty”) o no y, si están sanos, muestra un mensaje por pantalla y si no lo están manda otro mensaje, mostrando en ambos casos un listado completo de los discos para que el que lanza el comando pueda revisar donde está el problema, si es que lo hay.
$Disks = get-physicaldisk | Where-Object { $_.HealthStatus -eq «Healthy» }
if ($disks) {
write-output «Comprobacion de Discos: Los discos estan sanos»
write-output $disks
}
else {
write-output «Comprobacion de Discos: Se han detectado problemas en los discos»
write-output «Por favor compruebe su estado»
write-output $disks
}
Con esto deberíamos tener un mínimo con lo que empezar a trabajar.
Conclusiones
Como puedes ver, ver los discos que tienen errores mediante un script de PowerShell nos permite tener algo más de control sobre nuestra infraestructura, teniendo claro si hay algún problema en nuestros discos físicos. Usando un par de comandos bien encadenados se puede realizar la tarea de manera semiautomática, pudiendo automatizarla mediante su programación, para monitorizar el estado y que nos avise si hay problemas.
La ejecución es sencilla y debería estar soportada por todos los sistemas Microsoft Windows actuales, ya que son cmdlets básicos de PowerShell, pero si encontraras algún problema en su ejecución puedes contactar con nosotros para que intentemos echarte una mano.
Si quieres aprender otros scripts y trucos de PowerShell puedes echar un ojo a nuestro blog.
¡Gracias por leernos!