將 Linux 和 Windows 虛擬機從 SCSI 轉換成 NVMe

Azure 虛擬機(VM)支援兩種儲存控制器介面:小型電腦系統介面(SCSI)與 NVM Express(NVMe)。 SCSI 是一項舊有標準,提供電腦與周邊設備之間的實體連接與資料傳輸。 NVMe 提供類似的連接性,但更快速且高效地用於伺服器與儲存系統間的資料傳輸。

本文展示了如何利用 Azure Boost 和 Azure NVMe 轉換腳本,將 Azure VM 從 SCSI 磁碟控制器轉換成 NVMe。 同樣的腳本和程序也適用於:

  • Linux 和 Windows 虛擬機。
  • 虛擬機有或沒有資料磁碟和暫存磁碟。

Azure 持續在提供 SCSI 儲存的虛擬機器產品中支援 SCSI 介面。 然而,並非所有新的虛擬機器系列未來都包含 SCSI 作為選項。

你的虛擬機有什麼變化?

將主機介面從 SCSI 改為 NVMe 並不會改變遠端儲存裝置(作業系統磁碟或資料磁碟)。 它改變了作業系統使用光碟的方式。

磁碟 SCSI 虛擬機 NVMe 虛擬機(v5 搭配暫存磁碟) NVMe VM (v6)
作業系統磁碟 /dev/sda /dev/nvme0n1 /dev/nvme0n1
暫存磁碟 /dev/sdb /dev/sda /dev/nvme1n1
第一張資料磁碟 /dev/sdc /dev/nvme0n2 /dev/nvme0n2

利用 Azure Boost 將您的 Azure VM 從 SCSI 轉換成 NVMe,能幫助您充分利用這些效能提升,並在雲端運算領域保持競爭優勢。

將虛擬機從 SCSI 遷移到 NVMe

要從 SCSI 遷移到 NVMe,請依照以下高層次步驟操作:

  1. 檢查你的 VM 系列是否支援 NVMe。
  2. 請檢查你作業系統的前置條件。
  3. 把虛擬機轉成 NVMe。
  4. 確認轉換結果。

Note

目前不支援將執行可修改開機時行為、儲存驅動程式、篩選驅動程式或磁碟列舉之第三方軟體的客製化虛擬機器作為移轉案例。 例如某些備份、安全、端點保護及儲存管理產品。 對於這些配置,Azure 支援可能有限,無法診斷或修復遷移失敗。 在進行生產工作負載前,先在具代表性的非生產虛擬機上測試轉換。

1. 檢查虛擬機器系列是否支援 NVMe

Azure Boost 可用性表列出了支援 NVMe 附加硬碟的虛擬機大小。

2. 檢查先修科目

開始之前,請確定您有下列必要條件:

  • Azure 訂用帳戶,以及一台需要從 SCSI 轉換為 NVMe 或從 NVMe 轉換為 SCSI 的虛擬機器
  • PowerShell 與 Az 模組已安裝並設定
  • 在 Azure 資源上執行指令碼所需的適當權限

3. 使用情況

要執行腳本,請以管理員身份開啟 PowerShell,並依照以下步驟操作:

  1. 安裝PowerShell或在Azure Cloud Shell執行腳本。

小提示

使用 PowerShell 文件安裝 PowerShell。

  1. 允許未簽署的 PowerShell 腳本檔案。
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
  1. 使用 Connect-AzAccount 連線到你的 Azure 帳戶。
Connect-AzAccount
  1. 請確認你已連線至你的訂閱。 要更改訂閱,請使用 Set-AzContext.
Select-AzSubscription -Subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  1. 下載劇本。
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/Azure-NVMe-Utils/Azure-NVMe-Conversion.ps1" -OutFile ".\Azure-NVMe-Conversion.ps1"
  1. 執行轉換腳本。
.\Azure-NVMe-Conversion.ps1

Note

如果您要在具有不同資源 (暫時) 磁碟支援的 VM 規格大小之間進行轉換,您的 Azure 訂用帳戶必須註冊VMTempDiskResizePreview功能。 如果功能未被註冊,腳本會以錯誤方式退出。 請使用以下指令註冊該功能,等待 10 分鐘自動核准生效,然後重新執行腳本。

Register-AzProviderFeature -FeatureName VMTempDiskResizePreview -ProviderNamespace Microsoft.Compute

範例

.\Azure-NVMe-Conversion.ps1 -ResourceGroupName <your-RG> -VMName <your-VMname> -NewControllerType <NVMe/SCSI> -VMSize <new-VM-SKU> -StartVM

該文字包含以下參數。

參數 說明 為必填項目
-ResourceGroupName 你虛擬機的資源群組名稱。 是的
-VMName 你在 Azure 上的虛擬機名稱。 是的
-NewControllerType 用來將虛擬機轉換成(NVMe 或 SCSI)的儲存控制器類型。 是的
-VMSize 要將 VM 轉換成的 Azure VM SKU。 是的
-StartVM 轉換後啟動虛擬機。 否
-FixOperatingSystemSettings 透過使用 Azure 執行指令自動修正作業系統設定。 否
-WriteLogfile 建立一個日誌檔案。 否
-IgnoreSKUCheck 忽略 VM SKU 的檢查。 否
-IgnoreWindowsVersionCheck 忽略 Windows 版本檢查。 否
-IgnoreAzureModuleCheck 不要檢查是否安裝了 Azure 模組。 否
-IgnoreOSCheck 不要檢查作業系統準備度。 預期作業系統已經準備好了。 否
-SleepSeconds Azure 在啟動 VM 前等待變更完成所需的時間。 否

該指令碼會執行下列步驟:

  1. 驗證目標虛擬機 SKU 的 Az 模組版本、虛擬機存在、作業系統類型、世代、當前控制器類型及 NVMe 能力。
  2. With -FixOperatingSystemSettings, 透過 Azure Run 命令驗證並配置訪客作業系統以支援 NVMe:
    • 在 Linux 上,會檢查 NVMe 驅動程式是否位於 initrd/initramfs、設定 nvme_core.io_timeout=240,並檢查 /etc/fstab 中是否有已淘汰的裝置名稱。
    • 在 Windows 上,設定stornvme驅動程式在開機sc.exe config stornvme start=boot時啟動()。
  3. 停止並解除配置虛擬機。
  4. 將作業系統磁碟上的 supportedCapabilities.diskControllerTypes 更新為 SCSI, NVMe。
  5. 將虛擬機調整到目標 SKU 大小,並將磁碟控制器類型設為 NVMe。
  6. 啟動虛擬機(使用 -StartVM)。

4. 驗證轉換結果

請使用 PowerShell 來確認

虛擬機重新啟動後,確認磁碟控制器類型是否成功更改。

$vm = Get-AzVM -ResourceGroupName "<resource-group-name>" -VMName "<vm-name>"
$vm.StorageProfile.DiskControllerType

請在 guest 內查看結果

請使用指令 nvme 檢查裝置。 如果缺少 nvme 指令,請安裝 nvme-cli 套件。

nvme list

輸出顯示作業系統磁碟與資料磁碟。

小提示

你隨時可以還原到 SCSI。 腳本會在成功執行結束時提供指令,讓玩家回復到原本的設定。 關閉會話前先儲存那個指令。

如果您需要回滾,請使用-NewControllerType SCSI和原始 VM SKU 重新執行指令碼:

.\Azure-NVMe-Conversion.ps1 -ResourceGroupName <your-RG> -VMName <your-VMname> -NewControllerType SCSI -VMSize <original-SKU> -StartVM