Устранение ошибок, связанных с размером сектора системного диска более 4 КБ

В этой статье приведены решения для устранения ошибок во время установки или запуска SQL Server на Windows 11, связанных с размером сектора системного диска более 4 КБ.

Симптомы

Сценарий No 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 устройстве. Затем обновите ОС на устройстве до Windows 11. При попытке запустить SQL Server 2019, SQL Server 2017 или SQL Server 2016 на устройстве Windows 11 служба не запускается, и в журнале ошибок 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 устройстве. Затем обновите ОС на устройстве до Windows 11. При попытке запустить SQL Server 2019, SQL Server 2017 или SQL Server 2016 на устройстве Windows 11 не удается запустить службу. В журнале 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. LocalDB устанавливается на Windows 11 устройстве. Установка завершается сбоем, и в 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 КБ.

В этом случае SQL Server не сможет запуститься из-за неподдерживаемой файловой системы, так как SQL Server в настоящее время поддерживает размер хранилища сектора 512 байт и 4 КБ.

Чтобы убедиться, что возникла эта проблема, выполните следующую команду:

fsutil fsinfo sectorinfo <volume pathname>

Например, чтобы проанализировать том E: выполните следующую команду:

fsutil fsinfo sectorinfo E:

Найдите значение, PhysicalBytesPerSectorForAtomicityвозвращаемое в байтах. Значение 4096 указывает размер хранилища сектора 4 КБ.

Кроме того, следует учитывать политику поддержки Windows для поддержки размера файловой системы и сектора хранилища. Дополнительные сведения см. в статье о политике поддержки Майкрософт для жестких дисков сектора размером 4 КБ в Windows .

Примечание.

Не существует выпущенной версии SQL Server с размером сектора больше 4 КБ. Дополнительные сведения см. в разделе о границах поддержки размера сектора жесткого диска в SQL Server статье.

Решения

В настоящее время корпорация Майкрософт изучает эту проблему.

Рассмотрим одно из следующих решений:

  • Если в этой системе несколько дисков, можно указать другое расположение для файлов базы данных после SQL Server установки. Убедитесь, что диск отражает поддерживаемый размер сектора при запросе fsutil команд. SQL Server в настоящее время поддерживает размер хранилища сектора 512 байт и 4096 байт.

  • Можно добавить раздел реестра, который приведет к тому, что поведение Windows 11 и более поздних версий будет аналогично Windows 10. Это приведет к принудительному эмуляции размера сектора в 4 КБ. Чтобы добавить раздел ForcedPhysicalSectorSizeInBytes реестра, используйте редактор реестра или выполните одну из следующих команд в командной строке Windows или PowerShell от имени администратора.

    Важно!

    В этом разделе содержатся инструкции по изменению реестра Windows. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Дополнительные сведения о резервном копировании и восстановлении реестра см. в статье о резервном копировании и восстановлении реестра в Windows .

    Редактор реестра

    1. Перейдите по адресу Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device.
    2. В меню "Правка " наведите указатель мыши на пункт "Создать", а затем выберите значение с несколькими строками. Приведите имя ForcedPhysicalSectorSizeInBytes.
    3. Измените новое значение, введите .* 4095 Нажмите кнопку " ОК" и закройте редактор реестра.

    Командная строка от имени администратора

    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"
    
  • Вы можете начать SQL Server, указав флаг трассировки 1800. Дополнительные сведения см. в разделе DBCC TRACEON. Этот флаг трассировки не включен по умолчанию. Флаг трассировки 1800 SQL Server использовать 4 КБ в качестве размера сектора для всех операций чтения и записи. При запуске SQL Server на дисках с размером физического сектора больше 4 КБ использование флага трассировки 1800 имитирует собственный диск размером 4 КБ, который является поддерживаемым размером сектора для SQL Server.

  • Установите SQL Server на доступных Windows 10 устройствах.

Дополнительные сведения

Windows 11 драйверы NVMe были обновлены, чтобы включить фактический размер сектора, сообщаемого непосредственно устройствами хранения NVMe, вместо того чтобы полагаться на сведения, эмулированные драйверами файловой системы.

Драйверы Windows 10 не сообщает размер исходного сектора физического хранилища.

Улучшенные драйверы Windows 11 игнорируют эмуляцию, которую используют распространенные устройства хранения NVMe. Например, fsutil отображает размер сектора 8 КБ или 16 КБ вместо эмуляции требуемого размера сектора в 4 КБ, необходимого Windows.

В следующей таблице приведено сравнение размеров секторов, сообщаемых операционными системами. В этом примере показаны различия между Windows 10 и Windows 11 с использованием одного и того же устройства хранения. Для значения параметра PhysicalBytesPerSectorForAtomicityWindows 10 4 КБ, а Windows 11 16 КБ.

Пример выходных данных 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

См. также