Carregar um VHD no Azure ou copiar um disco gerenciado para outra região - Azure PowerShell

Aplica-se a: ✔️ Windows VMs

Este artigo explica como carregar um VHD do computador local para um disco gerenciado do Azure ou copiar um disco gerenciado para outra região, usando o módulo do Azure PowerShell. O processo de upload de um disco gerenciado, também conhecido como upload direto, permite carregar um VHD de até 32 TiB diretamente em um disco gerenciado. Atualmente, há suporte para upload direto nos Discos Ultra, SSD Premium v2, SSD Premium, SSD Standard e HDD Standard.

Se você estiver fornecendo uma solução de backup para VMs de IaaS no Azure, use o upload direto para restaurar os backups de clientes em discos gerenciados. Ao carregar um VHD de uma fonte externa no Azure, as velocidades dependem da largura de banda local. Ao carregar ou copiar de uma VM do Azure, a largura de banda seria a mesma que dos HDs Standard.

Uploads seguros com o Microsoft Entra ID

Se você estiver usando o Microsoft Entra ID para controlar o acesso a recursos, agora poderá usá-lo para restringir o upload de discos gerenciados do Azure. Esse recurso está disponível como uma oferta em GA em todas as regiões. Quando um usuário tenta carregar um disco, o Azure valida a identidade do usuário solicitante no Microsoft Entra ID e confirma que o usuário tem as permissões necessárias. Em um nível mais alto, um administrador do sistema pode definir uma política no nível de conta ou assinatura do Azure, para garantir que uma identidade do Microsoft Entra tenha as permissões necessárias para upload antes de permitir que um disco ou um instantâneo de disco seja carregado. Se você tiver alguma dúvida sobre como proteger uploads com o Microsoft Entra ID, entre em contato com este email: azuredisks@microsoft.com

Pré-requisitos

Restrições

  • Os VHDs não podem ser carregados em instantâneos vazios.
  • No momento, o Backup do Azure não dá suporte a discos protegidos com o Microsoft Entra ID.
  • No momento, o Azure Site Recovery não dá suporte a discos protegidos com o Microsoft Entra ID.

Atribuir função RBAC

Para acessar discos gerenciados protegidos com o Microsoft Entra ID, o usuário solicitante precisa ter a função Operador de Dados para Discos Gerenciados ou uma função personalizada com as seguintes permissões:

  • Microsoft.Compute/disks/download/action
  • Microsoft.Compute/disks/upload/action
  • Microsoft.Compute/snapshots/download/action
  • Microsoft.Compute/snapshots/upload/action

Para obter etapas detalhadas sobre como atribuir uma função, confira Atribuir funções do Azure usando o Azure PowerShell. Para criar ou atualizar uma função personalizada, confira Criar ou atualizar funções personalizadas do Azure usando o Azure PowerShell.

Introdução

Há duas maneiras de carregar um VHD com o módulo do Azure PowerShell: você pode usar o comando Add-AzVHD, que automatiza a maior parte do processo ou fazer o upload manualmente com o AzCopy.

Para SSDs Premium, SSDs Standard e HDDs Standard, geralmente, você deve usar o Add-AzVHD. No entanto, se estiver carregando em um Disco Ultra ou um SSD Premium v2 ou se precisar carregar um VHD maior que 50 GiB, você deve carregar o VHD ou o VHDX manualmente com o AzCopy. Atualmente, os VHDs de 50 GiB e upload maior e mais rápido usando AzCopy e Add-AzVhd não dão suporte ao upload em um Disco Ultra ou em um SSD Premium v2.

Para obter diretrizes de como copiar um disco gerenciado de uma região para outra, confira Copiar um disco gerenciado.

Usar o Add-AzVHD

Pré-requisitos

  • Instalar o módulo do Azure PowerShell.
  • Um VHD foi preparado para o Azure, armazenado localmente.
    • No Windows: você não precisa converter o VHD em VHDx, convertê-lo em um tamanho fixo nem redimensioná-lo para incluir o deslocamento de 512 bytes. O Add-AZVHD executa essas funções para você.
      • O Hyper-V precisa ser habilitado para que o Add-AzVHD execute essas funções.
    • No Linux: você precisa executar essas ações manualmente. Confira Como dimensionar VHDs para obter detalhes.

Carregar um VHD

(Opcional) Conceder acesso ao disco

Se o Microsoft Entra ID for usado para impor restrições de upload em uma assinatura ou no nível da conta, o Add-AzVHD só terá êxito se for tentado por um usuário que tenha a função RBAC apropriada ou as permissões necessárias. Você precisará atribuir permissões RBAC para conceder acesso ao disco e gerar uma SAS gravável.

New-AzRoleAssignment -SignInName <emailOrUserprincipalname> `
-RoleDefinitionName "Data Operator for Managed Disks" `
-Scope /subscriptions/<subscriptionId>

Usar o Add-AzVHD

O exemplo a seguir carrega um VHD do computador local em um novo disco gerenciado do Azure usando o Add-AzVHD. Substitua <your-filepath-here>, <your-resource-group-name>, <desired-region> e <desired-managed-disk-name> pelos seus parâmetros:

Observação

Se você estiver usando o Microsoft Entra ID para impor restrições de upload, adicione DataAccessAuthMode 'AzureActiveDirectory' ao final do comando Add-AzVhd.

# Required parameters
$path = <your-filepath-here>.vhd
$resourceGroup = <your-resource-group-name>
$location = <desired-region>
$name = <desired-managed-disk-name>

# Optional parameters
# $Zone = <desired-zone>
# $sku=<desired-SKU>
# -DataAccessAuthMode 'AzureActiveDirectory'
# -DiskHyperVGeneration = V1 or V2. This applies only to OS disks.

# To use $Zone or #sku, add -Zone or -DiskSKU parameters to the command
Add-AzVhd -LocalFilePath $path -ResourceGroupName $resourceGroup -Location $location -DiskName $name

Upload manual

Pré-requisitos

Para carregar o VHD no Azure, você precisará criar um disco gerenciado vazio que esteja configurado para esse processo de upload. Antes de criar um, há algumas informações adicionais que você deve saber sobre esses discos.

Esse tipo de disco gerenciado tem dois estados exclusivos:

  • ReadToUpload, que significa que o disco está pronto para receber um upload, mas nenhuma SAS (assinatura de acesso seguro) foi gerada.
  • ActiveUpload, o que significa que o disco está pronto para receber um upload e a SAS foi gerada.

Observação

Em qualquer um desses estados, o disco gerenciado será cobrado no preço HDD Standard, independentemente do tipo real de disco. Por exemplo, um P10 será cobrado como um S10. Isso será verdadeiro até que revoke-access seja chamado no disco gerenciado, o que é necessário para anexar o disco a uma VM.

Criar um disco gerenciado vazio

Para criar um HDD Standard vazio para upload, você precisará do tamanho do arquivo do VHD que deseja carregar, em bytes. O código de exemplo fornecerá esse valor, mas você pode fazer isso por conta própria usando: $vhdSizeBytes = (Get-Item "<fullFilePathHere>").length. Esse valor é usado na especificação do parâmetro -UploadSizeInBytes.

Agora, no shell local, crie um HDD padrão vazio para upload especificando a configuração Carregar no parâmetro -CreateOption, bem como o parâmetro -UploadSizeInBytes no cmdlet New-AzDiskConfig. Chame New-AzDisk para criar o disco.

Substitua <yourdiskname>, <yourresourcegroupname> e <yourregion> e, em seguida, execute os comandos a seguir:

Importante

Se você estiver criando um disco do sistema operacional, adicione -HyperVGeneration '<yourGeneration>' a New-AzDiskConfig.

Se você estiver usando o Microsoft Entra ID para proteger seus uploads, adicione -dataAccessAuthMode 'AzureActiveDirectory' a New-AzDiskConfig.
Ao carregar em um Disco Ultra ou SSD Premium v2, você precisa selecionar o tamanho correto do setor do disco de destino. Se você estiver usando um arquivo VHDX com um tamanho de setor lógico de 4k, o disco de destino deverá ser definido como 4k. Se você estiver usando um arquivo VHD com um tamanho de setor lógico 512, o disco de destino deverá ser definido como 512.

Não há suporte para os arquivos VHDX com tamanho de setor lógico de 512k.

$vhdSizeBytes = (Get-Item "<fullFilePathHere>").length

## For Ultra Disks or Premium SSD v2, add -LogicalSectorSize and specify either 4096 or 512, depending on if you're using a VHDX or a VHD

$diskconfig = New-AzDiskConfig -SkuName 'Standard_LRS' -OsType 'Windows' -UploadSizeInBytes $vhdSizeBytes -Location '<yourregion>' -CreateOption 'Upload'

New-AzDisk -ResourceGroupName '<yourresourcegroupname>' -DiskName '<yourdiskname>' -Disk $diskconfig

Se você quiser carregar um tipo de disco diferente, substitua Standard_LRS por Premium_LRS, Premium_ZRS, StandardSSD_ZRS, StandardSSD_LRS ou UltraSSD_LRS.

Gerar um SAS gravável

Agora que você criou um disco gerenciado vazio que está configurado para o processo de upload, carregue um VHD nele. Para carregar um VHD no disco, você precisará de uma SAS gravável, para referenciá-la como o destino do upload.

Para gerar um SAS gravável do disco gerenciado vazio, substitua <yourdiskname> e <yourresourcegroupname> e use os comandos a seguir:

$diskSas = Grant-AzDiskAccess -ResourceGroupName '<yourresourcegroupname>' -DiskName '<yourdiskname>' -DurationInSecond 86400 -Access 'Write'

$disk = Get-AzDisk -ResourceGroupName '<yourresourcegroupname>' -DiskName '<yourdiskname>'

Carregar um VHD ou VHDX

Agora que você tem uma SAS para o disco gerenciado vazio, use-a para definir o disco gerenciado como o destino para o comando de upload.

Use o AzCopy v10 para carregar seu arquivo VHD local em um disco gerenciado, especificando o URI da SAS que você gerou.

Esse upload tem a mesma taxa de transferência que o HDD Standard equivalente. Por exemplo, se você tiver um tamanho que seja igual a S4, terá uma taxa de transferência de até 60 MiB/s. Mas se você tiver um tamanho igual a S70, terá uma taxa de transferência de até 500 MiB/s.

AzCopy.exe copy "c:\somewhere\mydisk.vhd" $diskSas.AccessSAS --blob-type PageBlob

Depois que o upload for concluído e você não precisar gravar mais dados no disco, revogue a SAS. A revogação da SAS vai alterar o estado do disco gerenciado e permitir que você anexe o disco a uma VM.

Substitua <yourdiskname> e <yourresourcegroupname> e, em seguida, execute o comando a seguir:

Revoke-AzDiskAccess -ResourceGroupName '<yourresourcegroupname>' -DiskName '<yourdiskname>'

Copiar um disco gerenciado

O upload direto também simplifica o processo de cópia de um disco gerenciado. Você pode copiar o disco gerenciado na mesma região ou em outra.

O script a seguir fará isso para você. O processo é semelhante às etapas já descritas, com algumas diferenças, pois você está trabalhando com um disco existente.

Importante

Você precisa adicionar um deslocamento de 512 ao fornecer o tamanho do disco em bytes de um disco gerenciado do Azure. Isso ocorre porque o Azure omite o rodapé ao retornar o tamanho do disco. A cópia falhará se você não fizer isso. O script a seguir já faz isso para você.

Substitua <sourceResourceGroupHere>, <sourceDiskNameHere>, <targetDiskNameHere>, <targetResourceGroupHere>, <yourOSTypeHere> e <yourTargetLocationHere> (um exemplo de valor de localização é uswest2) por seus valores e execute o script a seguir para copiar um disco gerenciado.

Dica

Se você estiver criando um disco do sistema operacional, adicione -HyperVGeneration '<yourGeneration>' ao New-AzDiskConfig.


$sourceRG = <sourceResourceGroupHere>
$sourceDiskName = <sourceDiskNameHere>
$targetDiskName = <targetDiskNameHere>
$targetRG = <targetResourceGroupHere>
$targetLocate = <yourTargetLocationHere>
$targetVmGeneration = "V1" # either V1 or V2
#Expected value for OS is either "Windows" or "Linux"
$targetOS = <yourOSTypeHere>

$sourceDisk = Get-AzDisk -ResourceGroupName $sourceRG -DiskName $sourceDiskName

# Adding the sizeInBytes with the 512 offset, and the -Upload flag
$targetDiskconfig = New-AzDiskConfig -SkuName 'Standard_LRS' -osType $targetOS -UploadSizeInBytes $($sourceDisk.DiskSizeBytes+512) -Location $targetLocate -CreateOption 'Upload' -HyperVGeneration $targetVmGeneration

$targetDisk = New-AzDisk -ResourceGroupName $targetRG -DiskName $targetDiskName -Disk $targetDiskconfig

$sourceDiskSas = Grant-AzDiskAccess -ResourceGroupName $sourceRG -DiskName $sourceDiskName -DurationInSecond 86400 -Access 'Read'

$targetDiskSas = Grant-AzDiskAccess -ResourceGroupName $targetRG -DiskName $targetDiskName -DurationInSecond 86400 -Access 'Write'

azcopy copy $sourceDiskSas.AccessSAS $targetDiskSas.AccessSAS --blob-type PageBlob

Revoke-AzDiskAccess -ResourceGroupName $sourceRG -DiskName $sourceDiskName

Revoke-AzDiskAccess -ResourceGroupName $targetRG -DiskName $targetDiskName 

Próximas etapas

Agora que você carregou um VHD em um disco gerenciado, você pode anexar seu disco a uma VM e começar a usá-lo.

Para saber como anexar um disco de dados a uma VM, consulte nosso artigo sobre o assunto: Anexar um disco de dados a uma VM do Windows com o PowerShell. Para usar o disco como o disco do sistema operacional, consulte Criar uma VM do Windows a partir de um disco especializado.

Se você tiver perguntas adicionais, confira a seção sobre como carregar um disco gerenciado nas perguntas frequentes.