Устранение неполадок обновлений встроенного ПО диска
Windows 10 версии 1703 и более поздних версий включают возможность обновления встроенного ПО HDD и SSD, сертифицированных с помощью AQ (дополнительного квалификатора) с помощью PowerShell.
Дополнительные сведения об этой функции см. здесь:
- Обновление встроенного ПО диска в Windows Server 2016
- Обновление встроенного ПО диска без простоя в Локальные дисковые пространства
Обновления встроенного ПО могут завершиться сбоем по различным причинам. Цель этой статьи — помочь в расширенном устранении неполадок.
Примечание.
Сведения в этой статье в зависимости от проблемы могут быть недостаточно для полной отладки всех возможных случаев сбоя.
Распространенные проблемы
Эта новая возможность использует 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).