ドライブのファームウェア更新のトラブルシューティング

適用対象: Windows Server 2022、Windows Server 2019、Windows 10

Windows 10 バージョン 1703 以降には、PowerShell による Firmware Upgradeable AQ (Additional Qualifier) で認定されている HDD と SSD のファームウェアを更新する機能が含まれています。

この機能について詳しくは、以下をご覧ください。

ファームウェア更新は、さまざまな理由で失敗する可能性があります。 この記事では、高度なトラブルシューティングに役立つ情報を提供します。

注意

問題によっては、この記事の情報だけでは、考えられるすべての障害のケースを完全にデバッグできない場合があります。

一般的な問題

アーキテクチャの観点から見ると、この新しい機能は、Windows ストレージ スタックに実装されている API を PowerShell によって呼び出して使用します。 ストレージ スタックに業界標準のコマンドが正しく実装されるかどうかは、ドライバーとハードウェアに依存します。 そのため、障害が発生する可能性のあるポイントが複数存在します。 その中でもよく見られるのは、以下の問題です。

  • 対象のドライブが、業界標準のコマンドを正しく実装していない (AQ を持っていない)。
  • 更新の実行に必要な API が実装されていないか、不具合がある (サードパーティ製ドライバーが使用されている場合)。
  • API は機能するが、ファームウェア自体に問題がある (イメージが無効または破損しているなど)。

以下のセクションで、使用するドライバーが Microsoft 製の場合とサードパーティ製の場合のそれぞれについて、トラブルシューティング情報を概説します。

問題のあるハードウェアの特定

デバイスが適切なコマンド セットをサポートしているかどうかを確認する最も簡単な方法は、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}

少なくとも SATA デバイスと NVMe デバイスについては、SupportsUpdate フィールドを確認すると、組み込みの PowerShell 機能を使用してファームウェアを更新できるかどうかを判断できます。

適切なコマンドがサポートされているかどうかを業界標準コマンドを使って照会できないため、SAS 接続デバイスに対しては、SupportsUpdate フィールドで常に "True" が報告されます。

SAS デバイスが、必要なコマンド セットをサポートしているかどうかを確認するには、以下の 2 つのオプションがあります。

  • 適切なファームウェア イメージを使って Update-StorageFirmware コマンドレットから SAS デバイスをテストする、または
  • Windows Server Catalog を参照して、FW Update AQ (https://www.windowsservercatalog.com/) が正常に取得された SAS デバイスを特定する

考えられる解決方法

テスト対象のデバイスが適切なコマンド セットをサポートしていない場合は、必要なコマンド セットを備えた新しいファームウェアが利用可能かどうかをベンダーに問い合わせるか、Windows Server Catalog を参照して、適切なコマンド セットを実装する調達可能なデバイスを探します。

サードパーティ製ドライバー (SAS) のトラブルシューティング

ハードウェアと最も緊密にやり取りするソフトウェア コンポーネントは、Windows ストレージ スタックのミニポート ドライバーです。 SATA や NVMe などの一部のストレージ プロトコルについて、マイクロソフトは、ネイティブの Windows ドライバーを提供しています。 これらのドライバーでは、追加のデバッグ情報がサポートされています。 ただし、サードパーティのハードウェアおよびソフトウェア ベンダーは、自社デバイス向けにカスタムのミニポート ドライバーを記述できます。 このような場合、デバッグ情報のサポートは異なる可能性があります。

ミニポート ドライバーに関係なく、ファームウェアのダウンロードで発生した問題を特定し、ストレージ スタックに送信された API をアクティブ化するには、次のイベント ログ チャネルを確認してください。

イベント ビューアー - [アプリケーションとサービス ログ] - [Microsoft] - [Windows] - [StorDiag] - [Microsoft-Windows-Storage-ClassPnP/Operational]

このチャネルには、ミニポート ドライバーに送信された Windows API に関する情報と、その応答が記録されます。 たとえば、SAS HBA を介して接続されている 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 でエラーをスローし、呼び出された関数 (つまり Kernel 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 の無効なフィールド) であったという追加情報を提供しています。

注意

この情報は対象のミニポートから直接提供されるため、この情報の精度はミニポート ドライバーの実装と性能に依存します。

ミニポート ドライバーがエラー状態を正確に区別しない場合、1 つのエラー コードが複数のエラー状態を意味する可能性があります。 たとえば、SAS HBA を介して SATA デバイスに無効なファームウェア イメージをダウンロードしようとすると (そのデバイスは失敗すると予想される)、同一のエラー コードが表示される可能性があります。

プロトコルが混在していて変換が発生する場合 (つまり SATA が SAS の背後にある場合)、SATA デバイスを直接 SATA コントローラーに接続してテストして、問題を切り分けることをお勧めします。

考えられる解決方法

サードパーティ製のドライバーが必要な API や変換機能を実装していないことを特定した場合、Microsoft が提供する SATA または NVMe の代替ドライバー (それぞれ、StorAHCI.sys と StorNVMe.sys) と交換するか、SAS ドライバー提供元の OEM または HBA ベンダーに、適切なサポートがある新しいバージョンが存在するかどうかについて問い合わせることができます。

Microsoft 製ドライバー (SATA/NVMe) の高度なトラブルシューティング

StorAHCI.sysStorNVMe.sys などの Windows ネイティブ ドライバーがストレージ デバイスで使われている場合、ファームウェアの更新作業中に発生する可能性があるエラー ケースについて詳細情報を取得できます。

ClassPnP Operational チャネルの情報に加え、StorAHCI と StorNVMe によって、次の ETW チャネルのログにデバイスのプロトコル固有のリターン コードが記録されます。

イベント ビューアー - [アプリケーションとサービス ログ] - [Microsoft] - [Windows] - [StorDiag] - [Microsoft-Windows-Storage-StorPort/Diagnose]

診断ログは既定では表示されませんが、EventViewer で [表示] を選択してから、ドロップダウン メニューの [分析およびデバッグ ログの表示] を選択すると、アクティブ化 (表示) できます。

このような詳細なログ エントリを収集するには、ログを有効にしたうえでファームウェア更新時の障害を再現し、診断ログを保存します。

以下に、ダウンロード対象のイメージが無効であったために、SATA デバイスのファームウェア更新が失敗した例を示します (イベント ID: 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 レジスタ値を確認します。 Download Microcode コマンドの失敗に関する以下の値は、ATA ACS 仕様を参照して解釈できます。

  • リターン コード: 0 (0000 0000) (該当せず - ペイロードが転送されなかったため何も意味しません。)
  • 機能: 15 (0000 1111) (ビット 1 が ‘1' に設定されています。これは "中止" されたことを示します。)
  • SectorCount: 0 (0000 0000) (該当せず)
  • DriveHead: 160 (1010 0000) (該当せず - 設定されているのは廃止されたビットのみです。)
  • コマンド: 146 (1001 0010) (ビット 1 が ‘1' に設定されています。これはセンス データが利用できることを示します。)

この情報から、ファームウェア更新操作はデバイスによって中止されたことがわかります。

Windows ネイティブの NVMe ドライバー (StorNVMe.sys) が動作する NVMe デバイスを使用する場合は、このチャネルで同程度のレベルの情報が利用できます。