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.
Observação
As VMs configuradas com Início Confiável não podem migrar de SCSI para NVMe.
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.
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 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:
- Verificar se sua série de máquinas virtuais dá suporte ao NVMe
- Verificar a preparação para NVMe do sistema operacional
- Converter sua máquina virtual em NVMe
- Verificar o sistema operacional
1. Verificar 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.
Importante
Se o tipo de VM não estiver listado, altere o tipo de VM.
2. Verificar a preparação para NVMe do sistema operacional
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).
Para facilitar esse processo, criamos um script bash que faz a pré-avaliaçã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
2.2 Executar script de verificação de simulação
O script bash não altera nada automaticamente em seu sistema. Ele fornece apenas recomendações para execução de comandos.
As recomendações incluem
- Módulos NVMe
- Configuração de GRUB
- /etc/fstab verifica se há 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, o initrd e o kernel não estão prontos para NVMe. A execução dos comandos de 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. Converter sua máquina virtual em NVMe
Para converter o sistema operacional, são necessárias várias etapas.
Alterar os metadados do disco do sistema operacional para incluir recursos NVMe Alterar o controlador SCSI para NVMe Esse processo é automatizado usando um script do PowerShell.
3.1 Baixar o script do PowerShell
Para baixar o script do PowerShell do repositório do 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 do 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
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. Verificar o sistema operacional
4.1 Verificar os 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.
4.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 #
4.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/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules
e execute udevadm control --reload-rules && udevadm trigger
para recarregar as regras de udev.
4.2.2 Pronto para instalar pacotes usando utils NVMe do Azure
Há pacotes pré-compilados disponíveis em Índice de /results/cjp256/azure-nvme-utils/ para várias distribuições. Estamos trabalhando para habilitar e integrar os utils NVMe do Azure em todas as distribuições principais.