Устранение ошибок, связанных с размером сектора системного диска, превышающим 4 КБ
В этой статье приведены решения по устранению ошибок во время установки или запуска экземпляра SQL Server в Windows 11 и Windows Server 2022. Эта статья действительна для всех выпущенных версий SQL Server.
Ошибки, рассмотренные в этой статье, связаны с размером сектора системного диска больше 4 КБ.
Область применения: SQL Server всех версий
Симптомы
Сценарий #1. Вы устанавливаете любую версию SQL Server на устройстве с 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 на устройстве с Windows 10. Затем обновите ОС на устройстве до Windows 11. При попытке запустить SQL Server на устройстве с 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 на устройстве с Windows 10. Затем обновите ОС на устройстве до Windows 11. При попытке запустить SQL Server на устройстве с 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, установленного приложениями.
Сценарий #5. Если вы пытаетесь использовать размер сектора выше 4 КБ, появится следующее сообщение об ошибке:
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 КБ.
В этом случае SQL Server не сможет запуститься из-за неподдерживаемой файловой системы, так как SQL Server в настоящее время поддерживает размер хранилища сектора в 512 байтах и 4 КБ.
Вы можете подтвердить, что эта конкретная проблема возникает, выполнив команду:
fsutil fsinfo sectorinfo <volume pathname>
Например, чтобы проанализировать том E, выполните следующую команду:
fsutil fsinfo sectorinfo E:
Найдите значения PhysicalBytesPerSectorForAtomicity
и PhysicalBytesPerSectorForPerformance
, возвращаемые в байтах, и если они отличаются, сохраните самый большой , чтобы определить размер сектора диска. Значение 4096 указывает размер хранилища сектора в 4 КБ.
Кроме того, обратите внимание на политику поддержки Windows для файловой системы и размера сектора хранилища. Дополнительные сведения см. в политике поддержки Майкрософт для жестких дисков с 4 КБ в Windows.
Примечание.
Не выпущена версия SQL Server, совместимая с размерами сектора размером более 4 КБ. Дополнительные сведения см. в границах поддержки размера жесткого диска в статье SQL Server .
Разрешения
Корпорация Майкрософт в настоящее время изучает эту проблему.
Рассмотрим одно из следующих решений:
Если у вас несколько дисков в этой системе, можно указать другое расположение для файлов базы данных после завершения установки SQL Server. Убедитесь, что диск отражает поддерживаемый размер сектора при запросе
fsutil
команд. В настоящее время SQL Server поддерживает размер хранилища сектора в 512 байтах и 4096 байтах.Вы можете добавить раздел реестра, который приведет к тому, что поведение Windows 11 и более поздних версий будет аналогично Windows 10. Это заставляет размер сектора эмулировать как 4 КБ. Чтобы добавить
ForcedPhysicalSectorSizeInBytes
раздел реестра, используйте редактор реестра или выполните команды, как описано в разделе PowerShell с правами администратора . Чтобы это изменение вступило в силу, необходимо перезагрузить устройство после добавления раздела реестра.Внимание
В этом разделе содержатся инструкции по изменению реестра Windows. Однако при неправильном изменении реестра могут возникнуть серьезные проблемы. Поэтому убедитесь, что вы внимательно выполните следующие действия. Для дополнительной защиты создайте резервную копию реестра перед его изменением. В этом случае реестр можно восстановить, если возникнет проблема. Дополнительные сведения о резервном копировании и восстановлении реестра см . в статье о резервном копировании и восстановлении реестра в Windows .
- Перейдите к
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device
. - В меню "Изменить" наведите указатель мыши на "Создать", а затем выберите многострочного значения. Назовите его
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"
PowerShell от имени администратора
Добавьте ключ.
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 КБ в качестве размера сектора для всех операций чтения и записи. При запуске SQL Server на дисках с размером физического сектора больше 4 КБ с помощью флага трассировки 1800 имитирует собственный диск 4 КБ, который является поддерживаемым размером сектора для SQL Server.
Установите SQL Server на доступных устройствах с Windows 10.
Дополнительная информация
Драйверы NVMe для Windows 11 были обновлены, чтобы включить фактический размер сектора, сообщаемый непосредственно устройствами хранилища NVMe. Это было сделано вместо того, чтобы полагаться на информацию, эмулируемую из драйверов файловой системы.
Драйверы Windows 10 не сообщают о размере исходного сектора физического хранилища.
Улучшенные драйверы Windows 11 игнорируют эмуляцию, используемую общими устройствами хранилища NVMe. В качестве примера fsutil
отображается размер сектора размером 8 КБ или 16 КБ, а не эмулировать требуемый размер сектора 4 КБ, необходимый Для Windows.
В следующей таблице представлено сравнение размеров сектора, сообщаемых операционными системами. В этом примере показаны различия между Windows 10 и Windows 11 с использованием одного устройства хранения. Для значений PhysicalBytesPerSectorForAtomicity
и PhysicalBytesPerSectorForPerformance
, Windows 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 |