다음을 통해 공유


드라이브 펌웨어 업데이트 문제 해결

Windows 10 버전 1703 이상에는 PowerShell을 통해 펌웨어 업그레이드 가능 AQ(추가 한정자)로 인증된 HDD 및 SSD의 펌웨어를 업데이트하는 기능이 포함되어 있습니다.

여기에서 이 기능에 대한 자세한 정보를 확인할 수 있습니다.

펌웨어 업데이트는 여러 가지 이유로 실패할 수 있습니다. 이 문서의 목적은 고급 문제 해결을 돕기 위한 것입니다.

참고 항목

이 문서의 정보는 문제에 따라 가능한 모든 오류 사례를 완전히 디버그하기에 충분하지 않을 수 있습니다.

일반적인 문제

아키텍처적으로 이 새로운 기능은 PowerShell이 호출하는 Windows 스토리지 스택에 구현된 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}

적어도 SATA 및 NVMe 디바이스의 경우 SupportsUpdate 필드는 기본 제공 PowerShell 기능을 사용하여 펌웨어를 업데이트할 수 있는지를 나타냅니다.

적절한 명령 지원에 대한 쿼리는 업계 표준 명령으로는 불가능하기 때문에 SupportsUpdate 필드는 항상 SAS 연결 디바이스에 대해 "True"를 보고합니다.

SAS 디바이스가 필요한 명령 집합을 지원하는지 여부를 확인하려면 다음 두 가지 옵션이 있습니다.

  • 적절한 펌웨어 이미지를 사용하여 Update-StorageFirmware cmdlet을 통해 SAS 디바이스를 테스트합니다. 또는
  • FW 업데이트 AQ(https://www.windowsservercatalog.com/)를 성공적으로 획득한 SAS 디바이스를 확인하려면 Windows Server 카탈로그를 참조하세요.

재구성 옵션

테스트 중인 지정된 디바이스가 적절한 명령 집합을 지원하지 않는 경우 공급업체를 쿼리하여 필요한 명령 집합을 제공하는 업데이트된 펌웨어를 사용할 수 있는지 확인하거나 Windows Server 카탈로그를 참조하여 적절한 명령 집합을 구현하는 소싱 디바이스를 식별합니다.

타사 드라이버 문제 해결(SAS)

하드웨어와 가장 밀접하게 상호 작용하는 소프트웨어 구성 요소는 Windows 스토리지 스택의 미니 포트 드라이버입니다. SATA 및 NVMe와 같은 일부 스토리지 프로토콜의 경우 Microsoft는 네이티브 Windows 드라이버를 제공합니다. 이러한 드라이버는 추가 디버그 정보를 지원합니다. 그러나 타사 하드웨어 및 소프트웨어 공급업체는 디바이스에 대한 사용자 지정 미니포트 드라이버를 작성할 수 있습니다. 이러한 경우 디버그 정보에 대한 지원은 다를 수 있습니다.

미니포트 드라이버에 관계없이 스토리지 스택 아래로 전송된 펌웨어 다운로드 및 활성화 API에 어떤 일이 발생했는지 확인하려면 다음 이벤트 로그 채널을 참조하세요.

이벤트 뷰어 - 애플리케이션 및 서비스 로그 - Microsoft - Windows - StorDiag - Microsoft-Windows-Storage-ClassPnP/Operational

이 채널은 미니포트 드라이버 및 해당 응답에 전송된 Windows API에 대한 정보를 기록합니다. 예를 들어 SAS에서 SATA로의 필요한 변환을 제대로 구현하지 않는 SAS HBA를 통해 연결된 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이 오류를 throw하고 호출된 함수(즉, 커널 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 또는 번역을 구현하지 않는 것으로 확인되면 SATA(StorAHCI.sys) 및 NVMe(StorNVMe.sys)에 대한 Microsoft 제공 대안으로 교환하거나 SAS 드라이버를 제공한 OEM 또는 HBA 공급업체에 연락하여 적절한 지원을 제공하는 최신 버전이 있는지 쿼리할 수 있습니다.

Microsoft 드라이버로 더 많은 문제 해결(SATA/NVMe)

Windows 네이티브 드라이버, 예를 들어 StorAHCI.sys 혹은 StorNVMe.sys가 스토리지 디바이스 전원 공급에 사용되는 경우 펌웨어 업데이트 작업 중 가능한 오류 사례에 대한 추가 정보를 가져올 수 있습니다.

ClassPnP 운영 채널 외에도 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 레지스터 값을 살펴보겠습니다. ATA ACS 사양을 사용하여 마이크로코드 다운로드 명령 실패 시 아래 값을 디코딩할 수 있습니다.

  • 반환 코드: 0(0000 0000)(해당 없음 - 페이로드가 전송되지 않았기 때문에 의미가 없습니다.)
  • 기능: 15(0000 1111)(비트 1이 '1'로 설정되고 "중단"을 나타냅니다.)
  • SectorCount: 0(0000 0000)(해당되지 않습니다.)
  • DriveHead: 160(1010 0000)(N/A – 사용되지 않는 비트만 설정됩니다.)
  • 명령: 146(1001 0010)(비트 1은 감지 데이터의 가용성을 나타내는 '1'로 설정됩니다.)

이렇게 하면 디바이스에서 펌웨어 업데이트 작업이 중단되었음을 알 수 있습니다.

Windows 네이티브 NVMe 드라이버(StorNVMe.sys)와 함께 NVMe 디바이스를 사용하는 경우 이 채널에서 비슷한 수준의 디버그 정보를 사용할 수 있습니다.