Convertire macchine virtuali Linux e Windows da SCSI a NVMe

Azure macchine virtuali supportano due tipi di interfacce di archiviazione: Small Computer System Interface (SCSI) e NVM Express (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.

Questo articolo illustra come convertire Azure macchine virtuali che eseguono Linux o Windows da un controller disco SCSI a NVMe usando Azure Boost e lo script di conversione NVMe Azure.

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.

Cosa cambia per la macchina virtuale?

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 il sistema operativo usa i dischi.

Disco Macchina virtuale abilitata per SCSI VM NVMe con disco SCSI temporaneo (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.

La conversione della macchina virtuale Azure da SCSI a NVMe usando Azure Boost consente di sfruttare appieno questi miglioramenti delle prestazioni e mantenere un vantaggio competitivo nel panorama del cloud computing.

Eseguire la migrazione di una macchina virtuale Linux da SCSI a NVMe

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

  1. Controllare se la serie di macchine virtuali supporta NVMe.
  2. Verificare che il sistema operativo supporti NVMe.
  3. Convertire la macchina virtuale in NVMe.
  4. Controllare il sistema operativo.

1. Controllare se la serie di macchine virtuali supporta NVMe

La tabella di disponibilità Azure Boost availability elenca le macchine virtuali supportate per i dischi collegati NVMe.

2. Verificare l'idoneità NVMe del sistema operativo

Il sistema operativo deve supportare i dispositivi NVMe. Ad esempio, è necessario preparare i driver di dispositivo e initrd, il file system temporaneo usato durante l'avvio. È anche necessario convalidare i punti di montaggio dei file system, perché verificano se si usa il nome del dispositivo SCSI (/dev/sdX).

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

2.1 Controllare il tipo di controller della macchina virtuale

Controllare il tipo di controller usando PowerShell
PS C:\Users\user1> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users\user1> $vm.StorageProfile.DiskControllerType
SCSI
PS C:\Users\user1>
Controllare il tipo di controller usando il interfaccia della riga di comando di Azure
$ az vm show --name [your-vm-name] --resource-group [your-resource-group-name]
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
Controllare il tipo di controller usando il portale di Azure

Schermata delle proprietà della macchina virtuale, compreso il tipo di controller, nel portale di Azure.

2.2 Preparare la migrazione

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

Se si desidera apportare manualmente le modifiche necessarie, verificare che:

  • I moduli NVMe vengono installati e fanno parte di initrd/initramfs.
  • La configurazione GRUB include il parametro nvme_core.io_timeout=240.
  • /etc/fstab verifica la presenza di dispositivi.

Rivolgersi al 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 Cloud Shell.

  1. Installare PowerShell usando la documentazione di PowerShell.

  2. Connettersi a Azure usando Connect-AzAccount.

  3. Selezionare la sottoscrizione corretta usando Select-AzSubscription -Subscription [your-subscription-id].

  4. 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 per la macchina virtuale.
-VMName Nome della macchina virtuale in Azure.
-NewControllerType Tipo di controller di archiviazione in cui deve essere convertita la macchina virtuale (NVMe o SCSI).
-VMSize Lo SKU della VM di Azure in cui si desidera convertire la VM.
-StartVM Avviare la macchina virtuale dopo la conversione. NO
-IgnoreSKUCheck Ignora il controllo dello SKU della VM. NO
-IgnoreWindowsVersionCheck Ignorare il controllo della versione Windows. NO
-FixOperatingSystemSettings Correggi automaticamente le impostazioni del sistema operativo usando i comandi Esegui di Azure. NO
-WriteLogfile Creare un file di log. NO
-IgnoreAzureModuleCheck Non eseguire il controllo dei moduli Azure installati. NO
-IgnoreOSCheck Non verificare la disponibilità del sistema operativo. Si prevede che il sistema operativo sia pronto. NO
-SleepSeconds Tempo necessario per Azure risolvere le modifiche prima di avviare la macchina virtuale. NO

Il seguente è un 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 fornisce un comando 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 non è possibile accedere al sistema operativo in un secondo momento, controllare:

  • Console seriale per i sistemi operativi Linux.
  • Screenshot del sistema operativo nel portale di Azure.

Se necessario, è 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

Controllare il risultato nel portale di Azure

Schermata delle informazioni su una macchina virtuale nel portale di Azure.

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 nvme comando . Se il nvme comando non è presente, installare il nvme-cli pacchetto usando 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 integrate nell'agente /> Azure 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 abilitate per udev NVMe, nella directory /dev/disk/azure/data/by-lunvengono visualizzati nuovi collegamenti simbolici. 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 #
Download manuale del file udev

Per scaricare il nuovo file regole di 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. Quindi, esegui udevadm control --reload-rules && udevadm trigger per ricaricare le regole di udev.

Pacchetti pronti per l'installazione da GitHub

I pacchetti precompilati di il GitHub raccolta di utilità e regole udev per le macchine virtuali Azure sono disponibili in Index di /results/cjp256/azure-vm-utils/ per più distribuzioni.

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

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

Eseguire la migrazione di una macchina virtuale Windows da SCSI a NVMe

Questa sezione descrive come convertire una macchina virtuale Windows da SCSI a NVMe usando lo script di conversione NVMe Azure. Lo script gestisce automaticamente la preparazione del sistema operativo, la deallocazione della macchina virtuale, l'aggiornamento del controller del disco, il ridimensionamento facoltativo e il riavvio della macchina virtuale.

Prerequisiti

Prima di iniziare, assicurarsi di quanto segue:

  • La macchina virtuale usa la generazione 2 (Gen2). Non è possibile convertire macchine virtuali Gen1 in NVMe.

  • La macchina virtuale esegue Windows Server 2019 o versione successiva. Windows Server 2016 e versioni precedenti non sono supportati a meno che non si usi -IgnoreWindowsVersionCheck e non si verifichi manualmente la compatibilità dei driver.

  • Lo SKU della macchina virtuale di destinazione supporta NVMe. Per confermare, vedere la tabella di disponibilità Azure Boost availability.

  • Non hai usato Trusted Launch per configurare la macchina virtuale. Non è possibile convertire le macchine virtuali configurate con Avvio attendibile da SCSI a NVMe.

  • La conversione da una macchina virtuale con un disco temporaneo (ad esempio, Standard_D4ds_v5) a uno SKU v6 (ad esempio, Standard_D4ds_v6) non è supportata tramite questo script. Usare gli snapshot del disco per il percorso di migrazione.

    La conversione da macchine virtuali senza un disco temporaneo (ad esempio, Standard_D4s_v5) a SKU v6 è supportata.

  • Il software antivirus o di sicurezza non Microsoft può interferire con le modifiche apportate al driver durante la conversione. Disabilitarlo temporaneamente prima di eseguire lo script.

    Se la macchina virtuale mostra una schermata blu dopo la conversione, ripristinare SCSI e riprovare dopo aver disabilitato la soluzione di sicurezza.

  • PowerShell con le versioni del modulo Az seguenti è installato:

    • Az.Compute 9.0 o versione successiva
    • Az.Accounts 4.0 o versione successiva
    • Az.Resources 7.0 o versione successiva

Scarica lo script

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"

Lo script fa parte del repository open source SAP-on-Azure-Scripts-and-Utilities ed è concesso in licenza con la licenza MIT.

Eseguire la conversione

Usare l'opzione -FixOperatingSystemSettings per fare in modo che lo script configuri automaticamente il driver per l'avvio stornvme . Questa configurazione è necessaria per Windows riconoscere il controller NVMe dopo il riavvio della macchina virtuale. Ometterlo richiede di impostare manualmente il driver prima della conversione.

.\Azure-NVMe-Conversion.ps1 `
  -ResourceGroupName "<resource-group-name>" `
  -VMName "<vm-name>" `
  -NewControllerType NVMe `
  -VMSize "<target-sku>" `
  -FixOperatingSystemSettings `
  -StartVM `
  -WriteLogfile

Lo script esegue automaticamente i passaggi seguenti:

  1. Convalida le versioni del modulo, l'esistenza della macchina virtuale, il tipo di sistema operativo, Windows versione, Gen2, il tipo di controller corrente e la funzionalità NVMe con lo SKU della macchina virtuale.
  2. Facoltativamente, corregge il servizio driver (stornvme) e convalida altre impostazioni del sc.exe config stornvme start=boot sistema operativo per l'idoneità NVMe (con -FixOperatingSystemSettings).
  3. Arresta e dealloca la macchina virtuale.
  4. Aggiornamenti supportedCapabilities.diskControllerTypes a SCSI, NVMe nel disco del sistema operativo tramite un metodo REST PATCH .
  5. Ridimensiona la macchina virtuale allo SKU di destinazione.
  6. Avvia la macchina virtuale (con -StartVM).

Suggerimento

Lo script fornisce nell'output, al termine di un'esecuzione completata correttamente, un comando per il ripristino. Salvare il comando prima di chiudere la sessione in modo che sia possibile eseguire il rollback a SCSI, se necessario.

Modifiche apportate alla macchina virtuale Windows

A differenza di Linux, Windows usa lettere di unità anziché percorsi del dispositivo, quindi il disco del sistema operativo rimane C:\ dopo la conversione. Tuttavia, l'interfaccia del disco sottostante cambia. Le assegnazioni dei dischi dati potrebbero cambiare se non si usano identificatori di disco persistente.

Disco Macchina virtuale abilitata per SCSI MACCHINA virtuale abilitata per NVMe
Disco del sistema operativo C:\ (non modificato) C:\ (non modificato)
Disco temporaneo D:\ (in genere) D:\ (in genere, RAW nelle SKU v6)
Dischi dati Assegnato da ordine LUN Assegnato in base all'ordine dei namespace NVMe

Importante

Nelle SKU v6 i dischi temporanei sono RAW e non preformattati con NTFS. Usare uno script di avvio o un'estensione script personalizzata per formattarli e montarli in ogni avvio.

Verificare la conversione

Dopo il riavvio della macchina virtuale, verificare che il tipo di controller del disco sia stato modificato correttamente.

Confermare con PowerShell

$vm = Get-AzVM -ResourceGroupName "<resource-group-name>" -VMName "<vm-name>"
$vm.StorageProfile.DiskControllerType

L'output deve essere NVMe.

Confermare usando Gestione dispositivi all'interno della macchina virtuale

  1. Aprire Gestione dispositivi.
  2. Espandere Controller di archiviazione.
  3. Verificare che il controller EXPRESS NVM Standard sia elencato.

Torna a SCSI

Se è necessario eseguire il rollback, eseguire di nuovo lo script con -NewControllerType SCSI e lo SKU originale della macchina virtuale:

.\Azure-NVMe-Conversion.ps1 `
  -ResourceGroupName "<resource-group-name>" `
  -VMName "<vm-name>" `
  -NewControllerType SCSI `
  -VMSize "<original-SKU>" `
  -StartVM `
  -WriteLogfile