Поделиться через


Устранение неполадок обновлений встроенного ПО диска

Windows 10 версии 1703 и более поздних версий включают возможность обновления встроенного ПО HDD и SSD, сертифицированных с помощью AQ (дополнительного квалификатора) с помощью PowerShell.

Дополнительные сведения об этой функции см. здесь:

Обновления встроенного ПО могут завершиться сбоем по различным причинам. Цель этой статьи — помочь в расширенном устранении неполадок.

Примечание.

Сведения в этой статье в зависимости от проблемы могут быть недостаточно для полной отладки всех возможных случаев сбоя.

Распространенные проблемы

Эта новая возможность использует API, реализованные в стеке хранилища Windows, в котором вызывается PowerShell. Стек хранилища использует драйверы и оборудование для правильной реализации отраслевых команд. Это дает несколько точек, в которых могут возникнуть сбои. Наиболее часто наблюдаемые проблемы:

  • Заданный диск не реализует стандартные отраслевые команды (не имеет AQ.)
  • API, необходимые для выполнения обновления, не реализованы или неисправны (если используются сторонние драйверы).
  • API работают, но возникает проблема с самим встроенном ПО (например, недопустимым или поврежденным изображением).

В следующих разделах описаны сведения об устранении неполадок в зависимости от того, используются ли драйверы Майкрософт или сторонние драйверы.

Определение неуместного оборудования

Самый быстрый способ определить, поддерживает ли устройство правильный набор команд, — запустить PowerShell и передать диск, представляющий объект PhysicalDisk, в командлет Get-StorageFirmwareInfo. Приведем пример:

Get-PhysicalDisk -SerialNumber 15140F55976D | Get-StorageFirmwareInformation

Ниже приведен пример выходных данных:

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

Поле "ПоддержкаUpdate", по крайней мере для устройств SATA и NVMe, указывает, можно ли использовать встроенную функцию PowerShell для обновления встроенного ПО.

Поле SupportUpdate всегда сообщает "True" для устройств, подключенных к SAS, так как запрос на соответствующую поддержку команд не возможен с помощью отраслевых команд.

Чтобы проверить, поддерживает ли устройство SAS обязательный набор команд, существуют два варианта:

  • Тестирование устройства SAS с помощью командлета Update-StorageFirmware с соответствующим образом встроенного ПО; или
  • Ознакомьтесь с каталогом Windows Server, чтобы определить, какие устройства SAS успешно получили AQ обновления FW (https://www.windowsservercatalog.com/)

Параметры исправления

Если определенное устройство, которое вы тестируете, не поддерживает соответствующий набор команд, запросите поставщика, чтобы узнать, доступен ли обновленный встроенное ПО, предоставляющий необходимый набор команд, или обратитесь к каталогу Windows Server, чтобы определить устройства для выбора устройств, реализующих соответствующий набор команд.

Устранение неполадок с драйверами сторонних производителей (SAS)

Компоненты программного обеспечения, наиболее тесно взаимодействующие с оборудованием, являются драйверами мини-портов в стеке хранилища Windows. Для некоторых протоколов хранения, таких как SATA и NVMe, корпорация Майкрософт предоставляет собственные драйверы Windows. Эти драйверы поддерживают дополнительные сведения об отладке. Сторонние поставщики оборудования и программного обеспечения могут создавать пользовательские драйверы минипорта для своих устройств. В таких случаях поддержка отладочной информации может отличаться.

Чтобы определить, что произошло с скачиванием встроенного ПО и активацией API, отправляемых по стеку хранилища, независимо от драйвера минипорта, обратитесь к следующему каналу журнала событий:

Просмотр событий — журналы приложений и служб — Microsoft — Windows — StorDiag — Microsoft-Windows-Storage-ClassPnP/Operational

Этот канал записывает сведения об API Windows, отправляемых драйверам мини-порта и их ответам. Например, следующее условие ошибки возникает при попытке загрузить образ встроенного ПО на устройство SATA, подключенное через SAS HBA, которое неправильно реализует необходимый перевод из SAS в SATA:

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

Ниже приведен пример выхода.

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 выдает ошибку и получает сведения, которые вызывает функция (т. е. API ядра) некорректно. Ошибка может означать, что либо API не был реализован сторонним драйвером мини-порта SAS (правильно в этом случае), либо что API не удалось выполнить по другой причине, например неправильное сопоставление сегментов загрузки.

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

Событие ETW 507 из канала показывает, что запрос SRB SCSI завершился сбоем и предоставляет дополнительные сведения о том, что SenseKey был "5" (незаконный запрос) и что дополнительные сведения были "36" (незаконное поле в CDB).

Примечание.

Эта информация предоставляется непосредственно минипортом, и точность этой информации зависит от реализации и сложности минипорта драйвера.

Для разных условий ошибок могут быть представлены одни и те же коды ошибок, если драйвер минипорта не диамбигируется между ними. Например, попытка скачать недопустимый образ встроенного ПО через SAS HBA на устройство SATA (которое устройство, как ожидается, завершится ошибкой), может привести к идентичным кодам сбоев.

В случаях, когда протоколы смешиваются и переводятся, то есть SATA за SAS, лучше всего протестировать устройство SATA непосредственно, подключенное к контроллеру SATA, чтобы исключить его в качестве потенциальной проблемы.

Параметры исправления

Если сторонний драйвер определяется как не реализующий необходимые API или переводы, можно либо переключиться на предоставленные корпорацией Майкрософт альтернативные варианты SATA (StorAHCI.sys) и NVMe (StorNVMe.sys), либо обратиться к поставщику OEM или HBA, который предоставил драйвер SAS и запрашивать, если более новая версия с надлежащей поддержкой существует.

Дополнительные сведения об устранении неполадок с драйверами Майкрософт (SATA/NVMe)

Если собственные драйверы Windows, такие как StorAHCI.sys или StorNVMe.sys используются для устройств хранения данных, можно получить дополнительные сведения о возможных случаях сбоя во время операций обновления встроенного ПО.

Помимо операционного канала ClassPnP, StorAHCI и StorNVMe регистрируют коды возврата конкретного протокола устройства в следующем канале ETW:

Просмотр событий — журналы приложений и служб — Microsoft — Windows — StorDiag — Microsoft-Windows-Storage-StorPort/Диагностика

Журналы диагностики не отображаются по умолчанию и могут быть активированы или показаны, выбрав "Вид" в EventViewer и выбрав "Показать аналитику и отладочные журналы" в раскрывающемся меню.

Чтобы собрать эти расширенные записи журнала, включите журнал, воспроизводите сбой обновления встроенного ПО и сохраните журнал диагностики.

Ниже приведен пример сбоя обновления встроенного ПО на устройстве SATA, так как скачанный образ был недопустим (идентификатор события: 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

Приведенное выше событие содержит подробные сведения об устройстве в значениях параметров 2–6. Здесь мы рассмотрим различные значения регистра ATA. Спецификация ATA ACS может использоваться для декодировки приведенных ниже значений для сбоя команды Download Microcode:

  • Код возврата: 0 (0000 0000) (N/A - бессмысленно, так как полезные данные не были переданы.)
  • Функции: 15 (0000 1111) (Бит 1 имеет значение "1" и указывает "прерывание".
  • SectorCount: 0 (0000 0000) (N/A)
  • DriveHead: 160 (1010 0000) (N/A — заданы только устаревшие биты.)
  • Команда: 146 (1001 0010) (Бит 1 имеет значение "1", указывающее доступность данных смысле.)

Это сообщает нам, что операция обновления встроенного ПО была прервана устройством.

Аналогичный уровень сведений об отладке доступен в этом канале при использовании устройств NVMe с драйвером NVMe windows (StorNVMe.sys).