4KB보다 큰 시스템 디스크 섹터 크기와 관련된 오류 문제 해결
이 문서에서는 Windows 11 및 Windows Server 2022에서 SQL Server 인스턴스를 설치하거나 시작하는 동안 오류를 해결하는 솔루션을 제공합니다. 이 문서는 릴리스된 모든 SQL Server 버전에 유효합니다.
이 문서에서 설명하는 오류는 4KB보다 큰 시스템 디스크 섹터 크기와 관련이 있습니다.
적용 대상: SQL Server 모든 버전
증상
시나리오 #1: Windows 11 디바이스에 모든 버전의 SQL Server를 설치합니다. 그런 다음 SQL Server의 데이터베이스 엔진 Services 구성 요소에 대한 다음 메시지와 유사한 오류가 표시됩니다.
Feature: Database Engine Services
Status: Failed
Reason for failure: An error occurred during the setup process of the feature.
Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.
Component name: SQL Server Database Engine Services Instance Features
Component error code: 0x851A001A
Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.
시나리오 #2: Windows 10 디바이스에 모든 버전의 SQL Server를 설치합니다. 그런 다음 디바이스의 OS를 Windows 11로 업그레이드합니다. Windows 11 디바이스에서 SQL Server를 시작하려고 하면 서비스가 시작되지 않으며 SQL Server 오류 로그에서 다음과 유사한 항목이 표시됩니다.
2021-11-05 23:42:47.14 spid9s There have been 256 misaligned log IOs which required falling back to synchronous IO. The current IO is on file C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf.
시나리오 #3: Windows 10 디바이스에 모든 버전의 SQL Server를 설치합니다. 그런 다음 디바이스의 OS를 Windows 11로 업그레이드합니다. Windows 11 디바이스에서 SQL Server를 시작하려고 하면 서비스가 시작되지 않습니다. SQL Server 오류 로그에서 다음과 유사한 항목이 표시됩니다.
Faulting application name: sqlservr.exe, version: 2019.150.2000.5, time stamp: 0x5d8a9215
Faulting module name: ntdll.dll, version: 10.0.22000.120, time stamp: 0x50702a8c
Exception code: 0xc0000005
Fault offset: 0x00000000000357ae
Faulting process id: 0x1124
Faulting application start time: 0x01d7bf67449d262c
Faulting application path: C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Binn\sqlservr.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
시나리오 #4: Windows 11 디바이스에 LocalDB를 설치합니다. 설치가 실패하고 SQL Server 오류 로그에서 다음과 유사한 항목이 표시됩니다.
2021-12-15 23:25:04.28 spid5s Cannot use file 'C:\Users\Administrator\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\TestInstance\master.mdf' because it was originally formatted with sector size 4096 and is now on a volume with sector size 16384. Move the file to a volume with a sector size that is the same as or smaller than the original sector size.
Windows 11 애플리케이션 이벤트 로그에서 다음과 유사한 항목이 표시됩니다.
Message : Windows API call WaitForMultipleObjects returned error code: 575. Windows system error message is: {Application Error}
The application was unable to start correctly (0x%lx). Click OK to close the application.
Reported at line: 3621.
Source : SQLLocalDB 11.0
참고 항목
수동으로 설치한 SQL Server 인스턴스 또는 애플리케이션에서 설치한 LocalDB 인스턴스에 대한 이전 시나리오에서 언급한 오류가 발생할 수 있습니다.
시나리오 #5: 4KB보다 큰 섹터 크기를 사용하려고 하면 다음 오류 메시지가 표시됩니다.
Error: 5179, Severity: 16, State: 1.
Cannot use file 'data file path', because it is on a volume with sector size 8192. SQL Server supports a maximum sector size of 4096 bytes. Move the file to a volume with a compatible sector size.
원인
서비스를 시작하는 동안 SQL Server는 데이터베이스 일관성을 보장하기 위해 데이터베이스 복구 프로세스를 시작합니다. 이 데이터베이스 복구 프로세스의 일부에는 시스템 및 사용자 데이터베이스 파일을 열기 전에 기본 파일 시스템에 대한 일관성 검사가 포함됩니다.
Windows 11을 실행하는 시스템에서 일부 새 스토리지 디바이스 및 디바이스 드라이버는 지원되는 4KB 섹터 크기보다 큰 디스크 섹터 크기를 노출합니다.
이 경우 SQL Server는 현재 512바이트 및 4KB의 섹터 스토리지 크기를 지원하므로 지원되지 않는 파일 시스템으로 인해 SQL Server를 시작할 수 없습니다.
다음 명령을 실행하여 이 특정 문제가 발생하는지 확인할 수 있습니다.
fsutil fsinfo sectorinfo <volume pathname>
예를 들어 E: 볼륨을 분석하려면 다음 명령을 실행합니다.
fsutil fsinfo sectorinfo E:
값 및 PhysicalBytesPerSectorForPerformance
반환된 바이트 단위를 찾고, 값이 다른 경우 디스크 섹터 크기를 확인하기 위해 가장 큰 값을 PhysicalBytesPerSectorForAtomicity
유지합니다. 값 4096은 섹터 스토리지 크기가 4KB임을 나타냅니다.
또한 파일 시스템 및 스토리지 섹터 크기 지원에 대한 Windows 지원 정책을 알고 있어야 합니다. 자세한 내용은 Windows 문서의 4KB 섹터 하드 드라이브에 대한 Microsoft 지원 정책을 참조하세요.
참고 항목
4KB보다 큰 섹터 크기와 호환되는 릴리스 버전의 SQL Server는 없습니다. 자세한 내용은 SQL Server 문서의 하드 디스크 드라이브 섹터 크기 지원 경계를 참조하세요.
해결 방법
Microsoft는 현재 이 문제를 조사하고 있습니다.
다음 솔루션 중 하나를 고려합니다.
이 시스템에 드라이브가 여러 개 있는 경우 SQL Server 설치가 완료된 후 데이터베이스 파일의 다른 위치를 지정할 수 있습니다. 명령을 쿼리
fsutil
할 때 드라이브가 지원되는 섹터 크기를 반영하는지 확인합니다. SQL Server는 현재 512바이트 및 4096바이트의 섹터 스토리지 크기를 지원합니다.레지스트리 키를 추가할 수 있습니다. 그러면 Windows 11 이상의 동작이 Windows 10과 유사하게 됩니다. 이렇게 하면 섹터 크기가 4KB로 에뮬레이트됩니다. 레지스트리 키를 추가
ForcedPhysicalSectorSizeInBytes
하려면 PowerShell에서 관리자 권한으로 설명한 대로 레지스트리 편집기를 사용하거나 명령을 실행합니다. 이 변경 내용이 적용되려면 레지스트리 키를 추가한 후 디바이스를 다시 부팅해야 합니다.Important
이 섹션에는 Windows 레지스트리를 수정하는 방법을 알려주는 단계가 포함되어 있습니다. 하지만 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다. 따라서 다음 단계를 신중하게 수행해야 합니다. 추가 보호를 위해 레지스트리를 수정하기 전에 백업합니다. 그러면 문제가 발생할 경우 레지스트리를 복원할 수 있습니다. 레지스트리를 백업하고 복원하는 방법에 대한 자세한 내용은 Windows 문서에서 레지스트리를 백업 및 복원하는 방법을 참조하세요.
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device
으로 이동합니다.- 편집 메뉴에서 새로 만들기를 가리킨 다음 다중 문자열 값을 선택합니다. 이 EventHandler의 이름을
ForcedPhysicalSectorSizeInBytes
로 지정합니다. - 새 값을 수정하고 .를 입력합니다
* 4095
. 확인을 선택하고 레지스트리 편집기를 닫습니다.
키를 추가합니다.
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes" /t REG_MULTI_SZ /d "* 4095" /f
키가 성공적으로 추가되었는지 확인합니다.
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes"
키를 추가합니다.
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name "ForcedPhysicalSectorSizeInBytes" -PropertyType MultiString -Force -Value "* 4095"
키가 성공적으로 추가되었는지 확인합니다.
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name "ForcedPhysicalSectorSizeInBytes"
추적 플래그 1800을 지정하여 SQL Server를 시작할 수 있습니다. 자세한 내용은 DBCC TRACEON을 참조 하세요. 이 추적 플래그는 기본적으로 사용하도록 설정되지 않습니다. 추적 플래그 1800은 SQL Server가 모든 읽기 및 쓰기 작업에 대해 섹터 크기로 4KB를 사용하도록 강제합니다. 실제 섹터 크기가 4KB보다 큰 디스크에서 SQL Server를 실행하는 경우 추적 플래그 1800을 사용하면 SQL Server에서 지원되는 섹터 크기인 네이티브 4KB 드라이브를 시뮬레이션합니다.
대신 사용 가능한 Windows 10 디바이스에 SQL Server를 설치합니다.
자세한 정보
Windows 11 네이티브 NVMe 드라이버는 NVMe 스토리지 디바이스에서 직접 보고한 실제 섹터 크기를 포함하도록 업데이트되었습니다. 이 작업은 파일 시스템 드라이버에서 에뮬레이트된 정보에 의존하지 않고 수행되었습니다.
Windows 10 드라이버는 실제 스토리지의 원본 섹터 크기를 보고하지 않습니다.
향상된 Windows 11 드라이버는 일반적인 NVMe 스토리지 디바이스에서 사용하는 에뮬레이션을 무시합니다. 예를 들어 fsutil
Windows에 필요한 필수 4KB 섹터 크기를 에뮬레이트하는 대신 8KB 또는 16KB의 섹터 크기를 표시합니다.
다음 표에서는 운영 체제에서 보고한 섹터 크기를 비교합니다. 이 예제에서는 동일한 스토리지 디바이스를 사용하는 Windows 10과 Windows 11의 차이점을 보여 줍니다. 값의 PhysicalBytesPerSectorForAtomicity
PhysicalBytesPerSectorForPerformance
경우 Windows 10은 4KB를 표시하고 Windows 11은 16KB를 표시합니다.
의 샘플 출력 fsutil fsinfo sectorinfo <volume pathname>
Windows 10 | Windows 11 |
---|---|
LogicalBytesPerSector : 512 |
LogicalBytesPerSector : 512 |
PhysicalBytesPerSectorForAtomicity : 4096 |
PhysicalBytesPerSectorForAtomicity : 16384 |
PhysicalBytesPerSectorForPerformance : 4096 |
PhysicalBytesPerSectorForPerformance : 16384 |
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096 |
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096 |
Device Alignment : Aligned (0x000) |
Device Alignment : Aligned (0x000) |
Partition alignment on device : Aligned (0x000) |
Partition alignment on device : Aligned (0x000) |
No Seek Penalty |
No Seek Penalty |
Trim Supported |
Trim Supported |
Not DAX capable |
Not DAX capable |
Not Thinly-Provisioned |
Not Thinly-Provisioned |