疑難排解磁碟機韌體更新
Windows 10 版本 1703 和更新版本包含透過 PowerShell 更新已透過韌體可升級 AQ (其他限定詞)認證的 HDD 和 SSD 韌體的功能。
您可以在這裡找到此功能的詳細資訊:
- 在 Windows Server 2016 中更新磁碟機韌體
- 在儲存空間直接存取不停機的情況下更新磁碟機韌體
韌體更新可能會因為各種原因而失敗。 本文的目的是協助進行進階疑難排解。
注意
針對不同的問題,本文中的資訊可能不足以完全偵錯所有可能的失敗案例。
常見問題
在架構上,這項新功能會依賴 Windows 儲存體堆疊中實作的 API,PowerShell 會呼叫此 API。 儲存體堆疊會依賴驅動程式和硬體來正確實作業界定義的命令。 這會產生數個可能發生失敗的點。 最常觀察到的問題包括:
- 指定的磁碟機無法正確實作業界標準命令 (沒有 AQ。)
- 執行更新所需的 API 沒有實作或發生錯誤 (如果使用協力廠商驅動程式)。
- API 可運作,但韌體本身有問題 (例如無效/損毀的映像)。
下列各章節會概述疑難排解的資訊,視乎於您是使用 Microsoft 還是協力廠商驅動程式而定。
識別不適當的硬體
識別裝置是否支援正確命令集的最快方式是啟動 PowerShell,並將代表 PhysicalDisk 物件的磁碟傳遞至 Get-StorageFirmwareInfo Cmdlet。 以下為範例:
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}
SupportsUpdate 欄位 (至少針對 SATA 和 NVMe 裝置) 會指出是否可以使用內建 PowerShell 功能來更新韌體。
SupportsUpdate 欄位一律會針對已連結 SAS 的裝置回報“ True ”,因為無法透過業界標準命令查詢適當的命令支援。
若要驗證 SAS 裝置是否支援必要的命令集,有兩個選項存在:
- 透過具有適當韌體映像的 Update-StorageFirmware Cmdlet 測試 SAS 裝置;或
- 參閱 Windows Server 目錄以識別哪些 SAS 裝置已成功取得 FW 更新 AQ (https://www.windowsservercatalog.com/)
補救選項
如果您要測試的指定裝置不支援適當的命令集,請查詢您的廠商,以查看是否有提供所需命令集的更新韌體,或參閱 Windows Server 目錄來識別要實作適當命令集之來源的裝置。
針對協力廠商驅動程式 (SAS) 進行疑難排解
最能與硬體互動的軟體元件是 Windows 儲存體堆疊中的迷你埠驅動程式。 針對某些儲存體通訊協定,例如 SATA 和 NVMe,Microsoft 提供原生 Windows 驅動程式。 這些驅動程式支援其他偵錯資訊。 不過,協力廠商硬體和軟體廠商可以為其裝置撰寫自訂迷你埠驅動程式。 在這些案例中,對偵錯資訊的支援可能會有所不同。
若要識別韌體下載和啟動傳送至儲存體堆疊的 API 所發生的情況,不論迷你埠驅動程式為何,請參閱下列事件記錄通道:
事件檢視器 - 應用程式和服務記錄 - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-ClassPnP/Operational
此通道會記錄傳送至迷你埠驅動程式及其回應之 Windows API 的相關資訊。 例如,嘗試將韌體映像下載到透過 SAS HBA 連線的 SATA 裝置時,會發生下列錯誤狀況,該裝置無法正確實作從 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 顯示 SCSI SRB 要求失敗,並提供 SenseKey 為 ‘5' (非法要求) 而 AdditionalSense 資訊為‘36' (CDB 中的非法欄位) 的其他資訊。
注意
此資訊是由有問題的迷你埠直接提供,此資訊的正確性將取決於迷你埠驅動程式的實作和複雜度。
如果迷你埠驅動程式無法厘清這些錯誤碼,則不同的錯誤狀況可能會顯示相同的錯誤碼。 例如,嘗試透過 SAS HBA 將不正確韌體映像下載到 SATA 裝置 (預期裝置失敗),可能會導致相同的失敗碼。
在混合通訊協定和轉譯發生的情況下,也就是 SAS 背後的 SATA,最好測試直接連線到 SATA 控制器的 SATA 裝置,以排除它為潛在問題。
補救選項
如果協力廠商驅動程式被識別為未實作所需的 API 或轉譯,可以交換至 Microsoft 提供的 SATA (StorAHCI.sys) 和 NVMe (StorNVMe.sys) 替代專案,或連絡提供 SAS 驅動程式的 OEM 或 HBA 廠商,並查詢是否有具有適當支援的較新版本。
使用 Microsoft 驅動程式進行更多疑難排解 (SATA/NVMe)
當 Windows 原生驅動程式,例如 StorAHCI.sys
或 StorNVMe.sys
用於驅動儲存裝置時,可以取得韌體更新作業期間可能失敗案例的其他資訊。
除了 ClassPnP 操作通道之外,StorAHCI 和 StorNVMe 會在下列 ETW 通道中記錄裝置的通訊協定特定傳回碼:
事件檢視器 - 應用程式和服務記錄 - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-ClassPnP/Operational
診斷記錄預設不會顯示,並可以從下拉式功能表中選取 [檢視],然後 [顯示分析和偵錯記錄] 來啟用/顯示。
若要收集這些進階記錄專案,請啟用記錄、重現韌體更新失敗,並儲存診斷記錄。
以下是 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 規格可用來將下列值解碼為下載微碼命令失敗:
- 傳回碼: 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 裝置搭配 Windows 原生 NVMe 驅動程式 (StorNVMe.sys) 時,此通道中也有類似的偵錯資訊層級。