Preguntas más frecuentes sobre discos NVMe remotos

En este artículo se tratan algunas preguntas comunes sobre la compatibilidad con discos NVM Express (NVMe) remotos en máquinas virtuales (VM) creadas en Azure.

¿Cuáles son los requisitos previos para habilitar la interfaz NVMe remota en mi máquina virtual?

Puede usar DiskControllerType durante la configuración de la máquina virtual para seleccionar el tipo de controlador preferido como NVMe o interfaz de sistema de equipo pequeño (SCSI). Si no especifica un valor DiskControllerType, la plataforma elige automáticamente el controlador predeterminado en función de la configuración de tamaño de máquina virtual. Si el tamaño de la máquina virtual está configurado para SCSI como predeterminado y admite NVMe, la máquina virtual usa SCSI a menos que actualice el valor DiskControllerType a NVMe.

Para habilitar la interfaz NVMe en la máquina virtual, debe cumplir los siguientes requisitos previos:

  • Elija una familia de máquinas virtuales que admita NVMe. Solo los tamaños de máquina virtual Ebsv5 y Ebdsv5 están equipados con NVMe en las máquinas virtuales de generación Intel v5.

  • Seleccione la imagen del sistema operativo etiquetada con compatibilidad con NVMe. Después de seleccionar una imagen de familia de máquinas virtuales y un valor de imagen del sistema operativo compatibles, se le pedirá que seleccione el tipo de controlador de disco NVMe.

    Recorte de pantalla de un mensaje para seleccionar un tipo de controlador de disco.

  • Para participar en NVMe, seleccione el tipo de controlador de disco NVMe en Azure Portal o en la plantilla de Azure Resource Manager, la CLI de Azure o Azure PowerShell. Para obtener instrucciones detalladas, consulte las preguntas más frecuentes generales de NVMe.

  • Asegúrese de que usa una máquina virtual de generación 2, ya que NVMe solo admite imágenes de generación 2.

  • Elija una de las regiones de Azure en las que NVMe está habilitada.

¿Puedo cifrar los discos NVMe remotos?

No hay una manera nativa dentro de Azure de cifrar estos discos. Puede cifrarlos en el sistema operativo, pero deberá volver a cifrarlos después de montarlos en el inicio.

¿Cómo se cambia el tamaño de una máquina virtual basada en SCSI a una máquina virtual remota habilitada para NVMe de un tamaño diferente?

Puede usar el siguiente proceso para:

  • Cambiar el tamaño de una máquina virtual basada en SCSI creada con una imagen sin etiquetar en una máquina virtual habilitada para NVMe de un tamaño diferente sin volver a crear las configuraciones de máquina virtual y sin etiquetar la imagen.
  • Cambiar el tamaño de una máquina virtual basada en SCSI a una máquina virtual habilitada para NVMe de un tamaño diferente sin volver a crear las configuraciones de máquina virtual.

La máquina virtual de origen puede ser:

  • Una imagen de sistema operativo sin etiqueta que admita NVMe.
  • Una imagen del sistema operativo etiquetada por NVMe.

Para cambiar el tamaño de la máquina virtual, use el siguiente comando para ejecutar un script de Azure PowerShell que establece el valor discontrollertype de destino de la máquina virtual como 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>]

¿Cómo puedo comprobar si una imagen está etiquetada como NVMe?

Para comprobar si una imagen está etiquetada como NVMe, use el siguiente comando:

az vm image show --urn URN_OF_IMAGE

¿Cómo se etiqueta una imagen que admita NVMe para discos remotos?

Para etiquetar una imagen que admita NVMe, siga estos pasos:

  1. Cargue un disco duro virtual (VHD) compatible con NVMe en la cuenta de almacenamiento. AzCopy es una manera rápida, pero también se puede usar el portal para cargar.

    azcopy copy <local path to your VHD> <container in your storage account>
    
  2. Creación de una galería de imágenes mediante Azure PowerShell, el portal o la CLI de Azure.

  3. Cree la definición de una imagen. Asegúrese de incluir --feature DiskControllerTypes=SCSI,NVMe.

    Este es un ejemplo de la CLI de 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. Cree la versión de la imagen bajo la galería etiquetada con NVMe con el VHD compatible con NVMe.

    Este es un ejemplo de la CLI de 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>
    

¿Cómo se configura una plantilla de ARM para la creación de máquinas virtuales?

Use la extensión de script personalizado de Azure junto con las plantillas de Azure Resource Manager (plantillas de ARM). Esta solución le permite descargar y ejecutar scripts en máquinas virtuales de Azure y es compatible con Windows y Linux. Para obtener instrucciones detalladas, consulte la documentación de la extensión de script personalizado de Azure para Windows y Linux.

¿Qué ocurriría si quisiera usar otra familia de máquinas virtuales que no admita discos NVMe remotos?

Si selecciona una familia de máquinas virtuales no admitidas, recibirá este mensaje de error: "El tamaño de máquina virtual seleccionado no puede arrancar con DiskControllerType. Compruebe que el tipo de controlador de disco proporcionado es uno de los tipos de controlador de disco admitidos para el tamaño de la máquina virtual".

Asegúrese de seleccionar una familia de máquinas virtuales que admita la interfaz NVMe. Para determinar qué tipos de controlador de disco se admiten para el tamaño de la máquina virtual, consulte la lista de SKU de recursos en la API de REST.

¿Qué opciones de almacenamiento en discos de Azure son compatibles con discos NVMe remotos?

Los tamaños NVMe se pueden combinar con Azure Premium SSD v1, SSD prémium v2 y Almacenamiento en disco Ultra. Para más información sobre las ofertas de discos de Azure, consulte Tipos de disco administrado de Azure.

¿Es compatible Azure con el cambio de tamaño en vivo en discos con tamaños de máquina virtual NVMe?

El cambio de tamaño activo de NVMe se admite en discos SSD prémium v1 de Azure, discos SSD estándar y discos HDD estándar. También es posible agregar discos NVMe sin reiniciar la máquina virtual.

¿Cómo puedo identificar discos NVMe remotos en máquinas virtuales Linux?

  1. Obtenga el paquete nvme-cli :

    sudo apt install nvme-cli
    
  2. Ejecute el comando list de NVMe para capturar los detalles del disco NVMe:

    sudo nvme list
    

    Recorte de pantalla de instrucciones para identificar discos NVMe en una máquina virtual Linux.

    Recorte de pantalla de las instrucciones para elegir un identificador de espacio de nombres en el portal de Linux.

    Aquí se muestra cómo se aparecen los datos en respuesta a los comandos de Azure PowerShell:

    Recorte de pantalla de una respuesta de ejemplo a un comando de Azure PowerShell.

¿Cómo puedo identificar discos NVMe en una máquina virtual Windows?

Abra Azure PowerShell y use el siguiente comando:

wmic diskdrive get model,scsilogicalunit

Recorte de pantalla de un comando de PowerShell de ejemplo para usar NVMe en Windows.

Los discos conectados lo antes posible se presentan en el invitado con la cadena de modelo Virtual_Disk NVME Premium. La unidad lógica SCSI tiene el valor del identificador de LUN visible del portal que se incrementa en 1.

Esta es una instantánea de cómo aparecen los discos NVMe en una máquina virtual Windows habilitada para NVMe:

Recorte de pantalla que muestra un ejemplo de un comando de Azure PowerShell para identificar el disco NVMe en una máquina virtual Windows.

La siguiente instantánea muestra la salida de invitado para los discos de datos conectados a LUN 0 y LUN 4 (CRP). El identificador de LUN es equivalente al identificador del espacio de nombres.

Recorte de pantalla que muestra un ejemplo de cómo aparecen los discos NVMe en una máquina virtual Windows habilitada para NVMe.

¿Es posible convertir una máquina virtual basada en SCSI a habilitada para NVMe mientras se conserva el mismo tamaño de vCPU de máquina virtual con una imagen de sistema operativo etiquetada como NVMe?

Este escenario solo se admite en sistemas operativos Linux y no se admite en sistemas operativos Windows.

¿Se admiten discos compartidos en discos remotos con máquinas virtuales habilitadas para NVMe?

La característica de disco compartido es compatible con discos SSD prémium, SSD Premium v2 y Almacenamiento en disco Ultra.

¿Puedo usar Azure PowerShell o la CLI de Azure para crear una máquina virtual con un disco del sistema operativo a partir de un blob existente con NVMe habilitado?

Actualmente no es posible. En su lugar, puede usar la siguiente solución alternativa de la API de REST para crear una máquina virtual con un disco del sistema operativo a partir de un blob existente con NVMe habilitado:

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