Windows 11: jak sprawdzić stan dysku przez PowerShell?
System Windows, choć nie widać tego w interfejsie, na bieżąco zbiera i analizuje dane na temat kondycji dysków twardych. Komunikaty są wyświetlane tylko podczas poważnych błędów, ale da się wydobyć więcej danych, odpytując Dziennik Zdarzeń.
Format danych SMART, raportujący wewnętrzne informacje sprzętowe na temat dysku, nie jest, mimo nazwy, ustandaryzowany - na pewno nie do poziomu, pozwalającego na uniwersalne odpytywanie dysków po SMART. Narzędzia, jak CrystalDiskInfo i HWINFO64, stosują własne interpretacje do odczytu danych surowych SMART.
Windows z kolei stosuje własne metody pomiaru, na podstawie których wysnuwa przesłanki o nadchodzących awariach. Te są już wspólne dla każdego dysku (i systemu). Jest ich bardzo dużo i można się do nich dostać na różne, mocno odmienne od siebie sposoby.
Dalsza część artykułu pod materiałem wideo
SRC
Pierwszym źródłem informacji jest mechanizm Storage Reliability Counter (SRC), który wyświetli liczbę błędów dla każdego podanego obiektu Dysk. Niestety, odwołuje się on do dysków po ich wewnętrznym numerze w Menedżerze Dysków, co jest nieczytelne. Aby związać numer dysku z nazwą urządzenia, trzeba się nieco natrudzić:
Get-Disk | ? ProvisioningType -eq 'Fixed' | % { $fn = $_.FriendlyName ; $src = $_ | Get-StorageReliabilityCounter ; $ee = $src | Select ReadErrorsUncorrected ; $wr = $src | Select Wear ; $hh = New-Object -TypeName psobject -Property @{Name=$fn;Errors=$ee.ReadErrorsUncorrected;WearLevel=$wr.Wear} ; $hh } | Where-Object { ($_.Errors -ne "0" -and $null -ne $_.Errors) -or $_.WearLevel -ne "0" }
Get-PhysicalDisk
Powyższe polecenie wyświetli wszystkie dyski stałe, których liczba błędów jest znana i wyższa od zera, lub których poziom zużycia jest wyższy od zera. Najlepiej, gdy jest pusta. Ale to niejedyny sposób na poznanie informacji o dyskach. Aby poznać wnioski, jakie Windows wyciąga ze stanu dysków, można użyć cmdleta Get-PhysicalDisk z modułu Storage. Następujące polecenie wypisze dyski, na temat których Windows twierdzi, że wkrótce ulegną awarii:
Get-PhysicalDisk | Where-Object { $_.HealthStatus -ne "Healthy" -or $_.OperationalStatus -ne "OK" } | Format-Table FriendlyName, HealthStatus, OperationalStatus
Moduł Storage zawiera także narzędzie pozwalające sprawdzić, czy Windows dalej uznaje dany dysk za rzeczywisty potencjalny punkt zapisu przez podsystem Storage Node. Jest to jednak mylące źródło informacji, bowiem dysk może już od dłuższego czasu sprawiać problemy, a wciąż być raportowany jako zdrowy przez Storage Node. Polecenie raportujące tę informację to:
Get-DiskStorageNodeView
Get-WinEvent
Możliwe jest także odpytanie Dziennika o indywidualne zdarzenia-problemy z dyskiem, przeszukując dostawców "disk" oraz "DiskDiagnostic". Poniższe polecenia odnajdą wszystkie ostrzeżenia i błędy na temat pracy dysków, a następnie skoreluje wszystkie pojedyncze błędy z nazwami dysków, których dotyczą, bez duplikatów:
Get-WinEvent -FilterHashtable @{ProviderName="disk"} | ? Level -lt 3
Get-WinEvent -FilterHashtable @{ProviderName="Microsoft-Windows-DiskDiagnostic"} | ? Level -lt 3
Get-WinEvent -FilterHashtable @{ProviderName="disk"} | ? Level -lt 3 | % { $_.Properties[0] } | Sort-Object -Unique | % {$dn = $_.Value.ToString().Split('\')[2].Replace("Harddisk","") ; Get-PhysicalDisk -DeviceNumber $dn }
Pozwoli to stworzyć listę wszystkich dysków, które kiedykolwiek sprawiały problem, nawet tych, których stan jest właśnie zgłaszany jako "zdrowy". Taki sposób przeszukiwania informacji pozwoli zidentyfikować, czy problem występuje z dyskami, czy może z kontrolerem dyskowym (jeżeli wpisy są nieregularne i dotyczą zdrowych dysków). Przeszukiwanie Dziennika Zdarzeń jest cenną wiedzą uzupełniającą względem punktowych sprawozdań z programów raportujących, jak CrystalDiskInfo.
Kamil J. Dudek, współpracownik redakcji dobreprogramy.pl