Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- Controllare se la serie di macchine virtuali supporta NVMe.
- Verificare che il sistema operativo supporti NVMe.
- Convertire la macchina virtuale in NVMe.
- 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
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/fstabverifica 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.
Installare PowerShell usando la documentazione di PowerShell.
Connettersi a Azure usando
Connect-AzAccount.Selezionare la sottoscrizione corretta usando
Select-AzSubscription -Subscription [your-subscription-id].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. | Sì |
-VMName |
Nome della macchina virtuale in Azure. | Sì |
-NewControllerType |
Tipo di controller di archiviazione in cui deve essere convertita la macchina virtuale (NVMe o SCSI). | Sì |
-VMSize |
Lo SKU della VM di Azure in cui si desidera convertire la VM. | Sì |
-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
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.
3.2 Ottenere il file udev per NVMe (facoltativo)
Nelle macchine virtuali SCSI le regole
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
-IgnoreWindowsVersionChecke 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.Compute9.0 o versione successiva -
Az.Accounts4.0 o versione successiva -
Az.Resources7.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:
- 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.
- Facoltativamente, corregge il servizio driver (
stornvme) e convalida altre impostazioni delsc.exe config stornvme start=bootsistema operativo per l'idoneità NVMe (con-FixOperatingSystemSettings). - Arresta e dealloca la macchina virtuale.
- Aggiornamenti
supportedCapabilities.diskControllerTypesaSCSI, NVMenel disco del sistema operativo tramite un metodo RESTPATCH. - Ridimensiona la macchina virtuale allo SKU di destinazione.
- 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
- Aprire Gestione dispositivi.
- Espandere Controller di archiviazione.
- 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