SQL Server 安装失败,Windows Server 2022 Azure 虚拟机上的扇区大小错误

本文可帮助你解决尝试在运行 Windows 的 Microsoft Azure 虚拟机(VM)上手动安装 SQL Server 实例时发生的问题。

适用于: SQL Server、Azure VM 上的 SQL Server - Windows

症状

尝试在运行 Windows 的 Azure 虚拟机(VM)上安装 SQL Server 实例时,安装会失败,当引擎尝试在安装期间启动时,SQL Server 错误日志中会收到以下错误消息:

无法使用文件“...\master.mdf”,因为它最初采用扇区大小 4096 的格式,现在位于扇区大小为 8192 的卷上。 请将此文件移到其扇区大小小于或等于原始扇区大小的卷。

此外,可以在 SQL Server 安装文件夹中Summary.txt日志文件中看到以下信息:

Detailed results:
  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:          0x851A0019
  Error description:             Could not find the Database Engine startup handle.

本地安装可能会出现此问题,但在 Microsoft Azure 虚拟机(VM)上安装 SQL Server 时可能会遇到此问题。

原因

此问题是由于某些 Azure 虚拟机上磁盘的扇区大小配置导致的。 一些最新的 Azure VM 代(如 Da、Ea 和 Fav6)具有仅限 NVMe 的存储接口,并且需要支持 NVMe 的 OS 映像。 但是,这些最新的 Azure VM 代代部署的默认扇区大小为 8 KB,SQL Server 目前不支持此大小。 SQL Server 当前支持标准本机 扇区大小为 512 字节和 4 KB 的磁盘。

备注

非易失性内存快速(NVMe)是一种通信协议,它通过使用非易失性内存(NVM)促进服务器和存储系统之间的数据传输更快、更高效。 使用 NVMe,可以以最高吞吐量和最快的响应时间传输数据。

如果使用 8 KB 扇区大小部署 Azure 虚拟机,并且部署后尝试安装 SQL Server,则安装可能会失败。

备注

仅当在 Azure VM 上手动安装 SQL Server,而不是从 Azure 市场 部署 SQL Server VM 时,才会发生这种情况。 Azure 市场映像已预先配置为使用 4 KB 扇区大小。

解决方案

若要解决此问题,请在强制 Azure VM 使用 4 KB 扇区大小后重新安装 SQL Server。

若要在 Azure VM 上成功安装 SQL Server,请执行以下步骤:

  1. 如果已安装 SQL Server,请卸载 SQL Server。 否则,请跳到下一步。

  2. 添加 ForcedPhysicalSectorSizeInBytes 注册表项。

  3. 通过在提升的命令提示符中运行以下命令,验证扇区大小是否为 4 KB:

    fsutil fsinfo sectorinfo <volume pathname>

  4. 重启 Azure VM。

  5. 重新安装 SQL Server。

以下屏幕截图显示了驱动器的命令E:fsutil fsinfo sectorinfo输出,该驱动器的大小为 8 KB:

8 KB 扇区大小的命令提示符输出的屏幕截图。

以下屏幕截图显示了更新注册表项以使用 4 KB 扇区大小的驱动器的命令E:输出fsutil fsinfo sectorinfo

4 KB 扇区大小的命令提示符输出的屏幕截图。

ForcedPhysicalSectorSizeInBytes注册表项是 OS 级设置,这意味着当前附加的所有驱动器以及将来附加的驱动器都使用 4 KB 扇区大小,除非删除此注册表项。