Zabbix:Template Windows SMART-Werte Festplatten
Aus znilwiki
Changelog:
- 22.11.2025 erste Version
Vorwort
Durch Zufall hatte ich an meinem Heim-PC bemerkt das eine der 4 Festplatten kurz vorm Exitus war.
Dieser Artikel ist nun entstanden damit ich es auch später noch einmal wieder hinbekomme den Status der Festplatten zu überwachen.
Im Artikel arbeite ich mich an die Lösung heran, deswegen werden hier auch alle Einzelschritte erklärt und es gibt nicht nur das fertige Template.
Mit den Einzelschritten könnt Ihr auch prüfen was bei euch so möglich ist, bevor Ihr das Template einsetzt.
Ausgangslage
In meinem PC sind aktuell 9 Festplatten, davon ist einer ein USB-Stick (F:) und zwei sind USB-Laufwerke (Q: und U:):
Laufwerk Q: geht es nicht mehr so gut: (2x Screenshot wegen Deutsch und Englisch)
Und in der Tat hat Q: einige beschädigte Blöcke:
Bis auf eine Datei konnte ich noch alles lesen und wegkopieren (ja, ich habe natürlich auch noch ein Backup), er konnte das wohl bisher korrigieren.
Aber trotzdem würde ich das in Zukunft gerne eher bemerken.
Was geht per PowerShell?
Zuerst habe ich getestet was mit Windows Boardmitteln geht. Werkzeuge wie CrystalDiskInfo oder SmartMonTools greifen ja letztendlich auch nur auf Werte zu die im Betriebssystem irgendwo bereit stehen.
Für die nachfolgenden Befehle habe ich eine PowerShell-Konsole als Administrator geöffnet.
---
Get-Disk
liefert eine Liste aller Installierten Festplatten, NVMe, SSD, HDD aber auch USB-Sticks:
Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition
Style
------ ------------- ------------- ------------ ----------------- ---------- ----------
1 ST4000DM005-2DP166 ZDH1MEQW Healthy Online 3.64 TB GPT
2 ST6000VN006-2ZM186 ZVX08NJ7 Healthy Online 5.46 TB GPT
4 WD Blue SN570 1TB E823_8FA6_BF53_0001_001B_444A... Healthy Online 931.51 GB GPT
5 Realtek RTL9210B-CG 0000000000000000 Healthy Online 931.51 GB GPT
3 SPCC Solid State Disk B7A3078C0C5300219683 Healthy Online 476.94 GB MBR
0 WDC WD40EZRX-00SPEB0 WD-WCC4E1375844 Healthy Online 3.64 TB GPT
6 WDC WD40 EFRX-68N32N0 RANDOM__A1E3A88F9D44 Healthy Online 3.64 TB GPT
7 WDC WD60 EZAZ-00SF3B0 RANDOM__C6D5CF0726F1 Healthy Online 5.46 TB GPT
8 Generic MassStorageClass 00000000CY06 Healthy Online 29.12 GB MBR
Da gibt es dann auch schon einen HealthStatus, der aber auch für Disk 7, das ist Q:, auf Healthy steht, obwohl CrystalDiskInfo (und die Ereignisanzeige) das anders sieht.
Schauen wir uns mal die vollen Details von Disk 7 an:
Get-Disk 7 | Select-Object -Property "*"
Ausgabe:
DiskNumber : 7
PartitionStyle : GPT
ProvisioningType : Fixed
OperationalStatus : Online
HealthStatus : Healthy
BusType : USB
UniqueIdFormat : Vendor Id
OfflineReason :
ObjectId : {1}\\DESKTOP-91MQDI1\root/Microsoft/Windows/Storage/Providers_v2\WSP_Disk.ObjectId="{a8f83b40-cb1e-11ec-886a-806e6f6e6963}:DI:\\?\scsi#disk&ven_wdc_wd60&prod_ezaz-00sf3b0#a&15d43e6a&0&000001#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}"
PassThroughClass :
PassThroughIds :
PassThroughNamespace :
PassThroughServer :
UniqueId : WDC WD60EZAZ-00SF3B0 RANDOM__100B3B367A300001
AdapterSerialNumber :
AllocatedSize : 6001175126016
BootFromDisk : False
FirmwareVersion : 0009
FriendlyName : WDC WD60 EZAZ-00SF3B0
Guid : {31d05481-f24d-42cf-81e4-e2c1b65601ac}
IsBoot : False
IsClustered : False
IsHighlyAvailable : False
IsOffline : False
IsReadOnly : False
IsScaleOut : False
IsSystem : False
LargestFreeExtent : 0
Location : Integrated : Bus 0 : Device 0 : Function 4 : Adapter 3 : Port 0
LogicalSectorSize : 512
Manufacturer : WDC WD60
Model : EZAZ-00SF3B0
Number : 7
NumberOfPartitions : 1
Path : \\?\scsi#disk&ven_wdc_wd60&prod_ezaz-00sf3b0#a&15d43e6a&0&000001#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
PhysicalSectorSize : 512
SerialNumber : RANDOM__C6D5CF0726F1
Signature :
Size : 6001175126016
PSComputerName :
CimClass : ROOT/Microsoft/Windows/Storage:MSFT_Disk
CimInstanceProperties : {ObjectId, PassThroughClass, PassThroughIds, PassThroughNamespace...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
Tja, außer dem HealthStatus : Healthy' ist nicht viel zusehen.
Für mehr Daten gibt es den Befehl
Get-StorageReliabilityCounter
den wir am besten so aufrufen (für alle Festplatten):
Get-Disk | Get-StorageReliabilityCounter
Ausgabe:
Number Temperature ReadErrorsUncorrected Wear PowerOnHours ------ ----------- --------------------- ---- ------------ 0 0 0 85404 3 0 39895 8 0 4 0 5 0 1 0 0 62432 2 0 0 2 7 170 0 33738 6 0 0 2537
Unsortiert, aber schon Besser, hier sind bei Disk 7 eindeutig Fehler zu sehen.
Disk 4, 5 und 8 haben keine PowerOnHours, 4 ist meine Boot-NVMe, 5 eine NVMe in einem externen USB-Gehäuse und 8 ist der USB-Stick.
Holen wir uns mal alle Details von Laufwerk 7:
Get-Disk | Get-StorageReliabilityCounter | Select-Object -Property "*"
Ausgabe:
ObjectId : {1}\\DESKTOP-91MQDI1\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StorageReliabilityCounter.ObjectId="{a8f83b40-cb1e-11ec-886a-806e6f6e6963}:RC:\\?\scsi#disk&ven_wdc_wd60&prod_ezaz-00sf3b0#a&15d43e6a&0&000001#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}"
PassThroughClass :
PassThroughIds :
PassThroughNamespace :
PassThroughServer :
UniqueId : {a8f83b40-cb1e-11ec-886a-806e6f6e6963}:RC:\\?\scsi#disk&ven_wdc_wd60&prod_ezaz-00sf3b0#a&15d43e6a&0&000001#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
DeviceId : 7
FlushLatencyMax : 0
LoadUnloadCycleCount : 63361
LoadUnloadCycleCountMax :
ManufactureDate :
PowerOnHours : 33738
ReadErrorsCorrected : 0
ReadErrorsTotal : 170
ReadErrorsUncorrected : 170
ReadLatencyMax : 240
StartStopCycleCount : 18786
StartStopCycleCountMax :
Temperature : 34
TemperatureMax : 0
Wear : 0
WriteErrorsCorrected :
WriteErrorsTotal :
WriteErrorsUncorrected :
WriteLatencyMax : 295
PSComputerName :
CimClass : ROOT/Microsoft/Windows/Storage:MSFT_StorageReliabilityCounter
CimInstanceProperties : {ObjectId, PassThroughClass, PassThroughIds, PassThroughNamespace...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
Da hätten wir Schreib- und Lesefehler, sowohl Korrigierbare als nicht Korrigierbare, die Betriebsstunden und die Temperatur - als von mir gewählte, interessante Werte.
Das noch nicht der vollständige Umfang den z.B. CrystalDiskInfo bietet, aber doch schon mal gar nicht so schlecht.
Was gibt es über WMI?
Jetzt kommen zwar wieder PowerShell-Befehle, dieses nutzen wir aber um das WMI abzufragen. Das ginge grundsätzlich auch per wmic.exe, die ist aber seit einiger Zeit nicht mehr ab Werk installiert (Windows 11, Windows Server 2025), also nehmen wir gleich PowerShell:
Get-WmiObject -Class win32_diskdrive -Property STATUS
Ausgabe:
Partitions : 1 DeviceID : \\.\PHYSICALDRIVE3 Model : SPCC Solid State Disk Size : 512105932800 Caption : SPCC Solid State Disk
Partitions : 1 DeviceID : \\.\PHYSICALDRIVE8 Model : Generic MassStorageClass USB Device Size : 31264289280 Caption : Generic MassStorageClass USB Device ... ...
Die Festplatten 0 bis 8 finden sich auch hier wieder, als PHYSICALDRIVE0 bis PHYSICALDRIVE8
Schauen wir wieder bei Festplatte 7 was alles an Werten geht:
Get-WmiObject -Class win32_diskdrive -Filter "DeviceID like '%PHYSICALDRIVE7'"
gibt uns nur unsere einzelne Festplatte (%7 würde auch gehen wenn man nicht mehr als 9 Festplatten hat):
Partitions : 1 DeviceID : \\.\PHYSICALDRIVE7 Model : WDC WD60 EZAZ-00SF3B0 SCSI Disk Device Size : 6001172513280 Caption : WDC WD60 EZAZ-00SF3B0 SCSI Disk Device
Und jetzt einmal alle Eigenschaften:
Get-WmiObject -Class win32_diskdrive -Filter "DeviceID like '%7'" | Select-Object -Property "*"
Ausgabe:
PSComputerName : DESKTOP-91MQDI1
ConfigManagerErrorCode : 0
LastErrorCode :
NeedsCleaning :
Status : OK
DeviceID : \\.\PHYSICALDRIVE7
StatusInfo :
Partitions : 1
BytesPerSector : 512
ConfigManagerUserConfig : False
DefaultBlockSize :
Index : 7
InstallDate :
InterfaceType : SCSI
MaxBlockSize :
MaxMediaSize :
MinBlockSize :
NumberOfMediaSupported :
SectorsPerTrack : 63
Size : 6001172513280
TotalCylinders : 729601
TotalHeads : 255
TotalSectors : 11721040065
TotalTracks : 186048255
TracksPerCylinder : 255
__GENUS : 2
__CLASS : Win32_DiskDrive
__SUPERCLASS : CIM_DiskDrive
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE7"
__PROPERTY_COUNT : 51
__DERIVATION : {CIM_DiskDrive, CIM_MediaAccessDevice, CIM_LogicalDevice, CIM_LogicalElement...}
__SERVER : DESKTOP-91MQDI1
__NAMESPACE : root\cimv2
__PATH : \\DESKTOP-91MQDI1\root\cimv2:Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE7"
Availability :
Capabilities : {3, 4}
CapabilityDescriptions : {Random Access, Supports Writing}
Caption : WDC WD60 EZAZ-00SF3B0 SCSI Disk Device
CompressionMethod :
CreationClassName : Win32_DiskDrive
Description : Laufwerk
ErrorCleared :
ErrorDescription :
ErrorMethodology :
FirmwareRevision : 0009
Manufacturer : (Standardlaufwerke)
MediaLoaded : True
MediaType : External hard disk media
Model : WDC WD60 EZAZ-00SF3B0 SCSI Disk Device
Name : \\.\PHYSICALDRIVE7
PNPDeviceID : SCSI\DISK&VEN_WDC_WD60&PROD_EZAZ-00SF3B0\A&15D43E6A&0&000001
PowerManagementCapabilities :
PowerManagementSupported :
SCSIBus : 0
SCSILogicalUnit : 1
SCSIPort : 3
SCSITargetId : 0
SerialNumber : RANDOM__C6D5CF0726F1
Signature :
SystemCreationClassName : Win32_ComputerSystem
SystemName : DESKTOP-91MQDI1
Scope : System.Management.ManagementScope
Path : \\DESKTOP-91MQDI1\root\cimv2:Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE7"
Options : System.Management.ObjectGetOptions
ClassPath : \\DESKTOP-91MQDI1\root\cimv2:Win32_DiskDrive
Properties : {Availability, BytesPerSector, Capabilities, CapabilityDescriptions...}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers : {dynamic, Locale, provider, UUID}
Site :
Container :
Das sind zwar viele Werte - aber scheinbar nichts brauchbares.
Ok, nächster Ansatz, wir fragen den Treiber Treiber nach Fehlern:
Get-CimInstance -namespace root\wmi -class MSStorageDriver_FailurePredictStatus
Ausgabe:
Active : True InstanceName : SCSI\Disk&Ven_WDC&Prod_WD40EZRX-00SPEB0\5&edbf5d4&0&000000_0 PredictFailure : False Reason : 0 PSComputerName : Active : True InstanceName : SCSI\Disk&Ven_&Prod_ST4000DM005-2DP1\5&edbf5d4&0&010000_0 PredictFailure : False Reason : 0 PSComputerName : Active : True InstanceName : SCSI\Disk&Ven_&Prod_ST6000VN006-2ZM1\5&edbf5d4&0&040000_0 PredictFailure : False Reason : 0 PSComputerName : Active : True InstanceName : SCSI\Disk&Ven_SPCC&Prod_Solid_State_Disk\5&edbf5d4&0&050000_0 PredictFailure : False Reason : 0 PSComputerName :
Tja, der letzte Fehler war vor einem Reboot des Rechners, hier ist gerade auch nicht viel zu holen.
Ich schweife mal ab und schaue ob ich etwas schönes finde wo ich den Laufwerken 0 bis 8 den passenden Laufwerksbuchstaben zuordnen kann:
Get-Disk 7 | Get-Partition | Select-Object -Property DiskNumber,DriveLetter
Ausgabe:
DiskNumber DriveLetter
---------- -----------
7 Q
Das ist beim C: Laufwerk natürlich nicht so einfach da es dort mehr als eine Partition gibt.
Also folgender Aufruf:
Get-Disk 4 | Get-Partition | Where-Object -Property DriveLetter | Select-Object -Property DiskNumber,DriveLetter,Size
Ausgabe:
DiskNumber : 4 DriveLetter : C Size : 998227241472
Der Filter listet nur Objekte auf bei denen auch ein DriveLetter vergeben ist. Das ist dann wieder Blöd wenn es 2 Partitionen mit Laufwerksbuchstaben auf einem Laufwerk gibt - aber so etwas habe ich schon seit Jahren nicht mehr gesehen, mit dem Fehler kann ich also leben.

