将 Linux 和Windows VM 从 SCSI 转换为 NVMe

Azure虚拟机(VM)支持两个存储控制器接口:小型计算机系统接口(SCSI)和 NVM Express(NVMe)。 SCSI 是一种旧标准,提供计算机和外围设备之间的物理连接和数据传输。 NVMe 提供类似的连接,但对于服务器和存储系统之间的数据传输,这是一个更快、更高效的接口。

本文介绍如何使用 Azure Boost 和 Azure NVMe 转换脚本将 Azure VM 从 SCSI 磁盘控制器转换为 NVMe。 相同的脚本和过程适用于:

  • Linux 和Windows VM。
  • 具有或不带数据磁盘和临时磁盘的 VM。

Azure继续支持提供 SCSI 存储的 VM 产品/服务的 SCSI 接口。 但是,并非所有新的 VM 系列都包括 SCSI 作为未来选项。

你的 VM 将发生哪些变化?

将主机接口从 SCSI 更改为 NVMe 不会更改远程存储(OS 磁盘或数据磁盘)。 它会更改操作系统使用磁盘的方式。

Disk SCSI VM NVMe VM (具有临时磁盘的 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 有助于充分利用这些性能改进,并在云计算环境中保持竞争优势。

将 VM 从 SCSI 迁移到 NVMe

若要从 SCSI 迁移到 NVMe,请执行以下步骤:

  1. 检查 VM 系列是否支持 NVMe。
  2. 检查操作系统的先决条件。
  3. 将 VM 转换为 NVMe。
  4. 验证转换。

注释

运行能够修改启动时间行为、存储驱动程序、筛选器驱动程序或磁盘枚举的第三方软件的自定义 VM 当前不是受支持的迁移方案。 示例包括某些备份、安全性、终结点保护和存储管理产品。 对于这些配置,Azure支持人员可能无法诊断或修正迁移失败。 在继续生产工作负荷之前,先在具有代表性的非生产 VM 上测试转换。

1.检查虚拟机系列是否支持 NVMe

Azure Boost 可用性表列出了支持 NVMe 附加磁盘的 VM 大小。

2.检查先决条件

在开始之前,请确保满足以下先决条件:

  • 一个 Azure 订阅,以及一台你需要从 SCSI 转换为 NVMe 或从 NVMe 转换为 SCSI 的虚拟机
  • PowerShell 和已安装和配置的 Az 模块
  • 在Azure资源上执行脚本的适当权限

3. 用法

若要运行脚本,请以管理员身份打开 PowerShell,并按照以下步骤操作:

  1. 安装 PowerShell。
  1. 允许未签名的 PowerShell 脚本文件。
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
  1. 使用 Connect-AzAccount 连接到你的 Azure 帐户。
Connect-AzAccount -Environment AzureChinaCloud
  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

注释

如果要在具有不同资源(临时)磁盘支持的 VM 大小之间进行转换,则必须为VMTempDiskResizePreview该功能注册Azure订阅。 如果未注册该功能,脚本将退出并显示错误。 使用以下命令注册该功能,等待 10 分钟自动批准生效,然后重新运行脚本。

Register-AzProviderFeature -FeatureName VMTempDiskResizePreview -ProviderNamespace Microsoft.Compute

Example

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

该脚本具有以下参数。

参数 Description 必选
-ResourceGroupName VM 的资源组名称。 是的
-VMName Azure上的 VM 的名称。 是的
-NewControllerType 要将 VM 转换为的存储控制器类型(NVMe 或 SCSI)。 是的
-VMSize 要将该 VM 转换为的 Azure VM SKU。 是的
-StartVM 转换后启动 VM。
-FixOperatingSystemSettings 使用Azure运行命令自动修复 OS 设置。
-WriteLogfile 创建日志文件。
-IgnoreSKUCheck 忽略对 VM SKU 的检查。
-IgnoreWindowsVersionCheck 忽略Windows版本检查。
-IgnoreAzureModuleCheck 不要检查是否已安装 Azure 模块。
-IgnoreOSCheck 请勿检查 OS 就绪情况。 预期 OS 已准备就绪。
-SleepSeconds Azure 在启动 VM 之前使更改生效所需的时间。

此脚本执行以下步骤:

  1. 验证目标 VM SKU 的 Az 模块版本、VM 是否存在、OS 类型、生成、当前控制器类型和 NVMe 功能。
  2. 通过使用 Azure Run Command,借助 -FixOperatingSystemSettings 对用于 NVMe 的来宾操作系统进行验证和配置:
    • 在 Linux 上,检查 NVMe 驱动程序是否在 initrd/initramfs 中,设置 nvme_core.io_timeout=240,并检查 /etc/fstab 中是否存在已弃用的设备名称。
    • 在Windows上,将stornvme驱动程序配置为在启动时启动(sc.exe config stornvme start=boot)。
  3. 停止并解除分配虚拟机。
  4. 将 OS 磁盘从 supportedCapabilities.diskControllerTypes 更新到 SCSI, NVMe
  5. 将 VM 调整为目标 SKU,并将磁盘控制器类型设置为 NVMe。
  6. 启动 VM(使用 -StartVM)。

4.验证转换

使用 PowerShell 进行确认

VM 重启后,确认磁盘控制器类型已成功更改。

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

检查客户机内的结果

使用 nvme 命令检查设备。 nvme如果命令缺失,请安装nvme-cli包。

nvme list

输出显示 OS 磁盘和数据磁盘。

小窍门

你随时可以切换回 SCSI。 该脚本提供成功运行结束时的命令,以还原到原始配置。 在关闭会话之前保存该命令。

如果需要回滚,请使用 -NewControllerType SCSI 和原始 VM SKU 重新运行该脚本:

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