Problembehandlung bei Updates der Laufwerkfirmware
Windows 10, Version 1703 und höher, verfügt über eine Funktion zum Aktualisieren der Firmware von HDDs und SSDs, die mit dem Firmware Upgradeable AQ (Additional Qualifier) per PowerShell zertifiziert wurden.
Weitere Informationen zu diesem Feature finden Sie hier:
- Aktualisieren der Laufwerkfirmware für in Windows Server 2016
- Aktualisieren der Laufwerkfirmware ohne Ausfallzeit in „Direkte Speicherplätze“
Firmwareupdates können aus verschiedenen Gründen fehlschlagen. Dieser Artikel soll Ihnen bei der erweiterten Problembehandlung helfen.
Hinweis
Die Informationen in diesem Artikel reichen je nach dem Problem möglicherweise nicht aus, um alle möglichen Fehlerfälle vollständig zu debuggen.
Häufige Probleme
Im Hinblick auf die Architektur basiert diese neue Funktion auf APIs, die in dem Windows-Speicherstapel implementiert sind, der von PowerShell aufgerufen wird. Der Speicherstapel nutzt Treiber und Hardware, um branchenübliche Befehle richtig zu implementieren. Dies führt zu mehreren Punkten, an denen Fehler auftreten können. Am häufigsten werden folgende Probleme beobachtet:
- Ein bestimmtes Laufwerk implementiert die branchenüblichen Befehle nicht richtig (AQ nicht vorhanden).
- Die zum Ausführen des Updates erforderlichen APIs werden nicht implementiert oder sind fehlerhaft (wenn Treiber von Drittanbietern verwendet werden).
- Die APIs funktionieren, aber es gibt ein Problem bei der Firmware selbst (z. B. ungültiges/beschädigtes Image).
Die folgenden Abschnitte enthalten Informationen zur Problembehandlung – abhängig davon, ob Treiber von Microsoft oder von Drittanbietern verwendet werden.
Identifizieren ungeeigneter Hardware
Die schnellste Möglichkeit zur Ermittlung, ob ein Gerät den richtigen Befehlssatz unterstützt, besteht darin, PowerShell zu starten und einen Datenträger, der das Objekt „PhysicalDisk“ darstellt, an das Cmdlet „Get-StorageFirmwareInfo“ zu übergeben. Hier sehen Sie ein Beispiel:
Get-PhysicalDisk -SerialNumber 15140F55976D | Get-StorageFirmwareInformation
Und hier ist eine Beispielausgabe:
PhysicalDisk : MSFT_PhysicalDisk (ObjectId = "{1}\\TOKLIMA-DL380\root/Microsoft/Windo...)
SupportsUpdate : True
NumberOfSlots : 1
ActiveSlotNumber : 0
SlotNumber : {0}
IsSlotWritable : {True}
FirmwareVersionInSlot : {0013}
Im Feld „SupportsUpdate“ wird zumindest für SATA- und NVMe-Geräte angegeben, ob die integrierte PowerShell-Funktionalität zum Aktualisieren der Firmware verwendet werden kann.
Im Feld „SupportsUpdate“ wird für mit SAS verbundene Geräte immer „True“ angezeigt, da das Abfragen der entsprechenden Befehlsunterstützung mit branchenüblichen Befehlen nicht möglich ist.
Zur Überprüfung, ob ein SAS-Gerät den erforderlichen Befehlssatz unterstützt, gibt es zwei Optionen:
- Testen des SAS-Geräts über das Cmdlet „Update-StorageFirmware“ mit einem passenden Firmwareimage oder
- Ermitteln anhand von Windows Server Catalog, welche SAS-Geräte die Prüfung durch den FW Update AQ bestanden haben (https://www.windowsservercatalog.com/)
Lösungsoptionen
Wenn ein bestimmtes Gerät, das Sie gerade testen, den richtigen Befehlssatz nicht unterstützt, fragen Sie entweder bei Ihrem Anbieter an, ob eine aktualisierte Firmware mit dem erforderlichen Befehlssatz zur Verfügung steht, oder identifizieren Sie anhand von Windows Server Catalog Geräte, die den geeigneten Befehlssatz implementieren.
Problembehandlung bei Drittanbietertreibern (SAS)
Die Softwarekomponenten, die mit Hardware am engsten interagieren, sind Miniporttreiber im Windows-Speicherstapel. Für einige Speicherprotokolle, z. B. SATA und NVMe, stellt Microsoft native Windows-Treiber bereit. Diese Treiber unterstützen zusätzliche Debuginformationen. Drittanbieter von Hardware und Software können jedoch benutzerdefinierte Miniporttreiber für ihre Geräte schreiben. In diesen Fällen kann die Unterstützung für Debuginformationen variieren.
Informationen dazu, was beim Firmwaredownload passiert ist, und zum Aktivieren von APIs, die – unabhängig vom Miniporttreiber – über den Speicherstapel gesendet werden, finden Sie im folgenden Ereignisprotokollkanal:
Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > StorDiag > Microsoft-Windows-Storage-ClassPnP/Operational
Dieser Kanal zeichnet Informationen zu den Windows-APIs, die an die Miniporttreiber gesendet wurden, und deren Antworten auf. Die folgende Fehlerbedingung tritt beispielsweise beim Versuch auf, ein Firmwareimage auf ein SATA-Gerät herunterzuladen, das über eine SAS HBA-Einheit angeschlossen ist, die die erforderliche Übersetzung von SAS in SATA nicht richtig implementiert:
Get-PhysicalDisk -SerialNumber 44GS103UT5EW | Update-StorageFirmware -ImagePath C:\Firmware\J3E160@3.enc -SlotNumber 0
Dies ist ein Beispiel für die Ausgabe:
Update-StorageFirmware : Failed
Extended information:
A warning or error has been encountered during storage firmware update.
Incorrect function.
Activity ID: {1224482b-2315-4a38-81eb-27bb7de19c00}
At line:1 char:47
+ ... S103UT5EW | Update-StorageFirmware -ImagePath C:\Firmware\J3E160@3.en ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Update-StorageFirmware], CimException
+ FullyQualifiedErrorId : StorageWMI 4,Microsoft.Management.Infrastructure.CimCmdlets.InvokeCimMethodCommand,Update-StorageFirmware
PowerShell löst einen Fehler aus und hat die Information empfangen, dass die aufgerufene Funktion (d. h. die Kernel-API) fehlerhaft war. Ein Fehler könnte bedeuten, dass entweder die API durch den SAS-Miniporttreiber eines Drittanbieters nicht implementiert wurde (was hier zutrifft) oder dass bei der API aus einem anderen Grund ein Fehler aufgetreten ist, z. B. aufgrund einer Fehlausrichtung von Downloadsegmenten.
EventData
DeviceGUID {132EDB55-6BAC-A3A0-C2D5-203C7551D700}
DeviceNumber 1
Vendor ATA
Model TOSHIBA THNSNJ12
FirmwareVersion 6101
SerialNumber 44GS103UT5EW
DownLevelIrpStatus 0xc0000185
SrbStatus 132
ScsiStatus 2
SenseKey 5
AdditionalSenseCode 36
AdditionalSenseCodeQualifier 0
CdbByteCount 10
CdbBytes 3B0E0000000001000000
NumberOfRetriesDone 0
Das ETW-Ereignis 507 aus dem Kanal zeigt, dass eine SCSI-SRB-Anforderung fehlgeschlagen ist, und es stellt die zusätzlichen Informationen bereit, dass SenseKey „5“ (Ungültige Anforderung) und die AdditionalSense-Information „36“ (Ungültiges Feld in CDB) war.
Hinweis
Diese Informationen werden direkt vom betreffenden Miniport bereitgestellt, und die Genauigkeit der Informationen ist abhängig von der Implementierung und dem technischen Stand des Miniporttreibers.
Es ist möglich, dass verschiedene Fehlerbedingungen dieselben Fehlercodes ausgeben, wenn der Miniporttreiber dazwischen nicht unterscheidet. Beispielsweise kann der Versuch, ein ungültiges Firmwareimage über eine SAS HBA-Einheit auf ein SATA-Gerät herunterzuladen (bei dem das Gerät voraussichtlich ausfällt), zu denselben Fehlercodes führen.
In Fällen, in denen Protokolle gemischt sind und Übersetzungen durchgeführt werden (also bei SATA hinter SAS), ist es am besten, das direkt mit einem SATA-Controller verbundene SATA-Gerät zu testen. So kann ausgeschlossen werden, dass dies ein potenzielles Problem ist.
Lösungsoptionen
Wenn beim Treiber des Drittanbieters ermittelt wird, dass die erforderlichen APIs oder Übersetzungen nicht implementiert werden, kann entweder zu den von Microsoft bereitgestellten Alternativen für SATA (StorAHCI.sys) und NVMe (StorNVMe.sys) gewechselt werden, oder Sie können beim OEM- oder HBA-Anbieter des SAS-Treibers nachfragen, ob es eine neuere Version mit der richtigen Unterstützung gibt.
Weitere Problembehandlung bei Microsoft-Treibern (SATA/NVMe)
Wenn native Windows-Treiber, z. B. StorAHCI.sys
oder StorNVMe.sys
, für den Betrieb von Speichergeräten verwendet werden, können zusätzliche Informationen zu möglichen Fehlerfällen während Firmwareupdatevorgängen abgerufen werden.
Über den Kanal „ClassPnP Operational“ hinaus protokollieren StorAHCI und StorNVMe die protokollspezifischen Rückgabecodes des Geräts im folgenden ETW-Kanal:
Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > StorDiag > Microsoft-Windows-Storage-StorPort/Diagnose
Die Diagnoseprotokolle werden nicht standardmäßig angezeigt und können aktiviert/angezeigt werden, indem Sie in EventViewer „Ansicht“ und dann im Dropdownmenü die Option „Analyse- und Debugprotokolle anzeigen“ auswählen.
Wenn Sie diese erweiterten Protokolleinträge sammeln möchten, aktivieren Sie das Protokoll, reproduzieren Sie den Fehler beim Firmwareupdate, und speichern Sie das Diagnoseprotokoll.
Hier ist ein Beispiel für ein Firmwareupdate auf einem SATA-Gerät, bei dem ein Fehler auftritt, weil das herunterzuladende Image ungültig war (Ereignis-ID: 258):
EventData
MiniportName storahci
MiniportEventId 19
MiniportEventDescription Firmware Activate Completion
PortNumber 0
Bus 2
Target 0
LUN 0
Irp 0xffff8c84cd45aca0
Srb 0xffffab0024030bc0
Parameter1Name SrbStatus
Parameter1Value 130
Parameter2Name ReturnCode
Parameter2Value 0
Parameter3Name FeaturesReg
Parameter3Value 15
Parameter4Name SectorCountReg
Parameter4Value 0
Parameter5Name DriveHeadReg
Parameter5Value 160
Parameter6Name CommandReg
Parameter6Value 146
Parameter7Name NULL
Parameter7Value 0
Parameter8Name NULL
Parameter8Value 0
Das vorstehende Ereignis enthält detaillierte Geräteinformationen in den Parameterwerten 2 bis 6. Hier werden verschiedene ATA-Registerwerte gezeigt. Mithilfe der ATA-ACS-Spezifikation können die unten angegebenen Werte beim Fehlschlagen eines Befehls zum Herunterladen von Microcode („Download Microcode“) decodiert werden:
- Rückgabecode: 0 (0000 0000) (nicht verfügbar – bedeutungslos, da keine Nutzlast übertragen wurde)
- Features: 15 (0000 1111) (Bit 1 ist auf „1“ festgelegt und gibt „abort“ (Abbruch) an.)
- SectorCount: 0 (0000 0000) (nicht verfügbar)
- DriveHead: 160 (1010 0000) (nicht verfügbar – nur veraltete Bits sind festgelegt)
- Befehl: 146 (1001 0010) (Bit 1 ist auf „1“ festgelegt und zeigt die Verfügbarkeit von Sense-Daten an.)
Dies informiert darüber, dass der Firmwareupdatevorgang vom Gerät abgebrochen wurde.
Eine ähnliche Ebene von Debuginformationen steht in diesem Kanal zur Verfügung, wenn NVMe-Geräte mit dem Windows-nativen NVMe-Treiber (StorNVMe.sys) verwendet werden.