Este artigo aborda algumas perguntas comuns sobre o suporte para discos NVMe (NVM Express) remotos em VMs (máquinas virtuais) 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 o tipo de controlador preferido como NVMe ou SCSI (Small Computer System Interface). Se você não especificar um valor DiskControllerType
, 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 o SCSI como o padrão e oferecer suporte ao NVMe, a VM usará o SCSI, a menos que você atualize o valor DiskControllerType
para NVMe.
Para habilitar a interface NVMe na VM, você deve atender aos seguintes pré-requisitos:
Escolha uma família de VMs com suporte para NVMe. Somente os tamanhos de VM Ebsv5 e Ebdsv5 estão equipados com NVMe nas VMs Intel da geração v5.
Selecione a imagem do sistema operacional que estiver marcada como tendo suporte a NVMe. Depois de selecionar um valor com suporte de família da VM e imagem de SO com suporte, você receberá uma solicitação para selecionar o tipo de controlador de disco NVMe.
Aceite o NVMe selecionando o tipo de controlador de disco NVMe no portal do Azure ou no modelo do Azure Resource Manager, da CLI do Azure ou do Azure PowerShell. Para obter instruções passo a passo, consulte as perguntas frequentes gerais do NVMe.
Verifique se você está usando uma VM de Geração 2, pois o NVMe só dá suporte a imagens de Geração 2.
Escolha uma das regiões do Azure na qual o NVMe está habilitado
Posso criptografar meus discos NVMe remotos?
Não há uma forma nativa no Azure de criptografar esses discos. Você pode criptografá-los dentro do SO, 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:
- Redimensionar uma VM baseada em SCSI criada usando uma imagem sem marca em uma VM habilitada para NVMe de um tamanho diferente sem recriar as configurações da VM e sem marcar a imagem.
- Redimensionar 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 do SO sem marca que dá suporte ao NVMe.
- Uma imagem do SO marcada por 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 fazer para marcar uma imagem que dá suporte a NVMe para discos remotos?
Para marcar uma imagem que dê suporte ao NVMe, siga estas etapas:
Carregue um VHD (disco rígido virtual) compatível com NVMe na sua conta de armazenamento. AzCopy é uma maneira rápida, mas você também pode usar o portal para carregar.
azcopy copy <local path to your VHD> <container in your storage account>
Crie uma galeria de imagens usando o Azure PowerShell, o portal ou a CLI do Azure.
Crie uma definição de imagem. Lembre-se de incluir
--feature DiskControllerTypes=SCSI,NVMe
.Veja um exemplo da 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
Crie a versão da imagem na galeria marcada por NVMe com o VHD compatível com o NVMe.
Veja um exemplo da 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 configurar um modelo do ARM para a criação da VM?
Você pode usar a extensão de script personalizado do Azure em conjunto com modelos do Azure Resource Manager (modelos do ARM). Essa solução permite que você baixe e execute scripts em máquinas virtuais do Azure e seja compatível com o Windows e o Linux. Para obter as diretrizes detalhadas, consulte a documentação da Extensão de Script Personalizado do Azure para Windows e Linux.
O que acontece se eu quiser usar outra família de VM que não dá suporte a discos NVMe remotos?
Se você selecionar uma família de VM sem suporte, receberá esta mensagem de erro: "O tamanho da VM selecionada não pode ser inicializado com o DiskControllerType. Verifique se o tipo de controlador de disco fornecido é um dos tipos com suporte para o tamanho da VM".
Selecione uma família de VMs que dê suporte à interface do NVMe. Para determinar quais tipos de controlador de disco têm suporte 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 SSD Premium v1, SSD Premium v2 e Armazenamento de Disco Ultra do Azure. Para obter mais informações sobre as ofertas de disco do Azure, confira Tipos de disco gerenciado do Azure.
O Azure dá suporte ao redimensionamento dinâmico em discos com tamanhos de VM NVMe?
Há suporte para o redimensionamento dinâmico de NVMe em discos SSD Premium v1, discos SSD Standard e discos HDD Standard do Azure. Você também pode adicionar discos NVMe sem reiniciar a VM.
Como identificar discos NVMe remotos em uma VM do Linux?
Obtenha o pacote
nvme-cli
:sudo apt install nvme-cli
Execute o comando
list
do NVMe para buscar detalhes do disco NVMe:sudo nvme list
Veja como os dados aparecem em resposta aos comandos do Azure PowerShell:
Como identificar discos NVMe em uma VM do Windows?
Abra o Azure PowerShell e use o seguinte comando:
wmic diskdrive get model,scsilogicalunit
Os discos anexados ASAP são apresentados no convidado com a cadeia de caracteres do modelo Virtual_Disk NVME Premium
. A unidade lógica do SCSI tem o valor da ID do LUN visível do portal incrementada em 1.
Aqui está um instantâneo de como os discos NVMe aparecem na VM do Windows habilitada para NVMe:
O instantâneo a seguir mostra a saída de convidado para discos de dados anexados em LUN 0 e LUN 4 (CRP). A ID do LUN é equivalente à ID do namespace.
Posso converter uma VM baseada em SCSI para uma habilitada para NVMe e manter o mesmo tamanho de vCPU da VM com uma imagem de SO marcada como NVMe?
Esse cenário é compatível apenas com sistemas operacionais Linux e não tem suporte em sistemas operacionais Windows.
Há suporte para discos compartilhados em discos remotos com VMs habilitadas para NVMe?
O recurso de disco compartilhado tem suporte para discos Premium SSD, SSD Premium v2 e Armazenamento de Disco Ultra.
Posso usar o Azure PowerShell ou a CLI do Azure para criar uma VM com um disco do SO a partir de um blob existente com o NVMe habilitado?
No momento, isso 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 SO de um blob existente com o 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)