4 KB を超えるシステム ディスク セクター サイズに関連するエラーのトラブルシューティング

この記事では、4 KB を超えるシステム ディスク セクター サイズに関連するWindows 11のインストール中またはSQL Serverの開始中のエラーのトラブルシューティングの解決策について説明します。

現象

シナリオ #1:SQL Server 2019、SQL Server 2017、または SQL Server 2016 をWindows 11 デバイスにインストールすると、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 2019、SQL Server 2017、またはSQL Server 2016 をWindows 10 デバイスにインストールします。 次に、デバイス上の OS をWindows 11にアップグレードします。 Windows 11 デバイスで 2019 年、SQL Server 2017 年、SQL Server 2016 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:SQL Server 2019、SQL Server 2017、またはSQL Server 2016 をWindows 10 デバイスにインストールします。 次に、デバイス上の OS をWindows 11にアップグレードします。 Windows 11 デバイスで 2019 年、SQL Server 2017 年、または SQL Server 2016 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 インスタンスに対して、前のシナリオで説明したエラーが発生する可能性があります。

原因

サービスの起動時に、SQL Serverはデータベースの一貫性を確保するためにデータベース回復プロセスを開始します。 このデータベース復旧プロセスの一部として、システム ファイルとユーザー データベース ファイルを開くアクティビティを試行する前に、基になるファイルシステムの整合性チェックが含まれます。

Windows 11を実行しているシステムでは、一部の新しいストレージ デバイスとデバイス ドライバーによって、サポートされている 4 KB セクター サイズを超えるディスク セクター サイズが公開されます。

この場合、SQL Serverは、現在 512 バイトと 4 KB のセクター ストレージ サイズSQL Serverサポートされているため、サポートされていないファイル システムが原因で開始できません。

この特定の問題が発生したことを確認するには、次のコマンドを実行します。

fsutil fsinfo sectorinfo <volume pathname>

たとえば、E: ボリュームを分析するには、次のコマンドを実行します。

fsutil fsinfo sectorinfo E:

バイト単位で返される値 PhysicalBytesPerSectorForAtomicityを探します。 値 4096 は、セクター ストレージ サイズが 4 KB であることを示します。

さらに、ファイル システムとストレージ セクターサイズのサポートに関する Windows サポート ポリシーに注意してください。 詳細については、Windows の記事で 4 KB セクターのハード ドライブに関する Microsoft サポート ポリシーを 参照してください。

注:

4 KB を超えるセクター サイズと互換性のあるSQL Serverのリリース バージョンはありません。 詳細については、SQL Server記事のハード ディスク ドライブセクターサイズのサポート境界に関する記事を参照してください。

解決策

Microsoft は現在、この問題を調査しています。

のいずれかの 解決策を検討してください。

  • このシステムに複数のドライブがある場合は、SQL Serverのインストールが完了した後、データベース ファイルの別の場所を指定できます。 コマンドのクエリを実行 fsutil するときに、サポートされているセクター サイズがドライブに反映されていることを確認します。 SQL Serverは現在、512 バイトと 4096 バイトのセクター ストレージ サイズをサポートしています。

  • レジストリ キーを追加すると、Windows 11以降の動作がWindows 10に似ています。 これにより、セクター サイズは強制的に 4 KB としてエミュレートされます。 レジストリ キーを ForcedPhysicalSectorSizeInBytes 追加するには、レジストリ エディターを使用するか、管理者として実行される Windows コマンド プロンプトまたは PowerShell で次のいずれかのコマンドを実行します。

    重要

    このセクションには、Windows レジストリを変更する方法を説明する手順が含まれています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 保護を強化するため、レジストリを変更する前にレジストリをバックアップします。 こうしておけば、問題が発生した場合にレジストリを復元できます。 レジストリをバックアップおよび復元する方法の詳細については、Windows のレジストリ をバックアップおよび復元する方法 に関する記事を参照してください。

    レジストリ エディター

    1. Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device に移動します。
    2. [編集] メニューの [新規] をポイントし、[複数文字列] の値を選択します。 名前を付けます ForcedPhysicalSectorSizeInBytes
    3. 新しい値を変更し、次のように * 4095入力します。 [ OK] を クリックし、レジストリ エディターを閉じます。

    管理者としてのコマンド プロンプト

    1. キーを追加します。
    REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes" /t   REG_MULTI_SZ /d "* 4095" /f
    
    1. キーが正常に追加されたかどうかを検証します。
    REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes"
    

    管理者としての PowerShell

    1. キーを追加します。
    New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name   "ForcedPhysicalSectorSizeInBytes" -PropertyType MultiString -Force -Value "* 4095"
    
    1. キーが正常に追加されたかどうかを検証します。
    Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name   "ForcedPhysicalSectorSizeInBytes"
    
  • トレース フラグ 1800 を指定することで、SQL Serverを開始できます。 詳細については、「 DBCC TRACEON」を参照してください。 このトレース フラグは、既定では有効になっていません。 トレース フラグ 1800 では、SQL Serverがすべての読み取りと書き込みのセクター サイズとして 4 KB を使用するように強制されます。 物理セクター サイズが 4 KB を超えるディスクでSQL Serverを実行している場合、トレース フラグ 1800 を使用すると、ネイティブの 4 KB ドライブがシミュレートされます。これは、SQL Serverでサポートされているセクター サイズです。

  • 代わりに、使用可能なWindows 10デバイスにSQL Serverをインストールします。

詳細情報

ネイティブ NVMe ドライバー Windows 11、ファイルシステム ドライバーからエミュレートされる情報に依存するのではなく、NVMe ストレージ デバイスによって直接報告される実際のセクター サイズを含めるために更新されました。

Windows 10 ドライバーは、物理ストレージのソース セクター サイズを報告しません。

改善されたWindows 11 ドライバーは、一般的な NVMe ストレージ デバイスが使用しているエミュレーションを無視します。 たとえば、 fsutil Windows で必要な 4 KB セクター サイズをエミュレートするのではなく、8 KB または 16 KB のセクター サイズを表示します。

次の表に、オペレーティング システムによって報告されるセクター サイズの比較を示します。 この例では、同じストレージ デバイスを使用するWindows 10とWindows 11の違いを示します。 値のPhysicalBytesPerSectorForAtomicity場合、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

関連項目