Domande frequenti su dischi NVMe remoti

Questo articolo illustra alcune domande comuni sul supporto per dischi NVM Express (NVMe) remoti nelle VM create in Azure.

Quali sono i prerequisiti per abilitare l'interfaccia NVMe remota nella VM?

È possibile usare DiskControllerType durante la configurazione della VM per selezionare il tipo di controller preferito come NVMe o Small Computer System Interface (SCSI). Se non si specifica un valore DiskControllerType, la piattaforma sceglie automaticamente il controller predefinito in base alla configurazione delle dimensioni della VM. Se la dimensione della VM è configurata per SCSI come predefinita e supporta NVMe, la VM usa SCSI a meno che non si aggiorni il valore DiskControllerType a NVMe.

Per abilitare l'interfaccia NVMe nella VM, è necessario soddisfare i prerequisiti seguenti:

  • Scegliere una famiglia di macchine virtuali che supporti NVMe. Solo le dimensioni di VM Ebsv5 e Ebdsv5 sono dotate di NVMe nelle VM Intel v5.

  • Selezionare l'immagine del sistema operativo contrassegnata con il supporto NVMe. Dopo aver selezionato valore famiglia di VM e immagine del sistema operativo supportato, viene richiesto di selezionare il tipo di controller del disco NVMe.

    Screenshot di un prompt per selezionare un tipo di controller disco.

  • Acconsentire esplicitamente a NVMe selezionando il tipo di controller del disco NVMe nel portale di Azure o nel modello di Azure Resource Manager, dell'interfaccia della riga di comando di Azure o di Azure PowerShell. Per istruzioni dettagliate, vedere le domande frequenti su NVMe generali.

  • Assicurarsi di usare una VM di seconda generazione, in quanto NVMe supporta solo immagini di seconda generazione.

  • Scegliere una delle aree di Azure in cui è abilitato NVMe.

È possibile crittografare i dischi NVMe remoti?

Non esiste un modo nativo all'interno di Azure per crittografare questi dischi. È possibile crittografarli all'interno del sistema operativo, ma sarà necessario crittografarli nuovamente dopo il montaggio all'avvio.

Come è possibile ridimensionare una VM basata su SCSI in una VM abilitata per NVMe remota con dimensioni differenti?

È possibile usare il processo seguente per:

  • Ridimensionare una VM basata su SCSI creata usando un'immagine senza tag in una VM abilitata per NVMe di dimensioni differenti senza creare nuovamente le configurazioni della VM e senza contrassegnare l'immagine.
  • Ridimensionare una VM basata su SCSI in una VM abilitata per NVMe di dimensioni differenti senza creare nuovamente le configurazioni della VM.

La macchina virtuale di origine può essere:

  • Immagine del sistema operativo senza tag che supporta NVMe.
  • Immagine del sistema operativo con tag NVMe.

Per ridimensionare la VM, usare il comando seguente per eseguire uno script di Azure PowerShell che imposta il valore discontrollertype di destinazione della VM come NVMe:

azure-nvme-VM-update.ps1 [-subscription_id] <String> [-resource_group_name] <String> [-vm_name] <String> [[-disk_controller_change_to] <String>] [-vm_size_change_to] <String> [[-start_vm_after_update] <Boolean>] [[-write_logfile] <Boolean>]

Come è possibile verificare se un'immagine è contrassegnata come NVMe?

Per verificare se un'immagine è contrassegnata come NVMe, usare il comando seguente:

az vm image show --urn URN_OF_IMAGE

Come si contrassegna un'immagine che supporta NVMe per i dischi remoti?

Per contrassegnare un'immagine che supporta NVMe, seguire questa procedura:

  1. Caricare un disco rigido virtuale (VHD) supportato da NVMe nell'account di archiviazione. AzCopy è un modo rapido, ma è anche possibile usare il portale per caricare.

    azcopy copy <local path to your VHD> <container in your storage account>
    
  2. Creare una raccolta di immagini usando Azure PowerShell, il portale o l'interfaccia della riga di comando di Azure.

  3. Creare una definizione dell'immagine. Assicurarsi di includere --feature DiskControllerTypes=SCSI,NVMe.

    Ecco un esempio dell'interfaccia della riga di comando di Azure:

    az sig image-definition create --resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> --publisher <publisher> --offer <offerName> --sku <skuName> --os-type <osType> --os-state <osState> --feature DiskControllerTypes=SCSI,NVMe
    
  4. Creare la versione dell'immagine nella raccolta con tag NVMe con il disco rigido virtuale supportato da NVMe.

    Ecco un esempio dell'interfaccia della riga di comando di Azure:

    az sig image-version create --resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> --gallery-image-version <version> --target-regions <region1> <region2> --replica-count <replicaCount> --os-vhd-uri <NVMe-supported vhd uri> --os-vhd-storage-account <storageAccount>
    

Come si configura un modello di ARM per la creazione di macchine virtuali?

È possibile usare l'estensione per script personalizzati di Azure insieme ai modelli di Azure Resource Manager (modelli di ARM). Questa soluzione consente di scaricare ed eseguire script in macchine virtuali di Azure ed è compatibile con Windows e Linux. Per indicazioni dettagliate, vedere la documentazione dell'estensione per script personalizzati di Azure per Windows e Linux.

Cosa accade se si desidera usare un'altra famiglia di macchine virtuali che non supporta dischi NVMe remoti?

Se si seleziona una famiglia di macchine virtuali non supportata, verrà visualizzato questo messaggio di errore: "Le dimensioni della macchina virtuale selezionate non possono essere avviati con DiskControllerType. Verificare che il tipo di controller del disco fornito sia uno dei tipi di controller disco supportati per le dimensioni della VM".

Assicurarsi di selezionare una famiglia di macchine virtuali che supporti l'interfaccia NVMe. Per determinare i tipi di controller disco supportati per le dimensioni della macchina virtuale, vedere l'elenco degli SKU di risorse nell'API REST.

Quali opzioni di archiviazione su disco di Azure sono compatibili con dischi NVMe remoti?

Le dimensioni NVMe possono essere combinate con SSD Premium di Azure v1, SSD Premium v2 e Archiviazione su disco Ultra. Per altre informazioni sulle offerte di dischi di Azure, vedere Tipi di dischi gestiti di Azure.

Azure supporta il ridimensionamento in tempo reale su dischi con dimensioni di VM NVMe?

Il ridimensionamento in tempo reale di NVMe è supportato in dischi SSD Premium di Azure v1, dischi SSD Standard e dischi HDD Standard. È anche possibile aggiungere dischi NVMe senza riavviare la VM.

Come è possibile identificare i dischi NVMe remoti in una VM Linux?

  1. Ottenere il pacchetto nvme-cli:

    sudo apt install nvme-cli
    
  2. Eseguire il comando list NVMe per recuperare i dettagli del disco NVMe:

    sudo nvme list
    

    Screenshot delle istruzioni per identificare i dischi NVMe in una macchina virtuale Linux.

    Screenshot delle istruzioni per scegliere un ID dello spazio dei nomi nel portale Linux.

    Ecco come vengono visualizzati i dati in risposta ai comandi di Azure PowerShell:

    Screenshot di una risposta di esempio a un comando di Azure PowerShell.

Come è possibile identificare i dischi NVMe in una VM Windows?

Aprire Azure PowerShell e usare il comando seguente:

wmic diskdrive get model,scsilogicalunit

Screenshot di un comando di PowerShell di esempio per l'uso di NVMe in Windows.

I dischi collegati ASAP vengono presentati nel guest con la stringa del modello Virtual_Disk NVME Premium. L'unità logica SCSI ha il valore per l'ID LUN visibile dal portale incrementato di 1.

Ecco uno snapshot del modo in cui i dischi NVMe vengono visualizzati in una VM Windows abilitata per NVMe:

Screenshot che mostra un esempio di comando di Azure PowerShell per identificare il disco NVMe in una VM Windows.

Lo snapshot seguente mostra l'output guest per i dischi dati collegati a LUN 0 e LUN 4 (CRP). L'ID LUN equivale all'ID dello spazio dei nomi.

Screenshot che mostra un esempio di come vengono visualizzati i dischi NVMe in una VM Windows abilitata per NVMe.

È possibile convertire una VM basata su SCSI in NVMe abilitata mantenendo le stesse dimensioni della vCPU della VM con un'immagine del sistema operativo con tag NVMe?

Questo scenario è supportato solo nei sistemi operativi Linux e non è supportato nei sistemi operativi Windows.

I dischi condivisi nei dischi remoti sono supportati con VM abilitate per NVMe?

La funzionalità disco condiviso è supportata per i dischi premium SSD, SSD Premium v2 e Archiviazione su disco Ultra.

È possibile usare Azure PowerShell o l'interfaccia della riga di comando di Azure per creare una VM con un disco del sistema operativo da un BLOB esistente con NVMe abilitato?

Non è attualmente possibile. È invece possibile usare la soluzione alternativa all'API REST seguente per creare una VM con un disco del sistema operativo da un BLOB esistente con NVMe abilitato:

$subscriptionID = '<Your Subscription ID>'
$resourceGroupName = '<Your Resource Group Name>'
$storageAccountName = '<Your Account Name>'
$storageAccountContainer = '<Your Account Container>'
$blobName = 'blob-nvme_OsDisk_1.vhd'

$diskName = 'test'
$diskSkuName = 'Standard_LRS'
$diskSizeGB = 30
$osType = 'Linux' 
$hyperVGeneration = 'V2'
$location = 'eastus'

$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = ($profileClient.AcquireAccessToken($azContext.Subscription.TenantId)).AccessToken

$body = @{
    location = $location
    sku = @{ name = $diskSkuName }
    properties = @{
        osType                  = $osType
        hyperVGeneration        = $hyperVGeneration
        supportedCapabilities   = @{diskControllerTypes = 'SCSI, NVMe'}
        diskSizeGB              = $diskSizeGB
        creationData = @{
            storageAccountId	= "/subscriptions/$subscriptionID/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"

            sourceUri           = "https://$storageAccountName.blob.core.windows.net/$storageAccountContainer/$blobName"
            createOption		= 'Import'
        }
    }
}

$apiVersion='2023-10-02'
$restUri = "https://management.azure.com/subscriptions/$subscriptionID/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/disks/$diskName`?api-version=$apiVersion"
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token
}

Invoke-RestMethod `
    -Uri $restUri `
    -Method 'Put' `
    -Headers $authHeader `
    -Body ($body | ConvertTo-Json)