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.

Nota

As VMs configuradas com Inicialização Confiável não podem ser movidas de SCSI para NVMe.

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.

VM habilitada para SCSI VM habilitada para NVMe
Disco do SO /dev/sda /dev/nvme0n1
Disco temporário /dev/sdb /dev/sda
Primeiro disco de dados /dev/sdc /dev/nvme0n2

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.

Importante

Se o tipo de VM não estiver listado, altere o tipo de VM.

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).

Para facilitar esse processo, criamos um script bash que faz a pré-validação para você.

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 nvme-conversion-vm
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 nvme-conversion-vm --resource-group nvme-conversion
{
"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 Executar script de verificação de comprovação

O script bash não muda automaticamente nada no seu sistema. Ele fornece apenas recomendações para a execução de comandos.

As recomendações incluem:

  • Módulos NVMe
  • Configuração do GRUB
  • /etc/fstab verifica dispositivos

Para iniciar o script, use o seguinte comando (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 #

Neste exemplo initrd e o kernel não estão prontos para NVMe, executar os comandos dracut habilita o sistema operacional.

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. Converta sua máquina virtual para NVMe

Para converter o sistema operacional, várias etapas são necessárias.

Alterar os metadados do disco do SO para incluir capacidades NVMe Alterar o controlador SCSI para NVMe Esse processo é automatizado usando um script do PowerShell.

3.1 Baixe o script do PowerShell

Para baixar o script do PowerShell do repositório GitHub, use o seguinte comando:

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. Converter a máquina virtual

Para converter a execução do script, a documentação detalhada também está disponível no repositório GitHub.

Você pode decidir se, por exemplo, a VM deve ser iniciada automaticamente após a reconfiguração.

.\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 Verificar o resultado

3.3.1 Verificar o resultado no portal do Azure

Captura de ecrã do portal do Azure.

3.3.2 Verificar o resultado no PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. Verifique o seu sistema operativo

4.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.

4.2 Obter arquivo udev para NVMe (Opcional)

Em máquinas virtuais SCSI, as regras de udev integradas no waagent (agente do Azure) criaram links para /dev/disk/azure/scsi1/lunX 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 #
4.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.

4.2.2 Pronto para instalar pacotes usando utils do Azure NVMe

Há pacotes pré-compilados disponíveis no Index of /results/cjp256/azure-nvme-utils/for multiple distributions. Estamos trabalhando para habilitar e integrar os utils do Azure NVMe em todas as principais distribuições.