SQL Server 安裝在 Windows Server Azure 虛擬機上因扇區大小錯誤而失敗

適用於: SQL Server、Azure VM (Windows) 上的 SQL Server

總結

本文將協助你解決在執行 Windows 的 Microsoft Azure 虛擬機(VM)上手動安裝 SQL Server 實例時所發生的問題。 當你在使用 NVMe 磁碟且原生扇區大小大於 4 KB 的 Azure 虛擬機上安裝 SQL Server 時,設定失敗,因為像 master.mdf 這類SQL Server資料檔案無法在扇區大小為 8 KB 的磁碟區上托管。 本文說明為何新版 Azure VM 系列會出現扇區大小不匹配,以及如何強制 4 KB 扇區大小,使 SQL Server 安裝在磁碟上成功。

徵狀

當你在執行 Windows 的 Azure 虛擬機上安裝 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.

這個問題可能發生在本地安裝,但你在 Azure 虛擬機上安裝 SQL Server 時更常見。

原因

這個問題是因為某些 Azure 虛擬機磁碟的扇區大小所致。 較新的 Azure VM 系列如 Dadsv6、Eadsv6 和 Fasv6 採用僅限 NVMe 的儲存介面,且需要支援 NVMe 的作業系統映像。 這些 VM 系列的磁碟預設原生扇區大小為 8 KB,而 SQL Server 不支援資料庫檔案。 SQL Server 支援原生扇區大小為 512 位元組、4 KB 的磁碟。 如果 Azure VM 部署為 8-KB 扇區大小,然後你安裝 SQL Server,安裝可能會失敗。 如需詳細資訊,請參閱 SQL Server 的儲存體類型。

附註

這種情況只適用於你在 Azure VM 上手動安裝 SQL Server 時。 當你從 Azure Marketplace 部署 SQL Server 虛擬機映像時,這不適用,因為這些映像是預先設定成 4 KB 扇區大小。

受影響的磁碟與虛擬機類型

你最常看到的區域大小不匹配是在以下情境:

  • v6 VM 系列的本地 NVMe 磁碟(例如 Dadsv6、Eadsv6、Easv6 和 Fasv6),會暴露 8 KB 的原生扇區大小。
  • Premium SSD v2 和 Ultra Disk:當您建立磁碟時將邏輯扇區大小設為 4096 位元組,但透過回報實體扇區大小為 8 KB 的主機提供存取。

你接在早期 VM 系列的標準硬碟、標準 SSD 和高級 SSD(v1)資料碟通常會有 4 KB 的扇區大小,且不會受到影響。

解決方法

要解決這個問題,可以強制 Azure VM 使用 4-KB 扇區大小,然後重新安裝 SQL Server。

  1. 如果 SQL Server 已經安裝,請卸載它。 否則,請跳到下一步。

  2. 新增 ForcedPhysicalSectorSizeInBytes 登錄鍵。

  3. 請在提升的命令提示字元執行以下指令,確認扇區大小為 4 KB:

    fsutil fsinfo sectorinfo <volume pathname>
    
  4. 重新啟動 Azure VM。

  5. 重新安裝 SQL Server。

以下螢幕擷取畫面顯示 fsutil fsinfo sectorinfo 指令對 E: 磁碟機的輸出;該磁碟機的磁區大小為 8 KB:

8 KB 扇區大小的命令提示字元輸出螢幕快照。

以下螢幕擷取畫面顯示在新增登錄機碼以使用 4-KB 扇區大小後,相同指令針對 E: 磁碟機的輸出:

4 KB 扇區大小的命令提示字元輸出螢幕快照。

ForcedPhysicalSectorSizeInBytes登錄檔金鑰是作業系統層級的設定。 目前已連接的所有磁碟機,以及之後連接的任何磁碟機,在您移除此登錄機碼之前,都會採用 4 KB 扇區大小。