Partilhar via


Convertendo máquinas virtuais executando Linux de SCSI para NVMe

Neste artigo, discutimos o processo de conversão de máquinas virtuais (VM) executando Linux de armazenamento SCSI para NVMe. Ao migrar para NVMe, você pode aproveitar seu desempenho e escalabilidade aprimorados.

SCSI vs NVMe

As VMs do Azure dão suporte a dois tipos de interfaces de armazenamento: Small Computer System Interface (SCSI) e NVMe. A interface SCSI é um padrão herdado que fornece conectividade física e transferência de dados entre computadores e dispositivos periféricos. O NVMe é semelhante ao SCSI na medida em que fornece conectividade e transferência de dados, mas o NVMe é uma interface mais rápida e eficiente para transferência de dados entre servidores e sistemas de armazenamento.

Suporte para VMs de interface SCSI

O Azure continua a dar suporte à interface SCSI nas versões das ofertas de VM que fornecem armazenamento SCSI. No entanto, nem todas as novas séries de VM têm armazenamento SCSI como uma opção no futuro.

O que está mudando para sua VM?

Alterar a interface do host de SCSI para NVMe não altera o armazenamento remoto (disco do sistema operacional ou discos de dados), mas altera a maneira como os sistemas operacionais veem os discos.

Disk VM habilitada para SCSI VM NVMe com tempdisk SCSI (por exemplo, Ebds_v5) VM NVMe com disco temporário NVMe
de disco do SO /dev/sda /dev/nvme0n1 /dev/nvme0n1
Disco temporário /dev/sdb /dev/sda /dev/nvme1n1
Primeiro disco de dados /dev/sdc /dev/nvme0n2 /dev/nvme0n2

Sugestão

Alguns tipos de VM têm mais de um disco temporário (por exemplo, E64ds_v6)

Nas seções a seguir, fornecemos um guia para converter sua VM do Azure de SCSI para NVMe usando o Azure Boost, garantindo que você possa aproveitar ao máximo essas melhorias de desempenho e manter uma vantagem competitiva no cenário de computação em nuvem.

Migrar sua máquina virtual (VM) de SCSI para NVMe

Para migrar de SCSI para NVMe, algumas etapas precisam ser seguidas:

  1. Verifique se a série de máquinas virtuais suporta NVMe
  2. Verifique a prontidão do seu sistema operacional para NVMe
  3. Converta sua máquina virtual em NVMe
  4. Verifique o seu sistema operativo

1. Verifique se a sua série de máquinas virtuais suporta NVMe

As máquinas virtuais com suporte para dar suporte a discos conectados NVMe são descritas no site de visão geral do Azure Boost na tabela de disponibilidade.

2. Verifique se o seu sistema operacional está pronto para NVMe

O sistema operacional precisa suportar dispositivos NVMe, incluindo, por exemplo, drivers de dispositivo e initrdm, o sistema de arquivos temporário usado durante a inicialização, precisa ser preparado. Além disso, você precisa validar os pontos de montagem dos sistemas de arquivos enquanto eles verificam se você usa o nome do dispositivo SCSI (/dev/sdX).

O script de migração automaticamente pode cuidar dessas verificações de preparação para você ao usar o -FixOperatingSystemSettings.

2.1 Verificar o tipo de controlador de VM

2.1.1 Verificar o tipo de controlador usando o 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 Verificar o tipo de controlador usando a CLI do Azure
$ az vm show --name [your-vm-name] --resource-group [your-resource-group-name]
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Verificar o tipo de controlador usando o portal do Azure

Captura de ecrã do portal do Azure para verificar o controlador.

2.2 Preparar a migração

O script de migração pode cuidar automaticamente dos pré-requisitos ao usar o -FixOperatingSystemSettings parâmetro.

Se você quiser cuidar manualmente das alterações necessárias, valide

  • Módulos NVMe instalados e integrados no initrd/initramfs
  • A configuração do GRUB inclui o parâmetro nvme_core.io_timeout=240
  • /etc/fstab verifica dispositivos

Verifique novamente com o fornecedor do seu sistema operacional para cobrir todos os comandos necessários para atualizar o initrd/initramfs.

2.2.1 Preparar o PowerShell

Sugestão

Esta etapa não é necessária ao executar o script no Azure CloudShell

  1. Instalar o PowerShell usando https://aka.ms/powershell

  2. Conecte-se ao Azure usando Connect-AzAccount e selecione a assinatura correta usando Select-AzSubscription -Subscription [your-subscription-id]

  3. Definir a Política de Execução usando Set-ExecutionPolicy -ExecutionPolicy Unrestricted

2.2.2 Faça o download do script

Você pode baixar o script usando um comando do 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 ".\Azure-NVMe-Conversion.ps1"

2.3 Executar a migração

O script tem vários parâmetros disponíveis:

Parâmetro Descrição Obrigatório
-ResourceGroupName O nome do grupo de recursos da sua VM Yes
-VMName O nome da sua Máquina Virtual no Azure Yes
-NewControllerType O tipo de controlador de armazenamento para o qual a VM deve ser convertida (NVMe ou SCSI) Yes
-VMSize SKU da VM do Azure para a qual você deseja converter a VM Yes
-StartVM Inicie a VM após a conversão Não
-IgnoreSKUCheck Ignorar a verificação do SKU da VM Não
-IgnoreWindowsVersionCheck Ignorar a verificação de versão do Windows Não
-FixOperatingSystemSettings Corrigir automaticamente as configurações do sistema operacional usando o Azure RunCommands Não
-WriteLogfile Criar um arquivo de log Não
-IgnoreAzureModuleCheck Não execute a verificação de módulos do Azure instalados Não
-IgnoreOSCheck Não verifique a prontidão do sistema operacional, a expectativa é que o sistema operacional esteja pronto Não
-SleepSeconds Tempo para o Azure liquidar as alterações antes de iniciar a VM Não

Comando de exemplo:

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

Sugestão

Você sempre pode reverter para SCSI, o script compartilhará um comando com você para reverter diretamente para sua configuração original.

2.3.1 Produção da amostra
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: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
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      - Running in Azure Cloud Shell
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.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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>

Se você tiver dificuldades para acessar o sistema operacional depois, tente verificar

  • Console serial para sistemas operacionais Linux

  • Captura de ecrã do sistema operativo no portal do Azure

Quando algo acontece, você sempre pode reverter para SCSI usando o comando mostrado no final do script:

.\Azure-NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType SCSI -VMSize Standard_E4s_v3 -StartVM

2.4 Verifique o resultado

2.4.1 Verificar o resultado no portal do Azure

Captura de ecrã do portal do Azure.

2.4.2 Verificar o resultado no PowerShell
PS C:\Users> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

3. Verifique o seu sistema operativo

3.1 Verificar dispositivos

Você pode verificar os dispositivos usando o comando nvme, se o comando nvme estiver faltando, instale o pacote "nvme-cli".

nvme list

A saída deve mostrar o disco do sistema operacional e os discos de dados. Captura de ecrã de discos de SO e discos de dados.

3.2 Obter arquivo udev para NVMe (Opcional)

As regras de udev integradas no waagent (agente do Azure) em máquinas virtuais SCSI criaram links em /dev/disk/azure/scsi1/lunX para identificar os discos de dados. Como o SCSI não é mais usado, as regras não se aplicam.

Com uma das duas opções disponíveis para implantar regras de udev habilitadas para NVMe, você verá novos links simbólicos no diretório /dev/disk/azure/data/by-lun. Este diretório é o substituto do /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 Download manual do arquivo udev

Para baixar o novo arquivo de regras do udev, use este comando: curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules e, em seguida, execute udevadm control --reload-rules && udevadm trigger para recarregar as regras do udev.

3.2.2 Pronto para instalar pacotes usando utils de VM do Azure

Há pacotes pré-compilados disponíveis no Index of /results/cjp256/azure-vm-utils/ para várias distribuições.

Várias distribuições já começaram a integrar o pacote. Você pode instalá-lo diretamente a partir de seu repositório.

Distribuição Versão mínima
SUSE SLES 15 SP5 ou superior
RedHat RHEL 9.6 ou superior
Ubuntu Ubuntu 25.04 ou superior