Storage アカウント間での Azure Virtual Machines の移行


このポストは、10 月 22 日に投稿された Migrate Azure Virtual Machines between Storage Accounts の翻訳です。

Azure での作業では、Virtual Machines を別の Storage アカウントへ移行することがよくあります。

その手順を詳しく見ていく前に、Azure Virtual Machines のセットアップでの処理についておさらいしておきましょう。Azure Virtual Machines の作成では、コンピューティングと Storage の 2 つのサービスが連携して処理を行います。Storage サービス側では、Azure Storage サービス内の Storage アカウントの 1 つに VHD が作成されます。この VHD が保存されている物理ノードは、Virtual Machines の配置先として指定したリージョンにあります。コンピューティング サービス側では、物理ノードは Virtual Machines を配置する 2 番目のクラスターにあります。そのクラスターで VM が起動すると、その VM は Storage サービスとの接続を確立し、VHD から起動します。

Virtual Machines を作成する際、VHD は、VM の配置先と同じリージョンにある Storage アカウントに配置されます。それにより、Virtual Machines と Storage アカウント間の通信時に、一貫したパフォーマンスが確保されます。

こういった流れを念頭に、Virtual Machines をあるリージョンから別のリージョンへ移行する手順を見ていきましょう。

  1. Virtual Machines を停止する
  2. VHD BLOB を移行元リージョンの Storage アカウントから移行先リージョンの Storage アカウントにコピーする
  3. BLOB から Azure Disk を作成する
  4. Virtual Machines を Disk から起動する

Virtual Machines を停止する

サービス管理ポータルにアクセスし、移行する Virtual Machines を選択して、コントロール メニューから [SHUT DOWN] をクリックします。

この操作は、次のような Azure PowerShell コマンドレットから行うこともできます。

$servicename = "KenazTestService"
$vmname = "TestVM1"
Get-AzureVM -ServiceName $servicename -Name $vmname | Stop-AzureVM

コピーを実行する際にファイル システムを一貫した状態に保持するために、VM を停止する必要があります。現時点で、Azure はライブ マイグレーションをサポートしていません。今回の移行操作では、specialized VM をあるリージョンから別のリージョンに移行します。generalized イメージから VM を作成したい場合は、VM を停止する前に VM に対して Sysprep を実行してください。

VHD BLOB をコピーする

Azure Storage サービスには Storage アカウントの BLOB を別の Storage アカウントに移行する機能が用意されています。実行手順は次のとおりです。

  1. 移行元 Storage アカウントの情報を指定する
  2. 移行先 Storage アカウントの情報を指定する
  3. 移行先 Storage アカウントに移行先コンテナーが存在することを確認する
  4. BLOB のコピーを実行する

注意: 異なるリージョンの Storage アカウントへ BLOB をコピーする場合は、BLOB のサイズに応じて 1 時間またはそれ以上の時間がかかります。

次のように、Azure PowerShell を使用するのが最も簡単です。

Select-AzureSubscription "kenazsubscription" 

# コピーする VHD BLOB #
$blobName = "KenazTestService-TestVM1-2014-8-26-15-1-55-658-0.vhd"

# 移行元 Storage アカウントの情報 #
$sourceStorageAccountName = "kenazsa"
$sourceKey = "MySourceStorageAccountKey"
$sourceContext = New-AzureStorageContext –StorageAccountName $sourceStorageAccountName -StorageAccountKey $sourceKey  
$sourceContainer = "vhds"

# 移行先 Storage アカウントの情報 #
$destinationStorageAccountName = "kenazdestinationsa"
$destinationKey = "MyDestinationStorageAccountKey"
$destinationContext = New-AzureStorageContext –StorageAccountName $destinationStorageAccountName -StorageAccountKey $destinationKey  

# 移行先コンテナーを作成 #
$destinationContainerName = "destinationvhds"
New-AzureStorageContainer -Name $destinationContainerName -Context $destinationContext

# BLOB をコピー #
$blobCopy = Start-AzureStorageBlobCopy -DestContainer $destinationContainerName `
                        -DestContext $destinationContext `
                        -SrcBlob $blobName `
                        -Context $sourceContext `
                        -SrcContainer $sourceContainer

移行元 Storage アカウントから移行先 Storage アカウントへの BLOB のコピーを開始します。BLOB が完全にコピーされるまでしばらく時間がかかります。進捗状況を確認するには、以下のコマンドを実行します。

while(($blobCopy | Get-AzureStorageBlobCopyState).Status -eq "Pending")
{
    Start-Sleep -s 30
    $blobCopy | Get-AzureStorageBlobCopyState
}

BLOB のコピーが完了すると、コピー処理のステータスが “Success” に変わります。その他の VHD のコピー処理の例については、「Azure Virtual Machines: Storage アカウント間での VHD のコピー (英語)」を参照してください。

AzCopy を使用して BLOB をコピーする

BLOB をコピーする別の方法として、AzCopy ユーティリティ (ダウンロードはこちら) を使用できます。Storage アカウント間の BLOB のコピー処理は次のとおりです。

AzCopy https://sourceaccount.blob.core.windows.net/mycontainer1 https://destaccount.blob.core.windows.net/mycontainer2 /sourcekey:key1 /destkey:key2 abc.txt

さまざまなシナリオでの AzCopy の使い方の詳細については、「AzCopy コマンドライン ユーティリティの使用を開始する (英語)」を参照してください。

Azure Disk を作成する

この時点で、移行先 Storage アカウントにコピーした BLOB はまだ BLOB のままです。起動できるようにするには、この BLOB から Azure Disk を作成しなければなりません。Virtual Machines の [DISKS] セクションに移動して [CREATE] をクリックします。

注意: これは specialized VM 用の手順です。VHD をイメージとして使用したい場合は、VM を再起動して Sysprep を実行し、BLOB をコピーして (Disk ではなく) イメージとして追加します。

VHD URL エクスプローラーを使用して、BLOB をコピーした先の移行先コンテナーから BLOB を選択します。[The VHD contains an operating system.] チェックボックスをオンにして、作成する Disk オブジェクトはデータ ディスクではなく OS ディスクとして使用することを Azure に知らせます。

注意: 以下のように「A lease conflict occurred with the blob …」というエラーが表示される場合は、1 つ前の手順に戻って、BLOB のコピーが完了していることを確認してください。

また、次の PowerShell コマンドレットでも Disk を作成できます。

Add-AzureDisk -DiskName "myMigratedTestVM" `
            -OS Linux `
            -MediaLocation "https://kenazdestinationsa.blob.core.windows.net/destinationvhds/KenazTestService-TestVM1-2014-8-26-16-16-48-522-0.vhd" `
            -Verbose

完了すると、作成した Disk が Virtual Machines の [DISKS] セクションに表示されます。

Virtual Machines を作成する

作成した Disk オブジェクトを使用して Virtual Machines を作成できます。サービス管理ポータルで、ギャラリーから Virtual Machines を作成します。[MY DISKS] から作成した Disk を選択します。

注意: 移行する VM の Storage プールが構成済みの場合 (またはドライブ レターの順序をそのままにしたい場合) は、移行元の VM の VHD マッピングの LUN 番号をメモしておき、データ ディスクが移行先の VM でも同じ LUN にアタッチされていることを確認します。

これで、移行先の Storage アカウントで Virtual Machines を実行できます。

Comments (0)

Skip to main content