身边的设备都陆续用到了Win11,只有公司常用的一台电脑没有更新,前天把250G的三星850EVO换成了PCIE3.0 M.2接口的980,因为只是用作系统盘就买了500G的,到手之后用三星系统迁移软件“Data Migration”做了无损的系统迁移,后续又加入windows预览体验计划在win10的基础上在线升级win11,经过半个晚上和大半个上午的折腾系统升级到了win11,这次升级感觉比上次的体验好了许多,之前也是这台电脑,更新之后我又回退到了win10。
一、问题描述
升级过后遇到的第一个问题时SQL Server的服务无法启动,手动去开启服务提示:“请求失败或服务未及时响应 有关详细信息”,单单看这个弹窗的话看不到该怎么解决,直接把这个信息拿去搜索都有点扯,打开windows的事件管理器可以发现每次启动SQLServer的服务都会有一个错误信息:无法使用文件 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\mastlog.ldf',因为最初格式化此文件时所用扇区大小为 4096,而目前所在卷的扇区大小为 16384。请将此文件移到其扇区大小小于或等于原始扇区大小的卷。
二、问题原因
经过查询得知这个问题是由磁盘的扇区大小引起的。
在服务启动期间,SQL Server 会启动数据库恢复过程以确保数据库的一致性。此数据库恢复过程的一部分涉及在尝试打开系统和用户数据库文件的活动之前对底层文件系统进行一致性检查。
在运行 Windows 11 的系统上,一些新的存储设备和设备驱动程序将公开一个大于支持的 4 KB 扇区大小的磁盘扇区大小。发生这种情况时,由于文件系统不受支持,SQL Server 将无法启动,因为 SQL Server 当前支持 512 字节和 4 KB 的扇区存储大小。
可以通过运行以下命令来确认您是否遇到了此特定问题:
fsutil fsinfo sectorinfo C:
查找值 PhysicalBytesPerSectorForAtomicity,以字节为单位返回。返回值 4096 表示扇区存储大小为 4 KB,我这边返回的数值是16384,所以很明显,问题就是它了。
三、 解决方案
可以通过添加一个注册表项将 Windows 11 及更高版本操作系统的行为类似于 Windows 10。这将强制把扇区大小模拟为 4 KB 大小。要添加 ForcedPhysicalSectorSizeInBytes 注册表项,请使用注册表编辑器(win+R,运行regedit),另外也可以在 Windows 命令提示符或 PowerShell 中以管理员身份运行命令
1、打开注册表编辑器手动添加
2、以管理员身份运行命令提示符
添加注册表
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"
3、以管理员身份运行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"
四、验证扇区大小
fsutil fsinfo sectorinfo C:
参考链接:Windows 11 操作系统 sqlserver 2016安装失败,错误代码为 0x851A001A – 等待数据库引擎恢复句柄失败_爱运动的IT男的博客-CSDN博客
作者:晨岩
本站所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!