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.

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.

Disco Macchina virtuale abilitata per SCSI VM NVMe con tempdisk SCSI (ad esempio, Ebds_v5) VM NVMe con disco temporaneo NVMe
Disco del sistema operativo /dev/sda /dev/nvme0n1 /dev/nvme0n1
Disco temporaneo /dev/sdb /dev/sda /dev/nvme1n1
Primo disco dati /dev/sdc /dev/nvme0n2 /dev/nvme0n2

Suggerimento

Alcuni tipi di vm hanno più dischi temporanei (ad esempio E64ds_v6)

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

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

Lo script di migrazione può occuparsi automaticamente di questi controlli di preparazione quando si usa -FixOperatingSystemSettings.

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 [your-vm-name]
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 [your-vm-name] --resource-group [your-resource-group-name]
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Controllare il tipo di controller usando il portale di Azure

Screenshot del portale di Azure per controllare il controller.

2.2 Preparare la migrazione

Lo script di migrazione può occuparsi automaticamente dei prerequisiti quando si usa il -FixOperatingSystemSettings parametro .

Se si vuole eseguire manualmente la convalida delle modifiche necessarie

  • Moduli NVMe installati e inclusi in initrd/initramfs
  • La configurazione grub include il parametro nvme_core.io_timeout=240
  • Controlli /etc/fstab per i dispositivi

Consultare di nuovo il fornitore del sistema operativo per coprire tutti i comandi necessari per aggiornare initrd/initramfs.

2.2.1 Preparare PowerShell

Suggerimento

Questo passaggio non è necessario quando si esegue lo script in Azure CloudShell

  1. Installare PowerShell con https://aka.ms/powershell

  2. Connettersi ad Azure usando Connect-AzAccount e selezionare la sottoscrizione corretta usando Select-AzSubscription -Subscription [your-subscription-id]

  3. Impostare i criteri di esecuzione usando Set-ExecutionPolicy -ExecutionPolicy Unrestricted

2.2.2 Scaricare lo script

È possibile scaricare lo script usando un comando di PowerShell

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/Azure-NVMe-Utils/Azure-NVMe-Conversion.ps1" -OutFile ".\Azure-NVMe-Conversion.ps1"

2.3 Eseguire la migrazione

Lo script dispone di più parametri disponibili:

Parametro Descrizione Obbligatorio
-ResourceGroupName Nome del gruppo di risorse della macchina virtuale
-VMName Nome della macchina virtuale in Azure
-NewControllerType Il tipo di controller di archiviazione della macchina virtuale deve essere convertito in (NVMe o SCSI)
-VMSize SKU della macchina virtuale di Azure in cui si vuole convertire la macchina virtuale
-StartVM Avviare la macchina virtuale dopo la conversione NO
-IgnoreSKUCheck Ignora il controllo dello SKU della VM. NO
-IgnoreWindowsVersionCheck Ignorare il controllo della versione di Windows NO
-FixOperatingSystemSettings Correggere automaticamente le impostazioni del sistema operativo usando Azure RunCommands NO
-WriteLogfile Creare un file di log NO
-IgnoreAzureModuleCheck Non eseguire il controllo dei moduli di Azure installati NO
-IgnoreOSCheck Non verificare la conformità del sistema operativo, si prevede che il sistema operativo sia pronto NO
-SleepSeconds Tempo necessario per azure per risolvere le modifiche prima di avviare la macchina virtuale NO

Comando di esempio:

# Example usage
.\Azure-NVMe-Conversion.ps1 -ResourceGroupName <your-RG> -VMName <your-VMname> -NewControllerType <NVMe/SCSI> -VMSize <new-VM-SKU> -StartVM -FixOperatingSystemSettings

Suggerimento

È sempre possibile ripristinare SCSI. Lo script condividerà un comando con l'utente per ripristinare direttamente la configurazione originale.

2.3.1 Output di esempio
PS /home/philipp> ./NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType NVMe -VMSize Standard_E4bds_v5 -StartVM -FixOperatingSystemSettings                                          
00:00 - INFO      - Starting script Azure-NVMe-Conversion.ps1
00:00 - INFO      - Script started at 06/27/2025 15:41:39
00:00 - INFO      - Script version: 2025062704
00:00 - INFO      - Script parameters:
00:00 - INFO      -   ResourceGroupName -> testrg
00:00 - INFO      -   VMName -> testvm
00:00 - INFO      -   NewControllerType -> NVMe
00:00 - INFO      -   VMSize -> Standard_E4bds_v5
00:00 - INFO      -   StartVM -> True
00:00 - INFO      -   FixOperatingSystemSettings -> True
00:00 - INFO      - Script Version 2025062704                                                                           
00:00 - INFO      - Module Az.Compute is installed and the version is correct.
00:00 - INFO      - Module Az.Accounts is installed and the version is correct.
00:00 - INFO      - Module Az.Resources is installed and the version is correct.
00:00 - INFO      - Connected to Azure subscription name: AG-GE-CE-PHLEITEN
00:00 - INFO      - Connected to Azure subscription ID: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
00:00 - INFO      - VM testvm found in Resource Group testrg
00:01 - INFO      - VM testvm is running
00:01 - INFO      - VM testvm is running Linux
00:01 - INFO      - VM testvm is running SCSI
00:02 - INFO      - Running in Azure Cloud Shell
00:02 - INFO      - Authentication token is a SecureString
00:02 - INFO      - Authentication token received
00:02 - INFO      - Getting available SKU resources
00:02 - INFO      - This might take a while ...
00:06 - INFO      - VM SKU Standard_E4bds_v5 is available in zone 1
00:06 - INFO      - Resource disk support matches between original VM size and new VM size.
00:06 - INFO      - Found VM SKU - Checking for Capabilities
00:06 - INFO      - VM SKU has supported capabilities
00:06 - INFO      - VM supports NVMe
00:06 - INFO      - Pre-Checks completed
00:06 - INFO      - Entering Linux OS section
00:37 - INFO      -    Script output: Enable succeeded: 
00:37 - INFO      -    Script output: [stdout]
00:37 - INFO      -    Script output: [INFO] Operating system detected: sles
00:37 - INFO      -    Script output: [INFO] Checking if NVMe driver is included in initrd/initramfs...
00:37 - INFO      -    Script output: [INFO] NVMe driver found in initrd/initramfs.
00:37 - INFO      -    Script output: [INFO] Checking nvme_core.io_timeout parameter...
00:37 - INFO      -    Script output: [INFO] nvme_core.io_timeout is set to 240.
00:37 - INFO      -    Script output: [INFO] Checking /etc/fstab for deprecated device names...
00:37 - INFO      -    Script output: [INFO] /etc/fstab does not contain deprecated device names.
00:37 - INFO      -    Script output: 
00:37 - INFO      -    Script output: [stderr]
00:37 - INFO      -    Script output: 
00:37 - INFO      - Errors: 0 - Warnings: 0 - Info: 7
00:37 - INFO      - Shutting down VM testvm
01:18 - INFO      - VM testvm stopped
01:18 - INFO      - Checking if VM is stopped and deallocated
01:19 - INFO      - Setting OS Disk capabilities for testvm_OsDisk_1_165411276cbe459097929b981eb9b3e2 to new Disk Controller Type to NVMe
01:19 - INFO      - generated URL for OS disk update:
01:19 - INFO      - https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/Microsoft.Compute/disks/testvm_OsDisk_1_165411276cbe459097929b981eb9b3e2?api-version=2023-04-02
01:19 - INFO      - OS Disk updated
01:19 - INFO      - Setting new VM Size from Standard_E4s_v3 to Standard_E4bds_v5 and Controller to NVMe
01:19 - INFO      - Updating VM testvm
01:54 - INFO      - VM testvm updated
01:54 - INFO      - Start after update enabled for VM testvm
01:54 - INFO      - Waiting for 15 seconds before starting the VM
02:09 - INFO      - Starting VM testvm
03:31 - INFO      - VM testvm started
03:31 - INFO      - As the virtual machine got started using the script you can check the operating system now
03:31 - INFO      - If you have any issues after the conversion you can revert the changes by running the script with the old settings
03:31 - IMPORTANT - Here is the command to revert the changes:
03:31 - INFO      -    .\Azure-NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType SCSI -VMSize Standard_E4s_v3 -StartVM
03:31 - INFO      - Script ended at 06/27/2025 15:45:11
03:31 - INFO      - Exiting
PS /home/philipp>

Se si verifica un problema durante l'accesso al sistema operativo in seguito, provare a controllare

  • Console seriale per sistemi operativi Linux

  • Screenshot del sistema operativo nel portale di Azure

Quando si verifica qualcosa, è sempre possibile ripristinare SCSI usando il comando visualizzato alla fine dello script:

.\Azure-NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType SCSI -VMSize Standard_E4s_v3 -StartVM

2.4 Controllare il risultato

2.4.1 Controllare il risultato nel portale di Azure

Screenshot del portale di Azure.

2.4.2 Controllare il risultato in PowerShell
PS C:\Users> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

3. Controllare il sistema operativo

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

3.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 #
3.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/Azure-NVMe-Utils/88-azure-nvme-data-disk.rules e quindi eseguire udevadm control --reload-rules && udevadm trigger per ricaricare le regole udev.

3.2.2 Pronto per installare pacchetti usando gli utilità di Azure VM

Sono disponibili pacchetti precompilati nell'indice di /results/cjp256/azure-vm-utils/per più distribuzioni.

Sono già state avviate più distribuzioni per integrare il pacchetto. È possibile installarlo direttamente dal repository.

Distribuzione Versione minima
SUSE SLES 15 SP5 o versione successiva
RedHat RHEL 9.6 o versione successiva
Ubuntu Ubuntu 25.04 o versione successiva