Compartir a través de


Conversión de máquinas virtuales que ejecutan Linux de SCSI a NVMe

En este artículo se describe el proceso de conversión de máquinas virtuales (VM) que ejecutan Linux del almacenamiento SCSI a NVMe. Al migrar a NVMe, puede aprovechar su rendimiento y escalabilidad mejorados.

SCSI frente a NVMe

Las máquinas virtuales de Azure admiten dos tipos de interfaces de almacenamiento: interfaz estándar de equipos pequeños (SCSI) y NVMe. La interfaz SCSI es un estándar heredado que proporciona conectividad física y transferencia de datos entre equipos y dispositivos periféricos. NVMe es similar a SCSI en que proporciona conectividad y transferencia de datos, pero NVMe es una interfaz más rápida y eficaz para la transferencia de datos entre servidores y sistemas de almacenamiento.

Nota:

Las máquinas virtuales configuradas con inicio seguro no se pueden mover de SCSI a NVMe.

Compatibilidad con máquinas virtuales de interfaz SCSI

Azure sigue admitiendo la interfaz SCSI en las versiones de las ofertas de máquina virtual que proporcionan almacenamiento SCSI. Sin embargo, no todas las nuevas series de máquinas virtuales tienen almacenamiento SCSI como opción en el futuro.

¿Qué cambia para la máquina virtual?

Cambiar la interfaz de host de SCSI a NVMe no cambia el almacenamiento remoto (disco del sistema operativo o discos de datos), pero cambia la forma en que los sistemas operativos detectan los discos.

Máquina virtual habilitada para SCSI Máquina virtual habilitada para NVMe
Disco del sistema operativo /dev/sda /dev/nvme0n1
Disco temporal /dev/sdb /dev/sda
Primer disco de datos /dev/sdc /dev/nvme0n2

En las secciones siguientes, se proporciona una guía para convertir la máquina virtual de Azure de SCSI a NVMe mediante Azure Boost, para garantizar que puede aprovechar al máximo estas mejoras de rendimiento y mantener un nivel competitivo en el panorama informático en la nube.

Migración de la máquina virtual (VM) de SCSI a NVMe

Para migrar de SCSI a NVMe, es preciso seguir algunos pasos:

  1. Comprobar si la serie de máquinas virtuales admite NVMe
  2. Comprobar que el sistema operativo esté preparado para NVMe
  3. Convertir la máquina virtual a NVMe
  4. Comprobar el sistema operativo

1. Comprobar si la serie de máquinas virtuales admite NVMe

Las máquinas virtuales compatibles que admiten discos conectados a NVMe se describen en el sitio de información general de Azure Boost en la tabla de disponibilidad.

Importante

Si el tipo de máquina virtual no aparece en la lista, cambie el tipo de máquina virtual.

2. Comprobar que el sistema operativo esté preparado para NVMe

El sistema operativo debe admitir dispositivos NVMe, por ejemplo, controladores de dispositivos e initrdm, el sistema de archivos temporal usado durante el arranque, deben estar preparados. Además, debe validar los puntos de montaje de los sistemas de archivos, ya que comprueban si usa el nombre del dispositivo SCSI (/dev/sdX).

Para facilitar este proceso, hemos creado un script de Bash que realiza la validación previa automáticamente.

2.1 Comprobar el tipo de controlador de la máquina virtual

2.1.1 Comprobar el tipo de controlador mediante 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 Comprobar el tipo de controlador mediante la CLI de Azure
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Comprobar el tipo de controlador mediante Azure Portal

Captura de pantalla de Azure Portal para comprobar el controlador.

2.2 Ejecutar el script de comprobación previa de pruebas

El script de Bash no cambia automáticamente nada en el sistema. Solo proporciona recomendaciones para que se ejecuten los comandos.

Entre las recomendaciones se incluye lo siguiente

  • Módulos de NVMe
  • Configuración de GRUB
  • Comprobaciones de /etc/fstab para los dispositivos

Para iniciar el script, use el siguiente 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 #

En este ejemplo, initrd y el kernel no están listos para NVMe; la ejecución de los comandos dracut habilita el sistema operativo.

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. Convertir la máquina virtual a NVMe

Para convertir el sistema operativo se requieren varios pasos.

Cambiar los metadatos del disco del sistema operativo para incluir funcionalidades de NVMe. Cambiar el controlador SCSI a NVMe. Este proceso se automatiza mediante un script de PowerShell.

3.1 Descargar el script de PowerShell

Para descargar el script de PowerShell desde el repositorio de GitHub, use el siguiente 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. Convertir la máquina virtual

Para convertir el script, también dispone de documentación detallada en el repositorio de GitHub.

Puede decidir si, por ejemplo, la máquina virtual debe iniciarse automáticamente después de la reconfiguración.

.\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 Comprobar el resultado

3.3.1 Comprobar el resultado en Azure Portal

Captura de pantalla del portal Azure.

3.3.2 Comprobar el resultado en PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. Comprobar el sistema operativo

4.1 Comprobar los dispositivos

Puede comprobar los dispositivos mediante el comando nvme; si falta el comando nvme, instale el paquete "nvme-cli".

nvme list

La salida debe mostrar el disco del sistema operativo y los discos de datos. Captura de pantalla de discos del sistema operativo y discos de datos.

4.2 Obtener archivo udev para NVMe (opcional)

En las máquinas virtuales SCSI, las reglas udev integradas en waagent (agente de Azure) crearon vínculos en /dev/disk/azure/scsi1/lunX para identificar los discos de datos. Como ya no se usa SCSI, las reglas no se aplican.

Con una de las dos opciones disponibles para implementar reglas udev habilitadas para NVMe, verá nuevos vínculos simbólicos en el directorio /dev/disk/azure/data/by-lun. Este directorio sustituye a /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 Descarga manual del archivo udev

Para descargar el nuevo archivo de reglas udev, use este comando: curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/88-azure-data-disk.rules --output /usr/lib/udev/rules.d/88-azure-data-disk.rules y, a continuación, ejecute udevadm control --reload-rules && udevadm trigger para volver a cargar las reglas udev.

4.2.2 Preparación para instalar paquetes mediante utilidades de Azure NVMe

Hay paquetes precompilados disponibles en el Índice de /results/cjp256/azure-nvme-utils/ para varias distribuciones. Estamos trabajando para habilitar e integrar las utilidades NVMe de Azure en todas las distribuciones principales.