Solución de problemas de actualizaciones de firmware de unidad
Windows 10, versión 1703, y versiones más recientes incluyen la funcionalidad para actualizar el firmware de los HDD y SSD que se han certificado con el AQ (calificador adicional) actualizable de firmware mediante PowerShell.
Aquí puede encontrar más información sobre esta característica:
- Actualización del firmware de la unidad en Windows Server 2016
- Actualización del firmware de unidad sin tiempo de inactividad en Espacios de almacenamiento directo
Las actualizaciones de firmware pueden producir un error por varias razones. El propósito de este artículo es facilitar la solución de problemas avanzada.
Nota
Es posible que la información de este artículo, en función del problema, no sea suficiente para depurar completamente todos los posibles casos de error.
Problemas comunes
Desde el punto de vista de la arquitectura, esta nueva funcionalidad se basa en las API implementadas en la pila de almacenamiento de Windows, en la que se llama a PowerShell. La pila de almacenamiento se basa en controladores y hardware para implementar correctamente comandos definidos por el sector. Esto produce varios puntos en los que pueden producirse errores. Los problemas observados con más frecuencia son:
- Una unidad determinada no implementa correctamente los comandos estándar del sector (no tiene el AQ).
- Las API necesarias para realizar la actualización no se implementan o son erróneas (si se usan controladores de terceros).
- Las API funcionan, pero hay un problema con el propio firmware (por ejemplo, una imagen no válida o dañada).
En las secciones siguientes se describe la información de solución de problemas, en función de si se usan controladores de Microsoft o de terceros.
Identificación de hardware inadecuado
La forma más rápida de identificar si un dispositivo admite el conjunto de comandos correcto es iniciar PowerShell y pasar el objeto PhysicalDisk que representa un disco al cmdlet Get-StorageFirmwareInfo. Este es un ejemplo:
Get-PhysicalDisk -SerialNumber 15140F55976D | Get-StorageFirmwareInformation
Y esta es la salida de ejemplo:
PhysicalDisk : MSFT_PhysicalDisk (ObjectId = "{1}\\TOKLIMA-DL380\root/Microsoft/Windo...)
SupportsUpdate : True
NumberOfSlots : 1
ActiveSlotNumber : 0
SlotNumber : {0}
IsSlotWritable : {True}
FirmwareVersionInSlot : {0013}
El campo SupportsUpdate, al menos para dispositivos SATA y NVMe, indica si la funcionalidad integrada de PowerShell se puede usar para actualizar el firmware.
El campo SupportsUpdate siempre notificará "True" para los dispositivos conectados a SAS, ya que no es posible consultar la compatibilidad adecuada con comandos estándar del sector.
Para validar si un dispositivo SAS admite el conjunto de comandos necesario, existen dos opciones:
- Pruébelo con el cmdlet Update-StorageFirmware con una imagen de firmware adecuada.
- Consulte Windows Server Catalog para identificar qué dispositivos SAS han obtenido correctamente el AQ de actualización del firmware (https://www.windowsservercatalog.com/).
Opciones de corrección
Si un dispositivo determinado que está probando no admite el conjunto de comandos adecuado, consulte al proveedor para ver si hay disponible un firmware actualizado que proporcione el conjunto de comandos necesario o consulte Windows Server Catalogue para identificar los dispositivos para el abastecimiento que implementan el conjunto de comandos adecuado.
Solución de problemas con controladores de terceros (SAS)
Los componentes de software que interactúan más estrechamente con el hardware son controladores de minipuerto de la pila de almacenamiento de Windows. Para algunos protocolos de almacenamiento, como SATA y NVMe, Microsoft proporciona controladores nativos de Windows. Estos controladores admiten información adicional de depuración. Los proveedores de hardware y software de terceros pueden escribir controladores de minipuerto personalizados para sus dispositivos. En estos casos, la compatibilidad con la información de depuración puede variar.
Para identificar lo que sucedió con la descarga de firmware y activar las API enviadas a la pila de almacenamiento, independientemente del controlador de minipuerto, consulte el siguiente canal de registro de eventos:
Visor de eventos- Registros de aplicaciones y servicios - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-ClassPnP/Operational
Este canal registra información sobre las API de Windows enviadas a los controladores de minipuerto y cuáles son sus respuestas. Por ejemplo, la siguiente condición de error aparece al intentar descargar una imagen de firmware en un dispositivo SATA conectado a través de un HBA de SAS que no implementa correctamente la traducción necesaria de SAS a SATA:
Get-PhysicalDisk -SerialNumber 44GS103UT5EW | Update-StorageFirmware -ImagePath C:\Firmware\J3E160@3.enc -SlotNumber 0
A continuación, presentamos un ejemplo de la salida:
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 produce un error y ha recibido la información de que la función invocada (es decir, la API kernel) era incorrecta. Un error podría significar que la API no se implementó mediante el controlador de minipuerto SAS de terceros (lo cual es correcto en este caso), o que se produjo un error en la API por otro motivo, como una alineación incorrecta de los segmentos de descarga.
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
El evento ETW 507 del canal muestra que se produjo un error en una solicitud SRB SCSI y proporciona la información adicional de que SenseKey era "5" (solicitud no válida) y que la información de AdditionalSense era "36" (campo no válido en CDB).
Nota
Esta información la proporciona directamente el minipuerto en cuestión, y la precisión de esta información dependerá de la implementación y sofisticación del controlador de minipuerto.
Es posible que unas condiciones de error diferentes muestren los mismos códigos de error, si el controlador de minipuerto no elimina la ambigüedad entre ellos. Por ejemplo, intentar descargar una imagen de firmware no válida a través de un HBA de SAS en un dispositivo SATA (se espera que el dispositivo genere un error) puede generar los mismos códigos de error.
En los casos en los que se mezclan protocolos y se producen traducciones, es decir, SATA detrás de SAS, es mejor probar el dispositivo SATA conectado directamente a un controlador SATA para descartarlo como un posible problema.
Opciones de corrección
Si el controlador de terceros se identifica como no implementar las API o traducciones necesarias, es posible intercambiar las alternativas proporcionadas por Microsoft para SATA (StorAHCI.sys) y NVMe (StorNVMe.sys), o ponerse en contacto con el proveedor OEM o HBA que proporcionó el controlador SAS y consultar si existe una versión más reciente con el soporte adecuado.
Solución de problemas adicional con controladores de Microsoft (SATA/NVMe)
Cuando los controladores nativos de Windows, como StorAHCI.sys
o StorNVMe.sys
, se usan para alimentar dispositivos de almacenamiento, es posible obtener información adicional sobre posibles casos de error durante las operaciones de actualización de firmware.
Más allá del canal operativo ClassPnP, StorAHCI y StorNVMe registrarán los códigos de retorno específicos del protocolo del dispositivo en el siguiente canal de ETW:
Visor de eventos- Registros de aplicaciones y servicios - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-StorPort/Diagnose
Los registros de diagnóstico no se muestran de forma predeterminada y se pueden activar o mostrar seleccionando "Ver" en EventViewer y seleccionando "Mostrar registros de análisis y depuración" en el menú desplegable.
Para recopilar estas entradas de registro avanzadas, habilite el registro, reproduzca el error de actualización del firmware y guarde el registro de diagnóstico.
Este es un ejemplo de una actualización de firmware en un dispositivo SATA con errores, porque la imagen que se va a descargar no es válida (Id. de 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
El evento anterior contiene información detallada del dispositivo en los valores de parámetro 2 a 6. Aquí veremos varios valores de registro de ATA. La especificación ACS de ATA se puede usar para descodificar los valores siguientes para un error de un comando Descargar microcódigo:
- Código de retorno: 0 (0000 0000) (N/A: carece de significado, porque no se transfirió ninguna carga).
- Características: 15 (0000 1111) (el bit 1 se establece en "1" e indica "anular").
- SectorCount: 0 (0000 0000) (N/A)
- DriveHead: 160 (1010 0000) (N/A: solo se establecen bits obsoletos).
- Comando: 146 (1001 0010) (el bit 1 se establece en "1", lo que indica la disponibilidad de los datos de detección).
Esto nos indica que el dispositivo anuló la operación de actualización del firmware.
Hay disponible un nivel similar de información de depuración en este canal cuando se usan dispositivos NVMe con el controlador NVMe nativo de Windows (StorNVMe.sys).