在本文中,我们将讨论将运行 Linux 的虚拟机(VM)从 SCSI 转换为 NVMe 存储的过程。 通过迁移到 NVMe,可以利用其改进的性能和可伸缩性。
SCSI 与 NVMe
Azure VM 支持两种类型的存储接口:小型计算机系统接口(SCSI)和 NVMe。 SCSI 接口是一种旧标准,提供计算机和外围设备之间的物理连接和数据传输。 NVMe 与 SCSI 类似,因为它提供连接和数据传输,但 NVMe 是服务器和存储系统之间数据传输的更快、更高效的接口。
支持 SCSI 接口的虚拟机
Azure 继续支持提供 SCSI 存储的 VM 产品/服务的 SCSI 接口。 但是,并非所有新的 VM 系列都有 SCSI 存储作为未来选项。
您的虚拟机有什么变化?
将主机接口从 SCSI 更改为 NVMe 不会更改远程存储(OS 磁盘或数据磁盘),但更改作系统查看磁盘的方式。
Disk | 已启用 SCSI 的 VM | 具有 SCSI tempdisk 的 NVMe VM(例如Ebds_v5) | 具有 NVMe tempdisk 的 NVMe VM |
---|---|---|---|
OS 磁盘 | /dev/sda | /dev/nvme0n1 | /dev/nvme0n1 |
临时磁盘 | /dev/sdb | /dev/sda | /dev/nvme1n1 |
第一个数据磁盘 | /dev/sdc | /dev/nvme0n2 | /dev/nvme0n2 |
小窍门
某些 VM 类型具有多个临时磁盘(例如E64ds_v6)
在以下部分中,我们提供了一个指南,介绍如何使用 Azure Boost 将 Azure VM 从 SCSI 转换为 NVMe,确保充分利用这些性能改进,并在云计算环境中保持竞争优势。
将虚拟机(VM)从 SCSI 迁移到 NVMe
若要从 SCSI 迁移到 NVMe,需要执行一些步骤:
- 检查虚拟机系列是否支持 NVMe
- 检查操作系统是否支持 NVMe
- 将虚拟机转换为 NVMe
- 检查操作系统
1.检查虚拟机系列是否支持 NVMe
在 Azure Boost 概述站点的可用性表中描述了支持 NVMe 附加磁盘的受支持虚拟机。
2. 检查操作系统是否支持 NVMe
操作系统需要支持 NVMe 设备,例如,需要对设备驱动程序和用于启动期间的临时文件系统 initrdm 进行准备。 此外,还需要验证文件系统的装入点,因为它们检查你是否使用 SCSI 设备名称(/dev/sdX)。
使用迁移脚本时,-FixOperatingSystemSettings
可以自动处理这些就绪检查。
2.1 检查 VM 的控制器类型
2.1.1 使用 PowerShell 检查控制器类型
PS C:\Users\user1> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users\user1> $vm.StorageProfile.DiskControllerType
SCSI
PS C:\Users\user1>
2.1.2 使用 Azure CLI 检查控制器类型
$ az vm show --name [your-vm-name] --resource-group [your-resource-group-name]
{
"additionalCapabilities": {
...
"storageProfile": {
...
"diskControllerType": "SCSI",
...
2.1.3 使用 Azure 门户检查控制器类型
2.2 准备迁移
使用-FixOperatingSystemSettings
参数时,迁移脚本可以自动处理先决条件。
如果要手动处理所需的更改验证
- 已安装的 NVMe 模块,并且是 initrd/initramfs 的一部分。
- GRUB 配置包括参数 nvme_core.io_timeout=240
- /etc/fstab 检查设备是否存在
请与 OS 供应商联系,了解更新 initrd/initramfs 所需的所有命令。
2.2.1 准备 PowerShell
小窍门
在 Azure CloudShell 中运行脚本时不需要此步骤
使用https://aka.ms/powershell安装 PowerShell
使用
Connect-AzAccount
连接到 Azure,并使用Select-AzSubscription -Subscription [your-subscription-id]
选择正确的订阅。使用
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
配置执行策略
2.2.2 下载脚本
可以使用 PowerShell 命令下载脚本
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 ".\NVMe-Conversion.ps1"
2.3 运行迁移
该脚本具有多个可用参数:
参数 | Description | 必选 |
---|---|---|
-ResourceGroupName |
VM 的资源组名称 | 是的 |
-VMName |
Azure 上的虚拟机的名称 | 是的 |
-NewControllerType |
VM 应转换为的存储控制器类型(NVMe 或 SCSI) | 是的 |
-VMSize |
要将 VM 转换为的 Azure VM SKU | 是的 |
-StartVM |
转换后启动 VM | 否 |
-IgnoreSKUCheck |
忽略 VM SKU 的检查 | 否 |
-IgnoreWindowsVersionCheck |
忽略 Windows 版本检查 | 否 |
-FixOperatingSystemSettings |
使用 Azure RunCommands 自动修复 OS 设置 | 否 |
-WriteLogfile |
创建日志文件 | 否 |
-IgnoreAzureModuleCheck |
不要运行检测已安装的 Azure 模块 | 否 |
-IgnoreOSCheck |
不要检查 OS 就绪情况,预期是 OS 已准备就绪 | 否 |
-SleepSeconds |
Azure 在启动 VM 之前解决更改的时间 | 否 |
示例命令:
# Example usage
.\Azure-NVMe-Conversion.ps1 -ResourceGroupName <your-RG> -VMName <your-VMname> -NewControllerType <NVMe/SCSI> -VMSize <new-VM-SKU> -StartVM -FixOperatingSystemSettings
小窍门
始终可以还原回 SCSI,脚本将与你共享命令,以直接还原到原始配置。
2.3.1 示例输出
PS /home/philipp> ./NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType NVMe -VMSize Standard_E4bds_v5 -StartVM -FixOperatingSystemSettings
00:00 - INFO - Starting script Azure-NVMe-Conversion.ps1
00:00 - INFO - Script started at 06/27/2025 15:41:39
00:00 - INFO - Script version: 2025062704
00:00 - INFO - Script parameters:
00:00 - INFO - ResourceGroupName -> testrg
00:00 - INFO - VMName -> testvm
00:00 - INFO - NewControllerType -> NVMe
00:00 - INFO - VMSize -> Standard_E4bds_v5
00:00 - INFO - StartVM -> True
00:00 - INFO - FixOperatingSystemSettings -> True
00:00 - INFO - Script Version 2025062704
00:00 - INFO - Module Az.Compute is installed and the version is correct.
00:00 - INFO - Module Az.Accounts is installed and the version is correct.
00:00 - INFO - Module Az.Resources is installed and the version is correct.
00:00 - INFO - Connected to Azure subscription name: AG-GE-CE-PHLEITEN
00:00 - INFO - Connected to Azure subscription ID: 232b6759-xxxx-yyyy-zzzz-757472230e6c
00:00 - INFO - VM testvm found in Resource Group testrg
00:01 - INFO - VM testvm is running
00:01 - INFO - VM testvm is running Linux
00:01 - INFO - VM testvm is running SCSI
00:02 - INFO - Authentication token is a SecureString
00:02 - INFO - Authentication token received
00:02 - INFO - Getting available SKU resources
00:02 - INFO - This might take a while ...
00:06 - INFO - VM SKU Standard_E4bds_v5 is available in zone 1
00:06 - INFO - Resource disk support matches between original VM size and new VM size.
00:06 - INFO - Found VM SKU - Checking for Capabilities
00:06 - INFO - VM SKU has supported capabilities
00:06 - INFO - VM supports NVMe
00:06 - INFO - Pre-Checks completed
00:06 - INFO - Entering Linux OS section
00:37 - INFO - Script output: Enable succeeded:
00:37 - INFO - Script output: [stdout]
00:37 - INFO - Script output: [INFO] Operating system detected: sles
00:37 - INFO - Script output: [INFO] Checking if NVMe driver is included in initrd/initramfs...
00:37 - INFO - Script output: [INFO] NVMe driver found in initrd/initramfs.
00:37 - INFO - Script output: [INFO] Checking nvme_core.io_timeout parameter...
00:37 - INFO - Script output: [INFO] nvme_core.io_timeout is set to 240.
00:37 - INFO - Script output: [INFO] Checking /etc/fstab for deprecated device names...
00:37 - INFO - Script output: [INFO] /etc/fstab does not contain deprecated device names.
00:37 - INFO - Script output:
00:37 - INFO - Script output: [stderr]
00:37 - INFO - Script output:
00:37 - INFO - Errors: 0 - Warnings: 0 - Info: 7
00:37 - INFO - Shutting down VM testvm
01:18 - INFO - VM testvm stopped
01:18 - INFO - Checking if VM is stopped and deallocated
01:19 - INFO - Setting OS Disk capabilities for testvm_OsDisk_1_165411276cbe459097929b981eb9b3e2 to new Disk Controller Type to NVMe
01:19 - INFO - generated URL for OS disk update:
01:19 - INFO - https://management.chinacloudapi.cn/subscriptions/232b6759-xxxx-yyyy-zzzz-757472230e6c/resourceGroups/testrg/providers/Microsoft.Compute/disks/testvm_OsDisk_1_165411276cbe459097929b981eb9b3e2?api-version=2023-04-02
01:19 - INFO - OS Disk updated
01:19 - INFO - Setting new VM Size from Standard_E4s_v3 to Standard_E4bds_v5 and Controller to NVMe
01:19 - INFO - Updating VM testvm
01:54 - INFO - VM testvm updated
01:54 - INFO - Start after update enabled for VM testvm
01:54 - INFO - Waiting for 15 seconds before starting the VM
02:09 - INFO - Starting VM testvm
03:31 - INFO - VM testvm started
03:31 - INFO - As the virtual machine got started using the script you can check the operating system now
03:31 - INFO - If you have any issues after the conversion you can revert the changes by running the script with the old settings
03:31 - IMPORTANT - Here is the command to revert the changes:
03:31 - INFO - .\Azure-NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType SCSI -VMSize Standard_E4s_v3 -StartVM
03:31 - INFO - Script ended at 06/27/2025 15:45:11
03:31 - INFO - Exiting
PS /home/philipp>
如果在访问操作系统时遇到困难,请尝试检查
用于 Linux 操作系统的串行控制台
Azure 门户中操作系统的屏幕截图
发生某种情况时,始终可以使用脚本末尾所示的命令还原回 SCSI:
.\Azure-NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType SCSI -VMSize Standard_E4s_v3 -StartVM
2.4 检查结果
2.4.1 在 Azure 门户中检查结果
2.4.2 在 PowerShell 中检查结果
PS C:\Users> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>
3. 检查操作系统
3.1 检查设备
可以使用 nvme 命令检查设备(如果缺少 nvme 命令)安装“nvme-cli”包。
nvme list
输出应显示 OS 磁盘和数据磁盘。
3.2 获取 NVMe 的 udev 文件(可选)
在 SCSI 虚拟机上,集成在 waagent(Azure 代理)中的 udev 规则创建了用于 /dev/disk/azure/scsi1/lunX
标识数据磁盘的链接。 由于不再使用 SCSI,因此规则不适用。
在使用两个可用选项之一部署启用 NVMe 的 udev 规则后,可以在目录 /dev/disk/azure/data/by-lun
中看到新的符号链接。 此目录是/dev/disk/azure/scsi1
的替代。
nvme-conversion-vm:/usr/lib/udev/rules.d # ls -l /dev/disk/azure/data/by-lun/
total 0
lrwxrwxrwx 1 root root 19 Jun 7 13:52 0 -> ../../../../nvme0n2
lrwxrwxrwx 1 root root 19 Jun 7 13:52 1 -> ../../../../nvme0n3
nvme-conversion-vm:/usr/lib/udev/rules.d #
3.2.1 手动下载 udev 文件
若要下载新的 udev 规则文件,请使用以下命令:
curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules
然后运行 udevadm control --reload-rules && udevadm trigger
以重新加载 udev 规则。
3.2.2 准备使用 Azure VM utils 安装包
在 /results/cjp256/azure-vm-utils/ 的索引上提供了多个发行版的预编译包。
多个分发版已开始集成包。 可以直接从其存储库安装它。
分销 | 最低版本 |
---|---|
SUSE | SLES 15 SP5 或更高版本 |
Ubuntu | Ubuntu 25.04 或更高版本 |