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:
- Controllare se la serie di macchine virtuali supporta NVMe
- Verificare l'idoneità nvme del sistema operativo
- Convertire la macchina virtuale in NVMe
- 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
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
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.
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.