你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将运行 Linux 的虚拟机从 SCSI 转换为 NVMe
本文介绍将运行 Linux 的虚拟机 (VM) 从 SCSI 转换为 NVMe 存储的过程。 迁移到 NVMe 后,可以利用其改进的性能和可伸缩性。
SCSI 与 NVMe
Azure VM 支持两种类型的存储接口:小型计算机系统接口 (SCSI) 和 NVMe。 SCSI 接口是一种旧标准,在计算机和外围设备之间提供物理连接和数据传输。 NVMe 与 SCSI 类似,都提供连接和数据传输,但 NVMe 是服务器和存储系统之间更快、更高效的数据传输接口。
注意
配置有受信任启动的 VM 无法从 SCSI 移动到 NVMe。
VM 上的 SCSI 接口支持
Azure 继续支持提供 SCSI 存储的各版本 VM 产品/服务上的 SCSI 接口。 但是,未来并非所有新的 VM 系列都将提供 SCSI 存储作为选项。
VM 会发生哪些变化?
将主机接口从 SCSI 更改为 NVMe 不会更改远程存储(OS 磁盘或数据磁盘),但会更改操作系统识别磁盘的方式。
支持 SCSI 的 VM | 支持 NVMe 的 VM | |
---|---|---|
OS 磁盘 | /dev/sda | /dev/nvme0n1 |
临时磁盘 | /dev/sdb | /dev/sda |
第一个数据磁盘 | /dev/sdc | /dev/nvme0n2 |
在以下部分中,我们提供了一个指南,介绍如何使用 Azure Boost 将 Azure VM 从 SCSI 转换为 NVMe,确保充分利用这些性能改进,并在云计算环境中保持竞争优势。
将虚拟机 (VM) 从 SCSI 迁移到 NVMe
若要从 SCSI 迁移到 NVMe,需要执行一些步骤:
- 检查虚拟机系列是否支持 NVMe
- 检查操作系统是否存在 NVMe 就绪情况
- 将虚拟机转换为 NVMe
- 检查操作系统
1.检查虚拟机系列是否支持 NVMe
支持 NVMe 附加磁盘的受支持虚拟机在可用性表 Azure Boost 概述站点上进行了介绍。
重要
如果未列出 VM 类型,请更改 VM 类型。
2.检查操作系统是否存在 NVMe 就绪情况
操作系统需要支持 NVMe 设备,例如设备驱动程序和 initrdm(启动期间使用的临时文件系统)需要做好准备。 此外,还需要验证文件系统的装入点,因为它们检查你是否使用 SCSI 设备名称 (/dev/sdX)。
为了简化此过程,我们创建了一个 bash 脚本来为你执行预验证。
2.1 检查 VM 的控制器类型
2.1.1 使用 PowerShell 检查控制器类型
PS C:\Users\user1> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users\user1> $vm.StorageProfile.DiskControllerType
SCSI
PS C:\Users\user1>
2.1.2 使用 Azure CLI 检查控制器类型
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
"storageProfile": {
...
"diskControllerType": "SCSI",
...
2.1.3 使用 Azure 门户检查控制器类型
2.2 运行预检检查脚本
bash 脚本不会自动更改系统上的任何内容。 它仅提供有关要运行的命令的建议。
建议包括
- NVMe 模块
- GRUB 配置
- /etc/fstab 检查设备
要开始脚本,请使用以下命令 (curl):
curl -s -S -L https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
As an alternative you can also use wget:
wget --no-verbose -O - https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
Third option is to download the script from the [GitHub repository](https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/NVMe-Preflight-Check) and run it manually.
nvme-conversion-vm:/home/azureuser # curl -s -S -L https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
------------------------------------------------
START of script
------------------------------------------------
------------------------------------------------
OK NVMe Module is installed and available on your VM
------------------------------------------------
------------------------------------------------
ERROR NVMe Module is not loaded in the initramfs image.
mkdir -p /etc/dracut.conf.d
echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
dracut -f -v
------------------------------------------------
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 nvme_core.io_timeout=240"
------------------------------------------------
OK GRUB contains timeouts.
------------------------------------------------
------------------------------------------------
OK fstab file doesn't contain device names
------------------------------------------------
Please crosscheck your /etc/fstab file
------------------------------------------------
END of script
------------------------------------------------
nvme-conversion-vm:/home/azureuser #
在此示例中,initrd 和内核尚未准备好用于 NVMe,请运行 dracut 命令来启用操作系统。
nvme-conversion-vm:/home/azureuser # mkdir -p /etc/dracut.conf.d
nvme-conversion-vm:/home/azureuser # echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
nvme-conversion-vm:/home/azureuser # dracut -f -v
dracut: Executing: /usr/bin/dracut -f -v
...
dracut: *** Creating initramfs image file '/boot/initrd-5.14.21-150500.55.65-default' done ***
nvme-conversion-vm:/home/azureuser # reboot
3.将虚拟机转换为 NVMe
若要转换操作系统,需要执行多个步骤。
更改 OS 磁盘的元数据以包括 NVMe 功能 将 SCSI 控制器更改为 NVMe 此过程是使用 PowerShell 脚本自动执行的。
3.1 下载 PowerShell 脚本
若要从 GitHub 存储库下载 PowerShell 脚本,请使用以下命令:
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-VM-update.ps1" -OutFile ".\azure-nvme-VM-update.ps1"
3.2. 转换虚拟机
若要转换运行脚本,GitHub 存储库中还提供了详细的文档。
例如,可以决定是否应在重新配置后自动启动 VM。
.\azure-nvme-VM-update.ps1 -subscription_id XXXXXXXX-a961-4fb7-88c0-757472230e6c -resource_group_name nvme-conversion -vm_name nvme-conversion-vm -disk_controller_change_to NVMe -vm_size_change_to Standard_E64bds_v5
INFO - OS Disk found
INFO - Access token generated
INFO - Getting VM info
INFO - Getting all VM SKUs available in Region swedencentral
INFO - This will take about a minute ...
INFO - Found VM SKU - Checking for Capabilities
INFO - VM supports NVMe
INFO - Checking for TrustedLaunch
INFO - Checking if VM is stopped and deallocated
INFO - Stopping VM
Tenant: 72f988bf-86f1-41af-91ab-2d7cd011db47
SubscriptionName SubscriptionId Account Environment
---------------- -------------- ------- -----------
XX-XX-XX-XX XXXXXXX-a961-4fb7-88c0-757472230e6c xxxxxx@microsoft.com AzureCloud
OperationId : cf02d28c-c711-4fe5-89fc-854fba31b67a
Status : Succeeded
StartTime : 07.06.2024 15:18:35
EndTime : 07.06.2024 15:19:17
Error :
Name :
INFO - Setting OS Disk to SCSI/NVMe
INFO - Getting VM config to prepare new config
INFO - Setting new VM size
INFO - Setting disk controller for VM
INFO - Updating the VM configuration
RequestId :
IsSuccessStatusCode : True
StatusCode : OK
ReasonPhrase :
INFO - Not starting VM
3.3 检查结果
3.3.1 检查 Azure 门户中的结果
3.3.2 检查 PowerShell 中的结果
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>
4.检查操作系统
4.1 检查设备
可以使用 nvme 命令检查设备,如果缺少 nvme 命令,就安装“nvme-cli”包。
nvme list
输出应显示 OS 磁盘和数据磁盘。
4.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 #
4.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 规则。
4.2.2 准备使用 Azure NVMe utils 安装包
/results/cjp256/azure-nvme-utils/ 的索引上为多种分发提供预编译包。 我们正在努力在所有主要分发版中启用和集成 Azure NVMe utils。