Compartilhar via


Convertendo máquinas virtuais executando Linux de SCSI para NVMe

Neste artigo, discutiremos o processo de conversão de VMs (máquinas virtuais) executando o Linux do SCSI para o armazenamento NVMe. Ao migrar para o 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 no sentido de fornecer conectividade e transferência de dados, mas o NVMe é uma interface mais rápida e eficiente para a 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 de ofertas de VM que fornecem armazenamento SCSI. No entanto, nem todas as novas séries de VMs têm o armazenamento SCSI como uma opção daqui para frente.

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 alterará 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
Disco do sistema operacional /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

Dica

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 em 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 VM (máquina virtual) do SCSI para o NVMe

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

  1. Verificar se sua série de máquinas virtuais dá suporte ao NVMe
  2. Verificar a preparação para NVMe do sistema operacional
  3. Converter sua máquina virtual em NVMe
  4. Verificar o sistema operacional

1. Verifique se sua série de máquinas virtuais dá suporte ao NVMe

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

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

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

O script de migração pode executar automaticamente essas 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 tela do portal do Azure para verificar o controlador.

2.2 Preparar para a migração

O script de migração pode tomar cuidado automaticamente com os pré-requisitos ao usar o -FixOperatingSystemSettings parâmetro.

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

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

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

2.2.1 Preparação do PowerShell

Dica

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

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

  2. Conectar-se ao Azure usando Connect-AzAccount e selecionar 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 Baixar o 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 VM Yes
-VMName O nome da máquina virtual no Azure Yes
-NewControllerType O tipo de controlador de armazenamento em que a VM deve ser convertida (NVMe ou SCSI) Yes
-VMSize SKU de VM do Azure em que você deseja converter a VM Yes
-StartVM Iniciar a VM após a conversão Não
-IgnoreSKUCheck Ignorar a verificação da 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 instalados do Azure Não
-IgnoreOSCheck Não verifique se há preparação para o sistema operacional, a expectativa é que o sistema operacional esteja pronto Não
-SleepSeconds Hora de o Azure resolver 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

Dica

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

2.3.1 Saída de exemplo
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 desafios para acessar o sistema operacional posteriormente, tente verificar

  • Console Serial para sistemas operacionais Linux

  • Captura de tela do sistema operacional 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 tela 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 seu sistema operacional

3.1 Verificar dispositivos

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

nvme list

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

3.2 Obter arquivo udev para NVMe (opcional)

Em máquinas virtuais SCSI, as regras de udev integradas ao waagent (agente do Azure) 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. Esse diretório é o substituto de /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 udev, use este comando: curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/Azure-NVMe-Utils/88-azure-nvme-data-disk.rules e execute udevadm control --reload-rules && udevadm trigger para recarregar as regras de udev.

3.2.2 Instalar pacotes usando utilitários de VM do Azure

Há pacotes pré-compilados disponíveis no Índice de /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 no repositório.

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