Отправка VHD в Azure или копирование управляемого диска в другой регион с помощью Azure PowerShell

Область применения: ✔️ Виртуальные машины Windows

В этой статье объясняется, как с помощью модуля Azure PowerShell отправить виртуальный жесткий диск с локального компьютера на управляемый диск Azure или скопировать управляемый диск в другой регион. Этот процесс, также известный как прямая отправка управляемого диска, позволяет передавать виртуальный жесткий диск размером до 32 ТиБ непосредственно на управляемый диск. В настоящее время прямая передача поддерживается для дисков категории "Ультра", SSD уровня "Премиум" версии 2, SSD уровня "Премиум", SSD уровня "Стандартный" и "Стандартный" HDD.

Если вы предоставляете решение по резервному копированию для виртуальных машин IaaS в Azure, то должны использовать прямую отправку для восстановления резервных копий клиентов на управляемые диски. При отправке виртуального жесткого диска из внешнего источника в Azure скорость передачи зависит от локальной пропускной способности. При отправке или копировании из виртуальной машины Azure пропускная способность будет такой же, как и для стандартных жестких дисков.

Безопасные отправки с помощью идентификатора Microsoft Entra

Если вы используете идентификатор Microsoft Entra для управления доступом к ресурсам, теперь его можно использовать для ограничения отправки управляемых дисков Azure. Эта функция доступна как общедоступное предложение во всех регионах. Когда пользователь пытается отправить диск, Azure проверяет удостоверение запрашивающего пользователя в идентификаторе Microsoft Entra и подтверждает, что у пользователя есть необходимые разрешения. На более высоком уровне системный администратор может задать политику на уровне учетной записи Или подписки Azure, чтобы убедиться, что удостоверение Microsoft Entra имеет необходимые разрешения для отправки перед отправкой диска или моментального снимка диска. Если у вас есть вопросы по защите отправки с помощью идентификатора Microsoft Entra, обратитесь к этой электронной почте: azuredisks@microsoft .com

Необходимые компоненты

Ограничения

  • Виртуальные жесткие диски нельзя передать в пустые моментальные снимки.
  • Azure Backup в настоящее время не поддерживает диски, защищенные с помощью идентификатора Microsoft Entra.
  • Azure Site Recovery в настоящее время не поддерживает диски, защищенные с помощью идентификатора Microsoft Entra.

Назначение роли RBAC

Чтобы получить доступ к управляемым дискам, защищенным с помощью идентификатора Microsoft Entra, запрашивающий пользователь должен иметь оператор данных для роли Управляемые диски или пользовательскую роль со следующими разрешениями:

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

Подробные инструкции по назначению роли см. в статье Назначение ролей Azure с помощью Azure PowerShell. Сведения о создании или обновлении настраиваемой роли см. в статье Создание или обновление настраиваемых ролей Azure с помощью Azure PowerShell.

Начало работы

Существует два способа отправки виртуального жесткого диска с помощью модуля Azure PowerShell. Можно использовать команду Add-AzVHD, при которой практически весь процесс автоматизирован, или выполнить отправку вручную посредством AzCopy.

Для SSD уровня "Премиум", "Стандартные" и "Стандартные жесткие диски" обычно следует использовать Add-AzVHD. Тем не менее, если вы отправляете на диск ценовой категории "Ультра" или SSD уровня "Премиум" версии 2, или если вам нужно отправить виртуальный жесткий диск размером более 50 ГиБ, необходимо отправить виртуальный жесткий диск или VHDX вручную с помощью AzCopy. Виртуальные жесткие диски 50 ГиБ и большей загрузки быстрее с помощью AzCopy и Add-AzVhd в настоящее время не поддерживают отправку на диск ценовой категории "Ультра" или SSD категории "Премиум" версии 2.

Инструкции по копированию управляемого диска из одного региона в другой см. в разделе Копирование управляемого диска.

Использование Add-AzVHD

Необходимые компоненты

Передача VHD

(Необязательно) Предоставление доступа к диску

Если идентификатор Microsoft Entra используется для принудительного применения ограничений отправки для подписки или на уровне учетной записи, add-AzVHD выполняется успешно, только если пользователь пытается выполнить соответствующую роль RBAC или необходимые разрешения. Вам потребуется назначить разрешения RBAC для предоставления доступа к диску и создания SAS с возможностью записи.

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

Использование Add-AzVHD

В следующем примере виртуальный жесткий диск отправляется с локального компьютера на новый управляемый файл Azure с помощью Add-AzVHD. Замените <your-filepath-here>, <your-resource-group-name>, <desired-region> и <desired-managed-disk-name> своими параметрами:

Примечание.

Если вы используете идентификатор Microsoft Entra для принудительного применения ограничений Add-AzVhd отправки, добавьте DataAccessAuthMode 'AzureActiveDirectory' в конец команды.

# 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

Отправка вручную

Необходимые компоненты

Чтобы отправить виртуальный жесткий диск в Azure, необходимо создать пустой управляемый диск, настроенный для этого процесса отправки. Прежде чем создать его, необходимо ознакомиться с дополнительными сведениями о таких дисках.

Управляемый диск такого типа имеет два уникальных состояния:

  • ReadyToUpload — означает, что диск готов к получению отправки, однако для него не создан подписанный URL-адрес (SAS).
  • ActiveUpload — означает, что диск готов к получению отправки, и для него создан SAS.

Примечание.

В любом из этих состояний плата за управляемый диск будет взиматься по стандартному тарифу на HDD, независимо от фактического типа диска. Например, P10 будет оплачиваться как S10. Это справедливо до тех пор, пока на управляемом диске не будет вызван revoke-access, что необходимо для подключения диска к виртуальной машине.

Создание пустого управляемого диска

Перед созданием пустого стандартного жесткого диска для отправки вам потребуется размер файла виртуального жесткого диска, который требуется передать (в байтах). Для получения необходимой информации можно использовать пример кода, однако для самостоятельного получения можно использовать следующий код: $vhdSizeBytes = (Get-Item "<fullFilePathHere>").length. Это значение используется при указании параметра -UploadSizeInBytes.

Теперь в локальной оболочке создайте пустой стандартный жесткий диск для отправки, указав параметр Upload в параметре -CreateOption, а также параметр -UploadSizeInBytes в командлете New-AzDiskConfig. Затем вызовите New-AzDisk, чтобы создать диск.

Замените <yourdiskname>, <yourresourcegroupname> и <yourregion>, затем выполните следующие команды:

Важно!

При создании диска ОС добавьте -HyperVGeneration '<yourGeneration>' в New-AzDiskConfig.

Если вы используете идентификатор Microsoft Entra для защиты отправки, добавьте -dataAccessAuthMode 'AzureActiveDirectory' в New-AzDiskConfigнего.
При отправке на диск ценовой категории "Ультра" или SSD уровня "Премиум" версии 2 необходимо выбрать правильный размер сектора целевого диска. Если вы используете VHDX-файл с размером 4 кб логического сектора, целевой диск должен иметь значение 4k. Если вы используете VHD-файл с размером 512 логических секторов, целевой диск должен иметь значение 512.

Файлы VHDX с размером 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

Если вы хотите отправить другой тип диска, замените Standard_LRS Premium_LRS, Premium_ZRS, StandardSSD_ZRS, StandardSSD_LRS или UltraSSD_LRS.

Создание SAS с доступом для записи

Теперь, когда вы создали пустой управляемый диск, настроенный для процесса отправки, вы можете отправить в него VHD. Чтобы отправить VHD на диск, потребуется записываемый SAS, чтобы можно было ссылаться на него как на место назначения для отправки.

Чтобы создать записываемый SAS для пустого управляемого диска, замените <yourdiskname> и <yourresourcegroupname>, а затем используйте следующие команды:

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

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

Отправка VHD или VHDX

Теперь, когда у вас есть SAS для пустого управляемого диска, его можно использовать для задания управляемого диска в качестве места назначения для команды отправки.

Используйте AzCopy версии 10 для отправки локального VHD-файла или VHDX-файла на управляемый диск, указав созданный URI SAS.

Пропускная способность эквивалентна HDD (цен. категория "Стандартный"). Например, если размер равен S4, пропускная способность будет до 60 МиБ/с. Однако, если размер равен S70, пропускная способность будет до 500 МиБ/с.

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

После завершения отправки, когда вам больше не нужно записывать какие-либо данные на диск, отзовите SAS. Отзыв SAS изменит состояние управляемого диска и позволит подключить диск к виртуальной машине.

Замените <yourdiskname> и <yourresourcegroupname>, затем выполните следующий сценарий:

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

Копирование управляемого диска

Прямая отправка также упрощает процесс копирования управляемого диска. Копирование можно выполнить в пределах одного и того же региона, либо скопировать управляемый диск в другой регион.

Следующий сценарий делает это автоматически. Процесс аналогичен описанному ранее порядку действий с некоторыми отличиями, так как вы работаете с существующим диском.

Важно!

При предоставлении размера управляемого диска в байтах из Azure нужно добавить смещение в 512 байт. Это обусловлено тем, что при возврате диска в Azure опускается нижний колонтитул. Если этого не сделать, копирование завершится ошибкой. Следующий сценарий делает это автоматически.

Замените <sourceResourceGroupHere>, <sourceDiskNameHere>, <targetDiskNameHere>, <targetResourceGroupHere>, <yourOSTypeHere> и <yourTargetLocationHere> (примером значения расположения будет uswest2) со своими значениями, а затем выполните следующий сценарий, чтобы скопировать управляемый диск.

Совет

При создании диска ОС добавьте -HyperVGeneration '<yourGeneration>' в 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 

Следующие шаги

После успешной отправки виртуального жесткого диска на управляемый диск можно подключить его к виртуальной машине и приступить к его использованию.

Сведения о подключении диска данных к виртуальной машине см. в следующей статье: Подключение диска данных к виртуальной машине Windows с помощью PowerShell. Сведения о том, как использовать диск в качестве диска операционной системы, см. в статье Создание виртуальной машины Windows из специализированного диска.

Если у вас есть дополнительные вопросы, ознакомьтесь с разделом о отправке управляемого диска в разделе часто задаваемых вопросов.