Condividi tramite


Risoluzione dei problemi relativi agli aggiornamenti del firmware dell'unità

Si applica a: Windows Server 2022, Windows Server 2019, Windows 10

Windows 10, versione 1703 e successive includono la possibilità aggiornare il firmware delle unità HDD e SSD certificate con il Firmware Upgradeable AQ (Additional Qualifier) tramite PowerShell.

È possibile trovare ulteriori informazioni su questa funzionalità qui:

Gli aggiornamenti del firmware possono non andare a buon fine per vari motivi. Lo scopo di questo articolo è quello di facilitare la risoluzione avanzata dei problemi.

Nota

Le informazioni contenute in questo articolo, a seconda del problema, potrebbero non essere sufficienti per eseguire il debug completo di tutti i possibili casi di errore.

Problemi comuni

Dal punto di vista architettonico, questa nuova funzionalità si basa su API implementate nello stack di archiviazione di Windows, che PowerShell chiama. Lo stack di archiviazione si basa su driver e hardware per implementare correttamente i comandi definiti dal settore. Ciò produce diversi punti in cui possono verificarsi guasti. I problemi più comunemente osservati sono:

  • Una determinata unità non implementa correttamente i comandi standard del settore (non dispone dell'AQ.)
  • Le API necessarie per eseguire l'aggiornamento non sono implementate o sono difettose (se vengono utilizzati driver di terze parti).
  • Le API funzionano, ma c'è un problema con il firmware (ad esempio, un'immagine non valida/corrotta).

Nelle sezioni seguenti vengono fornite informazioni per la risoluzione dei problemi, a seconda che vengano utilizzati driver Microsoft o di terze parti.

Identificazione dell'hardware inappropriato

Il modo più rapido per identificare se un dispositivo supporta il set di comandi corretto è avviare PowerShell e passare un oggetto PhysicalDisk che rappresenta un disco nel cmdlet Get-StorageFirmwareInfo. Ecco un esempio:

Get-PhysicalDisk -SerialNumber 15140F55976D | Get-StorageFirmwareInformation

Di seguito è riportato un esempio di output:

PhysicalDisk          : MSFT_PhysicalDisk (ObjectId = "{1}\\TOKLIMA-DL380\root/Microsoft/Windo...)
SupportsUpdate        : True
NumberOfSlots         : 1
ActiveSlotNumber      : 0
SlotNumber            : {0}
IsSlotWritable        : {True}
FirmwareVersionInSlot : {0013}

Il campo SupportsUpdate, almeno per i dispositivi SATA e NVMe, indica se la funzionalità di PowerShell integrata può essere utilizzata per aggiornare il firmware.

Il campo SupportsUpdate riporta sempre "True" per i dispositivi SAS collegati, perché non è possibile eseguire query per il supporto dei comandi appropriato con i comandi standard del settore.

Per verificare se un dispositivo SAS supporta il set di comandi richiesto, sono disponibili due opzioni:

  • Testare il dispositivo SAS tramite il cmdlet Update-StorageFirmware con un'immagine firmware appropriata, o
  • Consultare Windows Server Catalog per identificare quali dispositivi SAS hanno ottenuto con successo l'aggiornamento FW AQ (https://www.windowsservercatalog.com/)

Opzioni di correzione

Se un determinato dispositivo che si sta testando non supporta il set di comandi appropriato, chiedere al fornitore se è disponibile un firmware aggiornato che fornisca il set di comandi necessario o consultare Windows Server Catalog per identificare i dispositivi che implementano il set di comandi appropriato.

Risoluzione dei problemi con driver di terze parti (SAS)

I componenti software che interagiscono con l'hardware sono i driver delle mini porte nello stack di archiviazione di Windows. Per alcuni protocolli di archiviazione, come SATA e NVMe, Microsoft fornisce driver nativi di Windows. Questi driver supportano informazioni di debug aggiuntive. Tuttavia, i fornitori di hardware e software di terze parti possono creare driver della miniporta personalizzati per i propri dispositivi. In questi casi, il supporto per le informazioni di debug può variare.

Per identificare cosa è accaduto durante il download del firmware e per attivare le API inviate allo stack di archiviazione, indipendentemente dal driver miniport, vedere il seguente canale del registro eventi:

Visualizzatore eventi - Registri applicazioni e servizi - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-ClassPnP/Operational

Questo canale registra le informazioni sulle API di Windows inviate ai driver della miniporta e le relative risposte. Ad esempio, la seguente condizione di errore si verifica quando si tenta di scaricare un'immagine firmware in un dispositivo SATA collegato tramite un HBA SAS che non implementa correttamente la conversione necessaria da SAS a SATA:

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

Ecco un esempio di 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 genera un errore e ha ricevuto l'informazione che la funzione chiamata, ovvero l'API del Kernel, non era corretta. Un errore potrebbe indicare che l'API non è stata implementata dal driver della mini porta SAS di terze parti (corretto in questo caso) o che l'API non è andata a buon fine per un altro motivo, come un errore di allineamento dei segmenti di download.

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

L'evento ETW 507 del canale mostra che una richiesta SCSI SRB non è andata a buon fine e fornisce l'informazione aggiuntiva secondo la quale SenseKey era '5' (richiesta non valida) e l'informazione AdditionalSense era '36' (campo non valido nel CDB).

Nota

Queste informazioni sono fornite direttamente dalla miniporta in questione e la loro accuratezza dipende dall'implementazione e dal livello di complessità del driver della miniporta.

È possibile che diverse condizioni di errore presentino gli stessi codici di errore se il driver della miniporta non li distingue. Ad esempio, il tentativo di scaricare un'immagine firmware non valida tramite un HBA SAS in un dispositivo SATA (in cui si prevede che il dispositivo si guasti) può produrre codici di errore identici.

Nei casi in cui i protocolli sono misti e si verificano conversioni, cioè SATA dietro SAS, è meglio testare il dispositivo SATA collegato direttamente a un controller SATA per escluderlo come potenziale problema.

Opzioni di correzione

Se il driver di terze parti non implementa le API o le conversioni necessarie, è possibile passare alle alternative fornite da Microsoft per SATA (StorAHCI.sys) e NVMe (StorNVMe.sys) o contattare il fornitore OEM o HBA che ha fornito il driver SAS e richiedere se esiste una versione più recente con il supporto appropriato.

Ulteriore risoluzione dei problemi con i driver Microsoft (SATA/NVMe)

Quando i driver nativi di Windows, come StorAHCI.sys o StorNVMe.sys, vengono utilizzati per alimentare i dispositivi di archiviazione, è possibile ottenere ulteriori informazioni su possibili casi di errore durante le operazioni di aggiornamento del firmware.

Oltre al canale operativo ClassPnP, StorAHCI e StorNVMe registrano i codici di ritorno specifici del protocollo del dispositivo nel seguente canale ETW:

Visualizzatore eventi - Registri applicazioni e servizi - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-StorPort/Diagnose

I registri di diagnostica non vengono visualizzati per impostazione predefinita e possono essere attivati/visualizzati selezionando "Visualizza" in EventViewer e quindi selezionando "Mostra registri di analisi e debug" dal menu a discesa.

Per raccogliere queste voci di registro avanzate, abilitare il registro, riprodurre l'errore di aggiornamento del firmware e salvare il registro di diagnostica.

Di seguito viene riportato un esempio di aggiornamento non andato a buon fine del firmware in un dispositivo SATA, perché l'immagine da scaricare non era valida (ID evento: 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

L'evento precedente contiene informazioni dettagliate sul dispositivo nei valori dei parametri da 2 a 6. Qui stiamo esaminando vari valori del registro ATA. La specifica ATA ACS può essere utilizzata per decodificare i seguenti valori in caso di errore di un comando Download Microcode:

  • Codice restituito: 0 (0000 0000) (N/A - Senza significato perché non è stato trasferito alcun payload).
  • Funzionalità: 15 (0000 1111) (Bit 1 è impostato su ‘1' e indica "interruzione").
  • SectorCount: 0 (0000 0000) (N/A)
  • DriveHead: 160 (1010 0000) (N/A – Sono impostati solo bit obsoleti).
  • Comando: 146 (1001 0010) (Il bit 1 è impostato su '1' per indicare la disponibilità dei dati di sense).

Questo ci dice che l'operazione di aggiornamento del firmware è stata interrotta dal dispositivo.

Un livello simile di informazioni di debug è disponibile in questo canale quando si utilizzano dispositivi NVMe con il driver NVMe nativo di Windows (StorNVMe.sys).