Problembehandlung für Updates der LaufwerkfirmwareTroubleshooting drive firmware updates

Gilt für: Windows 10, Windows Server (Semi-Annual Channel)Applies to: Windows 10, Windows Server (Semi-Annual Channel),

Version 1703 von Windows 10 und höher sowie Windows Server (Semi-Annual Channel) 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.Windows 10, version 1703 and newer, and Windows Server (Semi-Annual Channel) include the capability to update firmware of HDDs and SSDs that have been certified with the Firmware Upgradeable AQ (Additional Qualifier) via PowerShell.

Weitere Informationen zu diesem Feature finden Sie hier:You can find more information about this feature here:

Firmwareupdates können aus verschiedenen Gründen fehlschlagen.Firmware updates may fail for various reasons. Dieser Artikel soll Ihnen als Hilfe bei der erweiterten Problembehandlung dienen.The purpose of this article is to help with advanced troubleshooting.

Hinweis

Je nach Problem kann es sein, dass die Informationen in diesem Artikel nicht ausreichen, um alle möglichen Fehlerfälle zu debuggen.Information in this article, depending on the issue, may not be sufficient to fully debug all possible failure cases.

Allgemeine ProblemeCommon issues

In Bezug auf die Architektur basiert diese neue Funktion auf APIs, die im Windows-Speicherstapel implementiert sind, der von PowerShell aufgerufen wird.Architecturally, this new capability relies on APIs implemented in the Windows storage stack, which PowerShell calls into. Der Speicherstapel nutzt Treiber und Hardware, um die branchenüblichen Befehle richtig zu implementieren.The storage stack relies on drivers and hardware to properly implement industry defined commands. Dies führt zu mehreren Punkten, an denen Fehler auftreten können.This yields several points at which failures can occur. Die am häufigsten beobachteten Probleme sind:The most commonly observed issues are:

  1. Ein bestimmtes Laufwerk implementiert die branchenüblichen Befehle nicht richtig (AQ nicht vorhanden).A given drive does not properly implement the industry-standard commands (does not have the AQ)
  2. Die APIs, die zum Durchführen des Updates erforderlich sind, werden nicht implementiert oder sind fehlerhaft (bei Verwendung von Treibern von Drittanbietern).The APIs needed to perform the update are not implemented or faulty (if 3rd party drivers are used)
  3. Die APIs funktionieren, aber es liegt ein Problem mit der Firmware selbst vor (ungültig/beschädigtes Image usw.).The APIs work, but there is an issue with the firmware itself (invalid/corrupt image, …)

Die folgenden Abschnitte enthalten Informationen zur Problembehandlung (unterteilt danach, ob Treiber von Microsoft oder von Drittanbietern verwendet werden).The following sections outline troubleshooting information, depending on whether Microsoft or 3rd party drivers are used.

Identifizieren falscher HardwareIdentifying inappropriate hardware

Die schnellste und einfachste Möglichkeit zur Ermittlung, ob ein Gerät den richtigen Befehlssatz unterstützt, ist das Starten von PowerShell und das Übergeben eines Datenträgers, der das PhysicalDisk-Objekt darstellt, an das Get-StorageFirmwareInfo-Cmdlet.The quickest way to identify if a device supports the correct command set is to simply launch PowerShell and pass a disk's representing PhysicalDisk object into the Get-StorageFirmwareInfo cmdlet. Hier ist ein Beispiel angegeben:Here is an example:

Get-PhysicalDisk -SerialNumber 15140F55976D | Get-StorageFirmwareInformation

Dies ist ein Beispiel für eine Ausgabe:And here's example output:

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 – für SATA- und NVMe-Geräte – angegeben, ob die integrierte PowerShell-Funktionalität zum Aktualisieren der Firmware verwendet werden kann.The SupportsUpdate field, at least for SATA and NVMe devices, will indicate if the built-in PowerShell functionality can be used to update firmware.

Im Feld „SupportsUpdate“ wird für mit SAS verbundene Geräte immer „True“ gemeldet, da das Abfragen der richtigen Befehlsunterstützung mit branchenüblichen Befehlen nicht möglich ist.The SupportsUpdate field will always report “True” for SAS-attached devices, as querying for the appropriate command support is not possible with industry-standard commands.

Es gibt zwei Optionen, um zu überprüfen, ob ein SAS-Gerät den erforderlichen Befehlssatz unterstützt:To validate if a SAS device supports the required command set, two options exist:

  1. Ausprobieren per Update-StorageFirmware-Cmdlet mit einem passenden FirmwareimageTry it out via the Update-StorageFirmware cmdlet with an appropriate firmware image, or
  2. Nutzen des Windows Server-Katalogs für die Ermittlung, welche SAS-Geräte die Prüfung durch den FW Update AQ bestanden haben (https://www.windowsservercatalog.com/)Consult the Windows Server Catalogue to identify which SAS devices have successfully gained the FW Update AQ (https://www.windowsservercatalog.com/)

LösungsoptionenRemediation options

Wenn ein bestimmtes zu testendes Gerät den richtigen Befehlssatz nicht unterstützt, können Sie entweder bei Ihrem Anbieter anfragen, ob eine aktualisierte Firmware mit dem erforderlichen Befehlssatz verfügbar ist, oder Sie können mit dem Windows Server-Katalog Geräte ermitteln, die den richtigen Befehlssatz implementieren.If a given device you are testing does not support the appropriate command set, either query your vendor to see if an updated firmware is available that provides the needed command set, or consult the Windows Server Catalogue to identify devices for sourcing that implement the appropriate command set.

Problembehandlung mit Drittanbietertreibern (SAS)Troubleshooting with 3rd-Party drivers (SAS)

Die Softwarekomponenten, die am stärksten mit Hardware interagieren, sind Miniport-Treiber im Windows-Speicherstapel.The software components that most closely interact with hardware are mini-port drivers in the Windows storage stack. Für einige Speicherprotokolle, z.B. SATA und NVMe, stellt Microsoft native Windows-Treiber bereit.For some storage protocols, such as SATA and NVMe, Microsoft provides native Windows drivers. Diese Treiber ermöglichen die Nutzung zusätzlicher Debuginformationen.These drivers allow for additional debug information. Drittanbieter von Hardware und Software können für ihre Geräte dagegen eigene Miniport-Treiber schreiben, und die Supportstufe kann für Debuginformationen jeweils variieren.3rd party hardware and software vendors however are free to write their own miniport drivers for their devices and their support level for debug information may vary.

Nutzen Sie den folgenden Ereignisprotokollkanal, um zu ermitteln, was mit dem Firmwaredownload passiert ist, und unabhängig vom Miniport-Treiber APIs zu aktivieren, die an den Speicherstapel gesendet wurden:To identify what happened to the firmware download and activate APIs sent down the storage stack, regardless of miniport driver, consult the following event log channel:

Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > StorDiag > Microsoft-Windows-Storage-ClassPnP/OperationalEvent Viewer - Application and Services Logs - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-ClassPnP/Operational

Dieser Kanal zeichnet Informationen zu den Windows-APIs, die an die Miniport-Treiber gesendet werden, und deren Antworten auf.This channel records information about the Windows APIs sent down to the miniport drivers and what their responses are. Die folgende Fehlerbedingung tritt beispielsweise bei dem Versuch auf, ein Firmwareimage auf ein SATA-Gerät herunterzuladen, das über eine SAS-HBA-Einheit angeschlossen ist, für die die erforderliche Übersetzung von SAS in SATA nicht richtig implementiert wurde:For example, the error condition shown directly below is exhibited when attempting to download a firmware image to a SATA device, which is connected through a SAS HBA that does not properly implement the needed translation from SAS to SATA:

Get-PhysicalDisk -SerialNumber 44GS103UT5EW | Update-StorageFirmware -ImagePath C:\Firmware\J3E160@3.enc -SlotNumber 0

Hier ist ein Beispiel für die Ausgabe angegeben:Here's an example of the output:

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 Informationen dazu empfangen, dass die aufgerufene Funktion (Kernel-API) fehlerhaft war.PowerShell will throw an error and has received the information that the function called (i.e. Kernel API) was incorrect. Dies kann bedeuten, dass entweder die API vom SAS-Miniport-Treiber nicht implementiert wurde (hier der Fall), oder für die API aus einem anderen Grund ein Fehler aufgetreten ist, z.B. eine Fehlausrichtung der Downloadsegmente.This could mean that either the API was not implemented by the 3rd party SAS mini-port driver (true in this case), or that the API was failed for another reason, such as a misalignment of download segments.

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 des Kanals zeigt, dass eine SCSI-SRB-Anforderung fehlgeschlagen ist, und es enthält die zusätzlichen Informationen, dass für SenseKey der Wert „5“ (Illegal Request, Ungültige Anforderung) und für AdditionalSense der Wert „36“ (Illegal Field in CDB, Ungültiges Feld in CDB) vorliegt.The ETW event 507 from the channel shows that a SCSI SRB request failed and provides the additional information that SenseKey was ‘5’ (Illegal Request), and that AdditionalSense information was ‘36’ (Illegal Field in CDB).

Hinweis

Diese Informationen werden direkt vom betreffenden Miniport bereitgestellt, und die Genauigkeit dieser Informationen hängt von der Implementierung und vom technischen Stand des Miniport-Treibers ab.This information is provided directly by the miniport in question and the accuracy of this information will depend on the implementation and sophistication of the miniport driver.

Es ist möglich, dass andere Fehlerbedingungen die gleichen Fehlercodes aufweisen, wenn der Miniport-Treiber nicht dazwischen unterscheidet.It is possible that different error condition exhibit the same error codes, if the miniport driver does not disambiguate between them. Beispielsweise kann der Versuch, ein ungültiges Firmwareimage über eine SAS-HBA-Einheit auf ein SATA-Gerät herunterzuladen (wobei der Vorgang für das Gerät voraussichtlich fehlschlägt), ggf. in die gleichen Fehlercodes übersetzt werden.For example, trying to download an invalid firmware image through a SAS HBA to a SATA device (which the device is expected to fail) may be translated to the same failure codes.

In Fällen, in denen gemischte Protokolle verwendet und Übersetzungen durchgeführt werden, also bei SATA hinter SAS, ist es am besten, das SATA-Gerät mit einer direkten Verbindung mit einem SATA-Controller zu testen. So kann ausgeschlossen werden, dass dies ein potenzielles Problem darstellt.In cases where protocols are mixed and translations occur, i.e. SATA behind SAS, it is best to test the SATA device directly connected to a SATA controller to rule it out as a potential problem.

LösungsoptionenRemediation options

Wenn für den 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 eine neuere Version mit der richtigen Unterstützung vorhanden ist.If the 3rd party driver is identified as not implementing the needed APIs or translations, it is possible to either swap to the Microsoft provided alternatives for SATA (StorAHCI.sys) and NVMe (StorNVMe.sys), or reach out to the OEM or HBA vendor that provided the SAS driver and query if a newer version with the proper support exists.

Weitere Problembehandlung mit Microsoft-Treiber (SATA/NVMe)Additional troubleshooting with Microsoft drivers (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 bei den Aktualisierungsvorgängen für die Firmware abgerufen werden.When Windows-native drivers, such as StorAHCI.sys or StorNVMe.sys are used to power storage devices, it is possible to get additional information about possible failure cases during firmware update operations.

Über den ClassPnP/Operational-Kanal hinaus protokollieren StorAHCI und StorNVMe die protokollspezifischen Rückgabecodes des Geräts im folgenden ETW-Kanal:Beyond the ClassPnP Operational channel, StorAHCI and StorNVMe will log the device’s protocol specific return codes in the following ETW channel:

Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > StorDiag > Microsoft-Windows-Storage-StorPort/DiagnoseEvent Viewer - Application and Services Logs - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-StorPort/Diagnose

Die Diagnoseprotokolle werden nicht standardmäßig angezeigt und können aktiviert bzw. angezeigt werden, indem Sie unter EventViewer auf „Ansicht“ klicken und im Dropdownmenü die Option „Analytische und Debugprotokolle einblenden“ wählen.The diagnostic logs are not shown by default and can be activated/shown by clicking on “View” in EventViewer and selecting “Show Analytics and Debug Logs” from the drop-down menu.

Um diese erweiterten Protokolleinträge zu sammeln, aktivieren Sie das Protokoll, reproduzieren den Fehler beim Firmwareupdate und speichern das Diagnoseprotokoll.To gather these advanced log entries, enable the log, reproduce the firmware update failure, and save the diagnostic log.

Hier ist ein Beispiel für einen Fehler bei einem Firmwareupdate auf einem SATA-Gerät angegeben. Der Fehler ist aufgetreten, weil das herunterzuladende Image ungültig ist (Ereignis-ID: 258):Here is an example of a firmware update on a SATA device failing, because the image to be downloaded was invalid (Event 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 obige Ereignis enthält in den Parameterwerten 2 bis 6 ausführliche Geräteinformationen.The above event contains detailed device information in parameter values 2 through 6. Hier sind verschiedene ATA-Registerwerte aufgeführt.Here we are looking at various ATA register values. Die ATA-ACS-Spezifikation kann zum Decodieren der unten angegebenen Werte in Bezug auf das Fehlschlagen eines Befehls zum Herunterladen von Microcode (Download Microcode) verwendet werden:The ATA ACS specification can be used to decode the below values for failure of a Download Microcode command:

  • Rückgabecode: 0 (0000 0000) (N/V – bedeutungslos, da keine Nutzlast übertragen wurde)Return Code: 0 (0000 0000) (N/A - meaningless since no payload was transferred)
  • Features: 15 (0000 1111) (Bit 1 ist auf „1“ festgelegt und zeigt „abort“ (Abbruch) an)Features: 15 (0000 1111) (Bit 1 is set to ‘1’ and indicates “abort”)
  • SectorCount: 0 (0000 0000) (N/V)SectorCount: 0 (0000 0000) (N/A)
  • DriveHead: 160 (1010 0000) (N/V – nur veraltete Bits sind festgelegt)DriveHead: 160 (1010 0000) (N/A – only obsolete bits are set)
  • Befehl: 146 (1001 0010) (Bit 1 ist auf „1“ festgelegt und zeigt die Verfügbarkeit von Sense-Daten an)Command: 146 (1001 0010) (Bit 1 is set to ‘1’ indicating the availability of sense data)

Hier erfahren wir, dass der Vorgang zur Aktualisierung der Firmware vom Gerät abgebrochen wurde.This tells us that the firmware update operation was aborted by the device.

In diesem Kanal ist eine ähnliche Menge von Debuginformationen verfügbar, wenn NVMe-Geräte mit dem nativen Windows-NVMe-Treiber (StorNVMe.sys) verwendet werden.A similar level of debug information is available in this channel when using NVMe devices with the Windows-native NVMe driver (StorNVMe.sys).