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.
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:
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>
Crie uma galeria de imagens usando o Azure PowerShell, o portal ou a CLI do Azure.
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
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?
Obtenha o
nvme-cli
pacote:sudo apt install nvme-cli
Execute o comando NVMe
list
para buscar detalhes do disco NVMe:sudo nvme list
Veja como os dados aparecem em resposta aos comandos 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
Os discos anexados ASAP são apresentados no convidado com a cadeia de caracteres Virtual_Disk NVME Premium
do 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:
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.
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)