4 KB を超えるシステム ディスク セクター サイズに関連するエラーのトラブルシューティング
この記事では、Windows 11 および Windows Server 2022 で SQL Server のインストール中またはインスタンスの起動中に起きるエラーのトラブルシューティングに関する解決策について説明します。 この記事は、リリースされた全バージョンの SQL Server に対して有効です。
この記事で説明するエラーは、4 KB を超えるシステム ディスク セクター サイズに関連しています。
適用対象: 全バージョンの SQL Server
現象
シナリオ #1: Windows 11 デバイスに任意のバージョンの SQL Server をインストールします。 次に、SQL Server のデータベース エンジン サービス コンポーネントに関して次のメッセージのようなエラーが表示されます。
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: 任意のバージョンの SQL Server を Windows 10 デバイスにインストールします。 次に、デバイスの 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
Note
手動でインストールした SQL Server インスタンス、またはアプリケーションによってインストールされた LocalDB インスタンスでは、前のシナリオで説明したエラーが発生する可能性があります。
シナリオ #5: 4 KB を超えるセクター サイズを使用しようとすると、次のエラー メッセージが表示されます。
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 を実行しているシステムでは、一部の新しいストレージ デバイスとデバイス ドライバーが、サポートされている 4 KB のセクター サイズを超えるディスク セクター サイズを公開します。
この場合、SQL Server は現在、512 バイトと 4 KB のセクター ストレージ サイズをサポートしているため、サポートされていないファイル システムが原因で SQL Server を起動できなくなります。
この特定の問題が発生していることを確認するには、次のコマンドを実行します。
fsutil fsinfo sectorinfo <volume pathname>
たとえば、E: ボリュームを分析するには、次のコマンドを実行します。
fsutil fsinfo sectorinfo E:
バイト単位で返される値 PhysicalBytesPerSectorForAtomicity
と PhysicalBytesPerSectorForPerformance
を探し、これらの値が異なる場合は、最大の値を保持してディスク セクター サイズを確認します。 値 4096 は、セクターのストレージ サイズが 4 KB であることを示しています。
また、ファイル システムとストレージ セクター サイズのサポートに関する Windows サポート ポリシーにも注意してください。 詳細については、「Windows の 4KB セクター ハード ドライブに対する Microsoft サポート ポリシー」の記事を参照してください。
Note
4 KB を超えるセクター サイズと互換性のある SQL Server のリリース済みバージョンはありません。 詳細については、「SQL Server でのハード ディスク ドライブのセクター サイズに関するサポート範囲」の記事を参照してください。
解決策
Microsoft では現在、この問題を調査しています。
次の解決策のいずれかを検討してください。
このシステムに複数のドライブがある場合は、SQL Server のインストールが完了した後で、データベース ファイルに別の場所を指定できます。
fsutil
コマンドのクエリを実行するときに、ドライブにサポートされているセクター サイズが反映されていることを確認してください。 SQL Server は現在、512 バイトと 4096 バイトのセクター ストレージ サイズをサポートしています。レジストリ キーを追加して、Windows 11 以降の動作を Windows 10 と同様にすることができます。 これにより、セクター サイズが 4 KB としてエミュレートされます。
ForcedPhysicalSectorSizeInBytes
レジストリ キーを追加するには、レジストリ エディターを使用するか、管理者としての PowerShell セクションの説明に従ってコマンドを実行します。 この変更を有効にするには、レジストリ キーを追加した後にデバイスを再起動する必要があります。重要
このセクションには、Windows レジストリの変更方法を説明する手順が記載されています。 ただし、レジストリの変更が不適切だと深刻な問題が発生することがあります。 したがって、次の手順を注意深く実行してください。 保護のために、レジストリを変更する前に、バックアップします。 その後、問題が起こった場合は、レジストリを復元できます。 レジストリのバックアップ方法と復元方法の詳細については、「Windows におけるレジストリのバックアップ方法と復元方法」を参照してください。
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device
に移動します。- [編集] メニューで [新規] をポイントし、[複数行文字列値] をクリックします。 これに
ForcedPhysicalSectorSizeInBytes
という名前を付けます。 - 新しい値を変更し、
* 4095
と入力します。 [OK] を選択し、レジストリ エディターを閉じます。
キーを追加します。
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"
SQL Server を起動するには、トレース フラグ 1800 を指定します。 詳細については、「DBCC TRACEON」を参照してください。 既定では、このトレース フラグは有効になっていません。 トレース フラグ 1800 は、SQL Server がすべての読み取り操作と書き込み操作のセクター サイズに 4 KB を使用するように強制します。 物理セクター サイズが 4 KB を超えるディスクで SQL Server を実行している場合、トレース フラグ 1800 を使用すると、SQL Server でサポートされているセクター サイズの、4 KB のネイティブ ドライブがシミュレートされます。
代わりに、利用可能な Windows 10 デバイスに SQL Server をインストールします。
詳細
Windows 11 のネイティブ NVMe ドライバーが、NVMe ストレージ デバイスに直接報告された実際のセクター サイズを含むように更新されました。 これは、ファイル システム ドライバーからエミュレートされた情報に依存せずに実行されました。
Windows 10 ドライバーは、物理ストレージのソース セクター サイズを報告しません。
改善された Windows 11 ドライバーは、一般的な NVMe ストレージ デバイスが使用しているエミュレーションを無視します。 たとえば、Windows で必要な 4 KB のセクター サイズをエミュレートするのではなく、fsutil
で 8 KB または 16 KB のセクター サイズを表示します。
次の表は、オペレーティング システムによって報告されるセクター サイズの比較を示しています。 この例では、同じストレージ デバイスを使用した Windows 10 と Windows 11 の違いを示しています。 PhysicalBytesPerSectorForAtomicity
と PhysicalBytesPerSectorForPerformance
の値を使用した場合、Windows 10 では 4 KB、Windows 11 では 16 KB と表示されます。
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 |