Converter VMs Linux e Windows de SCSI para NVMe

Azure VMs (máquinas virtuais) dão suporte a dois tipos de interfaces de armazenamento: SCSI (Small Computer System Interface) e NVM Express (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.

Neste artigo, você aprenderá a converter Azure VMs executando Linux ou Windows de um controlador de disco SCSI em NVMe usando Azure Boost e o script de conversão de NVMe Azure.

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 altera a maneira como o sistema operacional usa os discos.

Disk VM habilitada para SCSI VM NVMe com disco temporário 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).

Converter sua VM Azure do SCSI em NVMe usando Azure Boost pode ajudá-lo a aproveitar ao máximo essas melhorias de desempenho e manter uma vantagem competitiva no cenário de computação em nuvem.

Migrar uma VM linux do SCSI para o NVMe

Para migrar do SCSI para o NVMe, você precisa seguir estas etapas de alto nível:

  1. Verifique se sua série de máquinas virtuais dá suporte a NVMe.
  2. Verifique se o sistema operacional está pronto para NVMe.
  3. Converta sua máquina virtual em NVMe.
  4. Verifique seu sistema operacional.

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

A tabela de disponibilidade Azure Boost lista as máquinas virtuais com suporte para discos anexados NVMe.

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

O sistema operacional precisa dar suporte a dispositivos NVMe. Por exemplo, você precisa preparar drivers de dispositivos e initrd, o sistema de arquivos temporário usado durante a inicialização. Você também 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 realizar automaticamente essas verificações de prontidão para você ao usar -FixOperatingSystemSettings.

2.1 Verificar o tipo de controlador da VM

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

Captura de tela das propriedades de uma máquina virtual, incluindo o tipo de controlador, no portal do Azure.

2.2 Preparar para a migração

O script de migração pode cuidar automaticamente dos pré-requisitos quando você usa o -FixOperatingSystemSettings parâmetro.

Se você quiser fazer as alterações necessárias manualmente, valide-as:

  • Os módulos NVMe são instalados e fazem parte do initrd/initramfs.
  • A configuração do GRUB inclui o parâmetro nvme_core.io_timeout=240.
  • /etc/fstab verifica dispositivos.

Verifique 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

Essa etapa não é necessária quando você executa o script no Azure Cloud Shell.

  1. Instale o PowerShell usando a documentação do PowerShell.

  2. Conecte-se ao Azure usando Connect-AzAccount.

  3. Selecione a assinatura correta usando Select-AzSubscription -Subscription [your-subscription-id].

  4. Defina 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 para sua VM. Yes
-VMName O nome da sua VM no Azure. Yes
-NewControllerType O tipo de controlador de armazenamento no qual a VM deve ser convertida (NVMe ou SCSI). Yes
-VMSize A 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 Ignore a validação da SKU da VM. Não
-IgnoreWindowsVersionCheck Ignore a verificação de versão do Windows. Não
-FixOperatingSystemSettings Corrija automaticamente as configurações do sistema operacional usando comandos de execução Azure. Não
-WriteLogfile Crie um arquivo de log. Não
-IgnoreAzureModuleCheck Não execute a verificação de módulos Azure instalados. Não
-IgnoreOSCheck Não verifique se o sistema operacional está pronto. A expectativa é que o sistema operacional esteja pronto. Não
-SleepSeconds O tempo para Azure para resolver as alterações antes de iniciar a VM. Não

Veja um exemplo de comando:

# 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 fornece um comando 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ê não conseguir acessar o sistema operacional posteriormente, verifique:

  • O console serial para sistemas operacionais Linux.
  • A captura de tela do sistema operacional no portal Azure.

Se necessário, 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

Verificar o resultado no portal do Azure

Captura de tela com informações de uma máquina virtual no portal do Azure.

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 nvme comando. Se o nvme comando estiver ausente, instale o nvme-cli pacote usando 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 o arquivo udev para NVMe (opcional)

Em máquinas virtuais SCSI, as regras de udev integradas ao agente waagent 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 habilitadas udev 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 #
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. Em seguida, execute udevadm control --reload-rules && udevadm trigger para recarregar as udev regras.

Pacotes do GitHub prontos para instalar

Pacotes pré-compilados de a coleção GitHub de utilitários e regras de udev para VMs Azure estão disponíveis em Index 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 em seus repositórios.

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

Migrar uma VM Windows do SCSI para o NVMe

Esta seção descreve como converter uma VM Windows de SCSI em NVMe usando o script de conversão NVMe Azure. O script manipula automaticamente a preparação do sistema operacional, a desalocação da VM, a atualização do controlador de disco, o redimensionamento opcional e a reinicialização da VM.

Pré-requisitos

Antes de começar, certifique-se do seguinte:

  • A VM usa a Geração 2 (Gen2). Você não pode converter VMs gen1 em NVMe.

  • A VM executa o Windows Server 2019 ou posterior. Windows Server 2016 e anteriores não têm suporte, a menos que você use -IgnoreWindowsVersionCheck e verifique manualmente a compatibilidade do driver.

  • A SKU de VM de destino dá suporte ao NVMe. Para confirmar, consulte a tabela de disponibilidade Azure Boost.

  • Você não usou o Trusted Launch para configurar sua VM. Você não pode converter VMs configuradas com Inicialização Confiável de SCSI para NVMe.

  • Não há suporte para conversão de uma VM com um disco temporário (por exemplo, Standard_D4ds_v5) em um SKU v6 (por exemplo, Standard_D4ds_v6) por meio desse script. Use instantâneos de disco para esse processo de migração.

    Há suporte para conversão de VMs sem disco temporário (por exemplo, Standard_D4s_v5) para SKUs v6.

  • O software antivírus ou de segurança não Microsoft pode interferir nas alterações de driver feitas durante a conversão. Desabilite-o temporariamente antes de executar o script.

    Se a VM mostrar uma tela azul após a conversão, reverta para SCSI e tente novamente depois de desabilitar sua solução de segurança.

  • O PowerShell com as seguintes versões do módulo Az está instalado:

    • Az.Compute 9.0 ou posterior
    • Az.Accounts 4.0 ou posterior
    • Az.Resources 7.0 ou posterior

Baixar o script

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"

O script faz parte do repositório SAP-on-Azure-Scripts-and-Utilities e é licenciado sob a licença do MIT.

Executar a conversão

Use a opção -FixOperatingSystemSettings para que o script configure automaticamente o stornvme driver para inicialização. Essa configuração é necessária para Windows reconhecer o controlador NVMe após a reinicialização da VM. Omiti-lo exige que você defina o driver manualmente antes da conversão.

.\Azure-NVMe-Conversion.ps1 `
  -ResourceGroupName "<resource-group-name>" `
  -VMName "<vm-name>" `
  -NewControllerType NVMe `
  -VMSize "<target-sku>" `
  -FixOperatingSystemSettings `
  -StartVM `
  -WriteLogfile

O script executa as seguintes etapas automaticamente:

  1. Valida as versões do módulo, a existência da VM, o tipo de sistema operacional, Windows versão, Gen2, o tipo de controlador atual e a funcionalidade NVMe com a SKU da VM.
  2. Opcionalmente, corrige o serviço do driver stornvme (sc.exe config stornvme start=boot) e valida outras configurações do sistema operacional para prontidão para NVMe (com -FixOperatingSystemSettings).
  3. Interrompe e desaloca a VM.
  4. Atualiza supportedCapabilities.diskControllerTypes para SCSI, NVMe no disco do SO por meio de um método REST PATCH.
  5. Redimensiona a VM para a SKU de destino.
  6. Inicia a VM (com -StartVM).

Dica

O script fornece um comando de reversão na saída ao final de uma execução bem-sucedida. Salve esse comando antes de fechar a sessão para que você possa reverter para SCSI, se necessário.

O que muda para sua VM Windows

Ao contrário do Linux, Windows usa letras de unidade em vez de caminhos de dispositivo, portanto, o disco do sistema operacional permanece C:\ após a conversão. No entanto, a interface de disco subjacente é alterada. As atribuições de disco de dados poderão mudar se você não usar identificadores de disco persistentes.

Disk VM habilitada para SCSI VM habilitada para NVMe
Disco do sistema operacional C:\ (inalterado) C:\ (inalterado)
Disco temporário D:\ (normalmente) D:\ (normalmente, RAW nas SKUs v6)
Discos de dados Atribuído por ordem LUN Atribuído pela ordem do namespace NVMe

Importante

Em SKUs v6, os discos temporários são RAW e não são pré-formatados com NTFS. Use um script de inicialização ou uma extensão de script personalizado para formatá-los e montá-los em cada inicialização.

Verificar a conversão

Depois que a VM for reiniciada, confirme se o tipo de controlador de disco foi alterado com êxito.

Confirmar usando o PowerShell

$vm = Get-AzVM -ResourceGroupName "<resource-group-name>" -VMName "<vm-name>"
$vm.StorageProfile.DiskControllerType

A saída deverá ser como a seguinte: NVMe.

Confirmar usando Gerenciador de Dispositivos dentro da VM

  1. Abra Gerenciador de Dispositivos.
  2. Expanda Controladores de armazenamento.
  3. Confirme se o Controlador NVM Express Standard está listado.

Voltar para SCSI

Se você precisar reverter, execute novamente o script com -NewControllerType SCSI e a SKU original da VM:

.\Azure-NVMe-Conversion.ps1 `
  -ResourceGroupName "<resource-group-name>" `
  -VMName "<vm-name>" `
  -NewControllerType SCSI `
  -VMSize "<original-SKU>" `
  -StartVM `
  -WriteLogfile