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

適用対象: ✔️ Windows VM

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

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

作業の開始

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

一般的には、Add-AzVHD を使用する必要があります。 ただし、50 GiB より大きい VHD をアップロードする必要がある場合は、AzCopy を使用して手動で VHD をアップロードすることを検討してください。 50 GiB 以上の VHD の場合は、AzCopy を使用すると、より高速にアップロードできます。

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

Add-AzVHD を使用する

前提条件

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

VHD のアップロード

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

# 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>

# 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 に追加します。

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

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

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

Premium SSD または Standard SSD をアップロードする場合は、Standard_LRSPremium_LRS または StandardSSD_LRS のいずれかに置き換えます。 Ultra Disks はまだサポートされていません。

アップロード プロセス用に構成された空のマネージド ディスクを作成したので、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 のアップロード

空のマネージド ディスク用の SAS が用意できたので、それを使用して、マネージド ディスクをアップロード コマンドのアップロード先として設定できます。

AzCopy v10 を使用して、生成した SAS URI を指定してローカルの VHD ファイルをマネージド ディスクにアップロードします。

このアップロードのスループットは、同等の 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>
#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'

$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 の作成」を参照してください。