Condividi tramite


Conversione di VM che eseguono Linux da SCSI a NVMe

In questo articolo viene illustrato il processo di conversione di VM (VM) che eseguono Linux da SCSI ad archiviazione NVMe. Eseguendo la migrazione a NVMe, è possibile sfruttare le prestazioni e la scalabilità migliorate.

SCSI e NVMe

Le VM di Azure supportano due tipi di interfacce di archiviazione: Small Computer System Interface (SCSI) e NVMe. L'interfaccia SCSI è uno standard legacy che fornisce connettività fisica e trasferimento di dati tra computer e dispositivi periferici. NVMe è simile a SCSI in quanto offre connettività e trasferimento dei dati, ma NVMe è un'interfaccia più veloce ed efficiente per il trasferimento dei dati tra server e sistemi di archiviazione.

Nota

Le VM configurate con Avvio attendibile non possono passare da SCSI a NVMe.

Supporto per le VM dell'interfaccia SCSI

Azure continua a supportare l'interfaccia SCSI nelle versioni delle offerte di VM che forniscono l'archiviazione SCSI. Tuttavia, non tutte le nuove serie di VM hanno spazio di archiviazione SCSI come opzione in futuro.

Che cosa cambia per la VM?

La modifica dell'interfaccia host da SCSI a NVMe non modifica l'archiviazione remota (disco del sistema operativo o dischi dati), ma cambia il modo in cui i sistemi operativi vedono i dischi.

Macchina virtuale abilitata per SCSI VM abilitata per NVMe
Disco del sistema operativo /dev/sda /dev/nvme0n1
Disco temporaneo /dev/sdb /dev/sda
Primo disco dati /dev/sdc /dev/nvme0n2

Nelle sezioni seguenti viene fornita una guida per convertire la macchina virtuale di Azure da SCSI a NVMe usando Azure Boost per sfruttare al meglio questi miglioramenti delle prestazioni e mantenere un vantaggio competitivo nel panorama del cloud computing.

Eseguire la migrazione della macchina virtuale da SCSI a NVMe

Per eseguire la migrazione da SCSI a NVMe, è necessario seguire alcuni passaggi:

  1. Controllare se la serie di macchine virtuali supporta NVMe
  2. Verificare l'idoneità nvme del sistema operativo
  3. Convertire la macchina virtuale in NVMe
  4. Controllare il sistema operativo

1. Controllare se la serie di macchine virtuali supporta NVMe

Le macchine virtuali supportate per supportare i dischi collegati NVMe sono descritte nel sito di panoramica di Azure Boost nella tabella di disponibilità.

Importante

Se il tipo di macchina virtuale non è elencato, modificare il tipo di macchina virtuale.

2. Verificare l'idoneità NVMe del sistema operativo

Il sistema operativo deve supportare i dispositivi NVMe, inclusi ad esempio driver di dispositivo e initrdm, il file system temporaneo usato durante l'avvio, deve essere preparato. Oltre a ciò, è necessario convalidare i punti di montaggio dei file system perché controllano se si usa il nome del dispositivo SCSI (/dev/sdX).

Per semplificare questo processo, è stato creato uno script bash che esegue automaticamente la prevalidazione.

2.1 Controllare il tipo di controller della macchina virtuale

2.1.1 Controllare il tipo di controller con 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 Controllare il tipo di controller usando l'interfaccia della riga di comando di Azure
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Controllare il tipo di controller usando portale di Azure

Screenshot del portale di Azure per controllare il controller.

2.2 Eseguire lo script di controllo preliminare

Lo script bash non cambia automaticamente nulla nel sistema. Fornisce solo raccomandazioni per l'esecuzione dei comandi.

Le raccomandazioni includono

  • Moduli NVMe
  • Configurazione grub
  • Controlli /etc/fstab per i dispositivi

Per avviare lo script, usare il comando seguente (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 #

In questo esempio initrd e il kernel non sono pronti per NVMe, eseguendo i comandi dracut abilitare il 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. Convertire la macchina virtuale in NVMe

Per convertire il sistema operativo sono necessari più passaggi.

Modificare i metadati del disco del sistema operativo in modo da includere le funzionalità NVMe Modificare il controller SCSI in NVMe Questo processo viene automatizzato usando uno script di PowerShell.

3.1 Scaricare lo script di PowerShell

Per scaricare lo script di PowerShell dal repository GitHub, usare il comando seguente:

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. Convertire la macchina virtuale

Per convertire lo script, la documentazione dettagliata è disponibile anche nel repository GitHub.

È possibile decidere se, ad esempio, la macchina virtuale deve essere avviata automaticamente dopo la riconfigurazione.

.\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 Controllare il risultato

3.3.1 Controllare il risultato portale di Azure

Screenshot del portale di Azure.

3.3.2 Controllare il risultato in PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. Controllare il sistema operativo

4.1 Controllare i dispositivi

È possibile controllare i dispositivi usando il comando nvme, se manca il comando nvme, installare il pacchetto "nvme-cli".

nvme list

L'output dovrebbe mostrare il disco del sistema operativo e i dischi dati. Screenshot dei dischi del sistema operativo e dei dischi dati.

4.2 Ottenere il file udev per NVMe (facoltativo)

Nelle macchine virtuali SCSI le regole udev integrate in waagent (agente di Azure) hanno creato collegamenti in /dev/disk/azure/scsi1/lunX per identificare i dischi dati. Poiché SCSI non viene più usato, le regole non si applicano.

Con una delle due opzioni disponibili per distribuire le regole udev abilitate per NVMe vengono visualizzati nuovi collegamenti simbolici nella directory /dev/disk/azure/data/by-lun. Questa directory è la sostituzione di /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 manuale del file udev

Per scaricare il nuovo file regole udev, usare questo 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 quindi eseguire udevadm control --reload-rules && udevadm trigger per ricaricare le regole udev.

4.2.2 Ready to install packages using Azure NVMe utils (4.2.2 Ready to install packages using Azure NVMe utils)

Sono disponibili pacchetti precompilati nell'indice di /results/cjp256/azure-nvme-utils/per più distribuzioni. Microsoft sta lavorando per abilitare e integrare le utilità NVMe di Azure in tutte le principali distribuzioni.