Perguntas frequentes sobre discos NVMe remotos

Este artigo aborda algumas perguntas comuns sobre o suporte para discos NVM Express (NVMe) remotos em máquinas virtuais (VMs) criadas no Azure.

Quais são os pré-requisitos para habilitar a interface NVMe remota na minha VM?

Você pode usar DiskControllerType durante a configuração da VM para selecionar seu tipo de controlador preferido como NVMe ou Small Computer System Interface (SCSI). Se você não especificar um DiskControllerType valor, a plataforma escolherá automaticamente o controlador padrão com base na configuração de tamanho da VM. Se o tamanho da VM estiver configurado para SCSI como padrão e oferecer suporte a NVMe, a VM usará SCSI, a menos que você atualize o DiskControllerType valor para NVMe.

Para habilitar a interface NVMe em sua VM, você deve atender aos seguintes pré-requisitos:

  • Escolha uma família de VMs que suporte NVMe. Apenas os tamanhos de VM Ebsv5 e Ebdsv5 são equipados com NVMe nas VMs da geração Intel v5.

  • Selecione a imagem do sistema operacional marcada com suporte a NVMe. Depois de selecionar uma família de VMs suportada e um valor de imagem do sistema operacional, você será solicitado a selecionar o tipo de controlador de disco NVMe.

    Captura de tela de um prompt para selecionar um tipo de controlador de disco.

  • Opte pelo NVMe selecionando o tipo de controlador de disco NVMe no portal do Azure ou no modelo Azure Resource Manager, CLI do Azure ou Azure PowerShell. Para obter instruções passo a passo, consulte as Perguntas frequentes gerais sobre NVMe.

  • Certifique-se de que está a utilizar uma VM de Geração 2, porque a NVMe suporta apenas imagens de Geração 2.

  • Escolha uma das regiões do Azure onde o NVMe está habilitado.

Posso encriptar os meus discos NVMe remotos?

Não há nenhuma maneira nativa no Azure para criptografar esses discos. Você pode criptografá-los dentro do sistema operacional, mas precisará criptografá-los novamente após a montagem na inicialização.

Como posso redimensionar uma VM baseada em SCSI para uma VM remota habilitada para NVMe de um tamanho diferente?

Você pode usar o seguinte processo para:

  • Redimensione uma VM baseada em SCSI criada usando uma imagem não marcada para uma VM habilitada para NVMe de um tamanho diferente sem recriar as configurações da VM e sem marcar a imagem.
  • Redimensione uma VM baseada em SCSI para uma VM habilitada para NVMe de um tamanho diferente sem recriar as configurações da VM.

A VM de origem pode ser:

  • Uma imagem de SO não marcada que suporta NVMe.
  • Uma imagem do SO marcada com NVMe.

Para redimensionar a VM, use o seguinte comando para executar um script do Azure PowerShell que define o valor de destino discontrollertype da VM 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>]

Como posso verificar se uma imagem está marcada como NVMe?

Para verificar se uma imagem está marcada como NVMe, use o seguinte comando:

az vm image show --urn URN_OF_IMAGE

Como posso marcar uma imagem que suporte NVMe para discos remotos?

Para marcar uma imagem que suporta NVMe, siga estas etapas:

  1. Carregue um disco rígido virtual (VHD) suportado por NVMe para a sua conta de armazenamento. AzCopy é uma maneira rápida, mas você também pode usar o portal para fazer upload.

    azcopy copy <local path to your VHD> <container in your storage account>
    
  2. Crie uma galeria de imagens usando o Azure PowerShell, o portal ou a CLI do Azure.

  3. Crie uma definição de imagem. Certifique-se de incluir --feature DiskControllerTypes=SCSI,NVMe.

    Aqui está um exemplo de CLI do 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. Crie a versão da imagem na galeria marcada com NVMe com o VHD suportado por NVMe.

    Aqui está um exemplo de CLI do 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>
    

Como configuro um modelo ARM para a criação de VM?

Você pode usar a Extensão de Script Personalizado do Azure em conjunto com modelos do Azure Resource Manager (modelos ARM). Esta solução permite-lhe transferir e executar scripts em máquinas virtuais do Azure e é compatível com Windows e Linux. Para obter orientações detalhadas, consulte a documentação da Extensão de Script Personalizada do Azure para Windows e Linux.

O que acontece se eu quiser usar outra família de VMs que não ofereça suporte a discos NVMe remotos?

Se você selecionar uma família de VMs sem suporte, receberá esta mensagem de erro: "O tamanho da VM selecionado não pode inicializar com DiskControllerType. Verifique se o tipo de controlador de disco fornecido é um dos tipos de controlador de disco suportados para o tamanho da VM."

Certifique-se de selecionar uma família de VMs que suporte a interface NVMe. Para determinar quais tipos de controlador de disco são suportados para o tamanho da VM, consulte a lista de SKUs de recursos na API REST.

Quais opções de armazenamento em disco do Azure são compatíveis com discos NVMe remotos?

Os tamanhos de NVMe podem ser combinados com o SSD Premium do Azure v1, SSD Premium v2 e Armazenamento em Disco Ultra. Para obter mais informações sobre as ofertas de disco do Azure, consulte Tipos de disco gerenciado do Azure.

O Azure oferece suporte ao redimensionamento em tempo real em discos com tamanhos de VM NVMe?

O redimensionamento em tempo real de NVMe é suportado em discos SSD Premium v1 do Azure, discos SSD padrão e discos HDD padrão. Você também pode adicionar discos NVMe sem reiniciar a VM.

Como posso identificar discos NVMe remotos em uma VM Linux?

  1. Obtenha o nvme-cli pacote:

    sudo apt install nvme-cli
    
  2. Execute o comando NVMe list para buscar detalhes do disco NVMe:

    sudo nvme list
    

    Captura de tela de instruções para identificar discos NVMe em uma máquina virtual Linux.

    Captura de tela de instruções para escolher um ID de namespace no portal Linux.

    Veja como os dados aparecem em resposta aos comandos do Azure PowerShell:

    Captura de ecrã de um exemplo de resposta a um comando do Azure PowerShell.

Como posso identificar discos NVMe em uma VM do Windows?

Abra o Azure PowerShell e use o seguinte comando:

wmic diskdrive get model,scsilogicalunit

Captura de tela de um exemplo de comando do PowerShell para usar o NVMe no Windows.

Os discos anexados ASAP são apresentados no convidado com a cadeia de caracteres Virtual_Disk NVME Premiumdo modelo. A unidade lógica SCSI tem o valor para o ID de LUN visível do portal incrementado em 1.

Aqui está um instantâneo de como os discos NVMe aparecem em uma VM do Windows habilitada para NVMe:

Captura de tela que mostra um exemplo de um comando do Azure PowerShell para identificar o disco NVMe em uma VM do Windows.

O instantâneo a seguir mostra a saída de convidado para discos de dados conectados em LUN 0 e LUN 4 (CRP). O ID do LUN é equivalente ao ID do namespace.

Captura de tela que mostra um exemplo de como os discos NVMe aparecem em uma VM do Windows habilitada para NVMe.

Posso converter uma VM baseada em SCSI para NVMe habilitada, mantendo o mesmo tamanho de vCPU de VM com uma imagem de sistema operacional marcada com NVMe?

Este cenário é suportado apenas em sistemas operacionais Linux e não é suportado em sistemas operacionais Windows.

Os discos compartilhados em discos remotos são suportados com VMs habilitadas para NVMe?

O recurso de disco compartilhado é compatível com SSD Premium, SSD Premium v2 e discos Ultra Disk Storage.

Posso usar o Azure PowerShell ou a CLI do Azure para criar uma VM com um disco de sistema operacional a partir de um blob existente com NVMe habilitado?

Atualmente não é possível. Em vez disso, você pode usar a seguinte solução alternativa da API REST para criar uma VM com um disco do sistema operacional a partir de um blob existente com 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)