VHD を Azure にアップロードするか、他のリージョンにマネージド ディスクをコピーする - Azure PowerShell

適用対象: ✔️ Windows VM

この記事では、ローカル コンピューターから Azure マネージド ディスクに VHD をアップロードする方法や、Azure PowerShell モジュールを使用してマネージド ディスクを別のリージョンにコピーする方法について説明します。 マネージド ディスクをアップロードするプロセス (ダイレクト アップロードとも呼ばれます) を使用すると、最大 32 TiB のサイズの VHD をマネージド ディスクに直接アップロードできます。 現在、直接アップロードは Ultra Disks、Premium SSD v2、Premium SSD、Standard SSD、Standard HDD でサポートされています。

Azure の IaaS VM 向けにバックアップ ソリューションを提供している場合は、直接アップロードを使用して顧客のバックアップをマネージド ディスクに復元する必要があります。 Azure の外部のソースから VHD をアップロードする場合、速度はご利用のローカル帯域幅によって異なります。 Azure VM からアップロードまたはコピーを行う場合、帯域幅は標準の HDD と同じになります。

Microsoft Entra IDによるセキュアなアップロード

Microsoft Entra ID を使用してリソース アクセスを制御している場合は、それを使用して Azure マネージド ディスクのアップロードを制限できるようになりました。 この機能は、すべてのリージョンで GA オファリングとして利用できます。 ユーザーがディスクをアップロードしようとすると、Azure により、Microsoft Entra ID で要求するユーザーの ID が検証され、ユーザーが必要なアクセス許可を持っていることが確認されます。 より高いレベルで、システム管理者は、ディスクまたはディスク スナップショットをアップロードできるようにする前に、Azure アカウントまたはサブスクリプション レベルで、アップロードするために必要なアクセス許可が Microsoft Entra ID に与えられるようにするためのポリシーを設定できます。 Microsoft Entra ID でアップロードをセキュリティ保護する方法についてご質問がある場合は、azuredisks@microsoft .com までメールでお問い合わせください

前提条件

制限

  • VHD を空のスナップショットにアップロードすることはできません。
  • Azure Backup では、Microsoft Entra ID でセキュリティ保護されたディスクは現在サポートされていません。
  • Azure Site Recovery では、Microsoft Entra ID でセキュリティ保護されたディスクは現在サポートされていません。

RBAC ロールを割り当てる

Microsoft Entra ID を使用してセキュリティで保護されたマネージド ディスクにアクセスするには、要求するユーザーに、マネージド ディスクのデータ オペレーター ロール、または次のアクセス許可を持つカスタム ロールが必要です。

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

ロールの割り当ての詳細な手順については、「Azure PowerShell を使用して Azure ロールを割り当てる」を参照してください。 カスタム ロールを作成または更新するには、「Azure PowerShell を使用して Azure カスタム ロールを作成または更新する」を参照してください。

はじめに

Azure PowerShell モジュールを使用して VHD をアップロードするには、次の 2 つの方法があります。Add-AzVHD コマンドを使用すると、ほとんどのプロセスが自動化されます。また、AzCopy を使用して手動でアップロードを実行することもできます。

Premium SSD、Standard SSD、Standard HDD に対しては、通常一般的に、 Add-AzVHD を使用します。 ただし、Ultra Disk または Premium SSD v2 にアップロードする場合、または 50 GiB を超える VHD をアップロードする必要がある場合は、 手動で AzCopy を使用して VHD または VHDX をアップロードする必要があります。 AzCopy を使用すると、50 GiB 以上のVHDのアップロードが高速になります。また、現在 Add-AzVhd では、Ultra Disk と Premium SSD v2 へのアップロードはサポートされていません。

あるリージョンから別のリージョンにマネージド ディスクをコピーする方法については、「マネージド ディスクをコピーする」を参照してください。

Add-AzVHD を使用する

前提条件

  • Azure PowerShell モジュールをインストールします
  • VHD を Azure 用に準備し、ローカルに保存します。
    • Windows の場合: VHD を VHDx に変換したり、容量を固定サイズに変換したり、512 バイトのオフセットが含まれるようにサイズを変更したりする必要はありません。 Add-AZVHD によって、これらの機能が実行されます。
      • Add-AzVHD でこれらの機能を実行するには、Hyper-V を有効にする必要があります。
    • Linux の場合: これらの操作は手動で実行する必要があります。 詳細については、「VHD のサイズ変更」をご覧ください。

VHD のアップロード

(省略可能) ディスクへのアクセスを許可する

サブスクリプションまたはアカウント レベルでアップロード制限を適用するために Microsoft Entra ID を使用する場合、Add-AzVHD は、適切な RBAC ロールまたは必要なアクセス許可を持つユーザーが試行した場合にのみ成功します。 ディスクへのアクセスを許可し、書き込み可能な SAS を生成するには、RBAC アクセス許可を割り当てる必要があります。

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

Add-AzVHD を使用する

次の例では、Add-AzVHD を使用して、ローカル コンピューターから新しい Azure マネージド ディスクに VHD をアップロードします。 <your-filepath-here><your-resource-group-name><desired-region><desired-managed-disk-name> を実際のパラメーターに置き換えてください。

Note

アップロード制限を適用するために Microsoft Entra ID を使用している場合は、DataAccessAuthMode 'AzureActiveDirectory'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

手動アップロード

前提条件

ご利用の VHD を Azure にアップロードするには、このアップロード プロセス用に構成された空のマネージド ディスクを作成する必要があります。 作成する前に、それらのディスクについて把握しておく必要がある追加情報があります。

この種類のマネージド ディスクには、2 つの固有の状態があります。

  • ReadyToUpload。ディスクはアップロードを受け取る準備ができていますが、Secure Access Signature (SAS) が生成されていないことを意味します。
  • ActiveUpload。ディスクはアップロードを受け取る準備ができており、SAS が生成済みであることを意味します。

注意

これらのいずれかの状態にある間は、実際のディスクの種類に関係なく、マネージド ディスクには Standard HDD 料金が課金されます。 たとえば、P10 は S10 として課金されます。 これは、revoke-access がマネージド ディスク上で呼び出される (ディスクを VM にアタッチするために必要な処理) まで当てはまります。

空のマネージド ディスクを作成する

アップロード用に空の標準 HDD を作成するには、アップロードする vhd のファイル サイズ (バイト単位) が必要です。 このコード例ではこのサイズを自動で取得できますが、この操作を自分で行うには、$vhdSizeBytes = (Get-Item "<fullFilePathHere>").length を使用します。 この値は、 -UploadSizeInBytes パラメーターを指定するときに使用します。

次に、ご利用のローカル シェル上に、アップロード用の空の標準 HDD を作成するには、New-AzDiskConfig コマンドレットにおいて、 -CreateOption パラメーターに Upload 設定を指定すると共に、 -UploadSizeInBytes パラメーターを指定します。 次に、New-AzDisk を呼び出してディスクを作成します。

<yourdiskname><yourresourcegroupname><yourregion> を置き換え、次のコマンドを実行します。

重要

OS ディスクを作成する場合は、-HyperVGeneration '<yourGeneration>'New-AzDiskConfig に追加します。

Microsoft Entra ID を使用してアップロードをセキュリティで保護する場合は、-dataAccessAuthMode 'AzureActiveDirectory'New-AzDiskConfig に追加します。
Ultra Disk または Premium SSD v2 にアップロードする場合は、ターゲット ディスクの正しいセクター サイズを選択する必要があります。 論理セクター サイズが 4k の VHDX ファイルを使用している場合は、ターゲット ディスクを 4k に設定する必要があります。 論理セクター サイズが 512 の VHD ファイルを使用している場合は、ターゲット ディスクを 512 に設定する必要があります。

論理セクター サイズが 512k の VHDX ファイルはサポートされていません。

$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_LRSPremium_LRSPremium_ZRSStandardSSD_ZRSStandardSSD_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 v10 を使用して、生成した SAS URI を指定してローカルの VHD または VHDX ファイルをマネージド ディスクにアップロードします。

このアップロードのスループットは、同等の Standard HDD と同じです。 たとえば、S4 と同等のサイズの場合、最大 60 MiB/秒のスループットが得られます。 ただし、S70 と同等のサイズの場合、最大 500 MiB/秒のスループットが得られます。

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

アップロードが完了し、ディスクにこれ以上データを書き込む必要がなくなったら、SAS を無効にします。 SAS を無効にすると、マネージド ディスクの状態が変わり、そのディスクを VM にアタッチできるようになります。

<yourdiskname><yourresourcegroupname> を置き換え、次のコマンドを実行します。

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

マネージド ディスクをコピーする

ダイレクト アップロードを行うと、マネージド ディスクをコピーするプロセスも簡略化されます。 同じリージョン内にコピーするか、マネージド ディスクを別のリージョンにコピーすることができます。

次のスクリプトでは、これが自動的に実行されます。このプロセスは前述の手順と似ていますが、既存のディスクを操作しているため、いくつかの違いがあります。

重要

Azure のマネージド ディスクのディスク サイズ (バイト単位) を指定する場合は、512 のオフセットを追加する必要があります。 これは、Azure からディスク サイズが返されるときにフッターが省略されるためです。 この操作を行わないと、コピーは失敗します。 次のスクリプトでは、この操作が自動的に行われています。

<sourceResourceGroupHere><sourceDiskNameHere><targetDiskNameHere><targetResourceGroupHere><yourOSTypeHere>、および <yourTargetLocationHere> (場所の値の例: uswest2) を実際の値に置き換えたら、次のスクリプトを実行してマネージド ディスクをコピーします。

ヒント

OS ディスクを作成する場合は、-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 

次のステップ

VHD をマネージド ディスクに正常にアップロードしたので、ディスクを VM にアタッチして使用を開始できます。

データ ディスクを VM にアタッチする方法については、この主題に関する記事を参照してください。PowerShell を使用してデータ ディスクを Windows VM にアタッチする。 ディスクを OS ディスクとして使用する方法については、「特殊化されたディスクからの Windows VM の作成」を参照してください。

その他の質問がある場合は、FAQ のマネージド ディスクのアップロードに関するセクションを参照してください。