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,请执行以下步骤:
- 检查 VM 系列是否支持 NVMe。
- 检查操作系统的先决条件。
- 将 VM 转换为 NVMe。
- 验证转换。
注释
运行能够修改启动时间行为、存储驱动程序、筛选器驱动程序或磁盘枚举的第三方软件的自定义 VM 当前不是受支持的迁移方案。 示例包括某些备份、安全性、终结点保护和存储管理产品。 对于这些配置,Azure支持人员可能无法诊断或修正迁移失败。 在继续生产工作负荷之前,先在具有代表性的非生产 VM 上测试转换。
1.检查虚拟机系列是否支持 NVMe
Azure Boost 可用性表列出了支持 NVMe 附加磁盘的 VM 大小。
2.检查先决条件
在开始之前,请确保满足以下先决条件:
- 一个 Azure 订阅,以及一台你需要从 SCSI 转换为 NVMe 或从 NVMe 转换为 SCSI 的虚拟机
- PowerShell 和已安装和配置的 Az 模块
- 在Azure资源上执行脚本的适当权限
3. 用法
若要运行脚本,请以管理员身份打开 PowerShell,并按照以下步骤操作:
- 安装 PowerShell。
小窍门
- 允许未签名的 PowerShell 脚本文件。
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
- 使用
Connect-AzAccount连接到你的 Azure 帐户。
Connect-AzAccount -Environment AzureChinaCloud
- 请确保你已连接到你的订阅。 若要更改订阅,请使用
Set-AzContext。
Select-AzSubscription -Subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- 下载脚本。
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"
- 运行转换脚本。
.\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 之前使更改生效所需的时间。 | 否 |
此脚本执行以下步骤:
- 验证目标 VM SKU 的 Az 模块版本、VM 是否存在、OS 类型、生成、当前控制器类型和 NVMe 功能。
- 通过使用 Azure Run Command,借助
-FixOperatingSystemSettings对用于 NVMe 的来宾操作系统进行验证和配置:- 在 Linux 上,检查 NVMe 驱动程序是否在
initrd/initramfs中,设置nvme_core.io_timeout=240,并检查/etc/fstab中是否存在已弃用的设备名称。 - 在Windows上,将
stornvme驱动程序配置为在启动时启动(sc.exe config stornvme start=boot)。
- 在 Linux 上,检查 NVMe 驱动程序是否在
- 停止并解除分配虚拟机。
- 将 OS 磁盘从
supportedCapabilities.diskControllerTypes更新到SCSI, NVMe。 - 将 VM 调整为目标 SKU,并将磁盘控制器类型设置为 NVMe。
- 启动 VM(使用
-StartVM)。
4.验证转换
使用 PowerShell 进行确认
VM 重启后,确认磁盘控制器类型已成功更改。
$vm = Get-AzVM -ResourceGroupName "<resource-group-name>" -VMName "<vm-name>"
$vm.StorageProfile.DiskControllerType
检查客户机内的结果
小窍门
你随时可以切换回 SCSI。 该脚本提供成功运行结束时的命令,以还原到原始配置。 在关闭会话之前保存该命令。
如果需要回滚,请使用 -NewControllerType SCSI 和原始 VM SKU 重新运行该脚本:
.\Azure-NVMe-Conversion.ps1 -ResourceGroupName <your-RG> -VMName <your-VMname> -NewControllerType SCSI -VMSize <original-SKU> -StartVM