Azure 中一個(gè)常見的任務(wù)就是將虛擬機(jī)從一個(gè)存儲(chǔ)賬號(hào)轉(zhuǎn)移到另一個(gè)。在我們深入了解這些步驟之前,簡要的回顧一下 Azure 虛擬機(jī)是如何被創(chuàng)建的。當(dāng)您在創(chuàng)建一臺(tái) Azure 虛擬機(jī)時(shí),有兩個(gè)服務(wù)會(huì)協(xié)同工作來創(chuàng)建該虛擬機(jī):計(jì)算和存儲(chǔ)。在存儲(chǔ)方面,Azure 存儲(chǔ)服務(wù)會(huì)在您的一個(gè)賬戶中創(chuàng)建一個(gè) VHD。該 VHD 的物理節(jié)點(diǎn)是存儲(chǔ)在您指定用于放置虛擬機(jī)的區(qū)域。在計(jì)算方面,我們?cè)诘诙€(gè)群集中找到一個(gè)物理節(jié)點(diǎn)用于放置您的虛擬機(jī)。當(dāng) VM 在該群集中啟動(dòng)時(shí),它會(huì)和存儲(chǔ)服務(wù)創(chuàng)建連接并且從該 VHD 啟動(dòng)。當(dāng)創(chuàng)建一個(gè)虛擬機(jī)時(shí),我們要求您創(chuàng)建該 VM 時(shí)的 VHD 所位于的存儲(chǔ)賬戶在同一區(qū)域,這是為了確保當(dāng)虛擬機(jī)和存儲(chǔ)賬戶通訊時(shí)能夠保持性能一致性。

有了這個(gè)背景之后,讓我們通過以下步驟將虛擬機(jī)從一個(gè)區(qū)域轉(zhuǎn)移到另一個(gè):
停止虛擬機(jī)
將 VHD blob 從源區(qū)域的存儲(chǔ)賬戶復(fù)制到目標(biāo)區(qū)域的存儲(chǔ)賬戶
通過該 blob 創(chuàng)建虛擬機(jī)磁盤
從該磁盤啟動(dòng)虛擬機(jī)
停止虛擬機(jī)
在管理門戶界面,選擇您需要轉(zhuǎn)移的虛擬機(jī),在控制菜單中選擇 關(guān)閉。

或者使用 Azure PowerShell cmdlet 來完成相同的操作:
復(fù)制
$servicename = "KenazTestService"
$vmname = "TestVM1"
Get-AzureVM -ServiceName $servicename -Name $vmname | Stop-AzureVM
當(dāng)您進(jìn)行復(fù)制操作時(shí),一個(gè)必要的步驟是關(guān)閉虛擬機(jī)以保證文件系統(tǒng)的一致性。Azure 目前還不支持虛擬機(jī)的實(shí)時(shí)轉(zhuǎn)移。該操作意味著您在將一個(gè)專用的 VM 從一個(gè)區(qū)域轉(zhuǎn)移到另一個(gè) 。如果您想要通過一個(gè)通用的映像創(chuàng)建 VM ,在虛擬機(jī)停止之前使用系統(tǒng)準(zhǔn)備工具(sys-prep)對(duì)映像進(jìn)行一般化處理。
復(fù)制 VHD blob
Azure 存儲(chǔ)服務(wù)提供了將 Blob 從一個(gè)存儲(chǔ)賬戶移動(dòng)到另一個(gè)的功能,我們需要執(zhí)行以下步驟來完成該操作:
確定源存儲(chǔ)賬戶信息;
確定目標(biāo)存儲(chǔ)賬戶信息;
確保目標(biāo)存儲(chǔ)賬戶中存在目標(biāo)容器;
執(zhí)行 Blob 復(fù)制操作。
注意:在位于不同區(qū)域的存儲(chǔ)賬戶之間復(fù)制 blob 時(shí),根據(jù)該 blob 的大小會(huì)出現(xiàn)花費(fèi)一個(gè)小時(shí)或更長的時(shí)間的情況。執(zhí)行該操作最便捷的方式是通過 Azure PowerShell:
復(fù)制
Select-AzureSubscription "kenazsubscription"
# VHD blob to copy #
$blobName = "KenazTestService-TestVM1-2014-8-26-15-1-55-658-0.vhd"
# Source Storage Account Information #
$sourceStorageAccountName = "kenazsa"
$sourceKey = "MySourceStorageAccountKey"
$sourceContext = New-AzureStorageContext –StorageAccountName $sourceStorageAccountName -StorageAccountKey $sourceKey
$sourceContainer = "vhds"
# Destination Storage Account Information #
$destinationStorageAccountName = "kenazdestinationsa"
$destinationKey = "MyDestinationStorageAccountKey"
$destinationContext = New-AzureStorageContext –StorageAccountName $destinationStorageAccountName -StorageAccountKey $destinationKey
# Create the destination container #
$destinationContainerName = "destinationvhds"
New-AzureStorageContainer -Name $destinationContainerName -Context $destinationContext
# Copy the blob #
$blobCopy = Start-AzureStorageBlobCopy -DestContainer $destinationContainerName `
-DestContext $destinationContext `
-SrcBlob $blobName `
-Context $sourceContext `
-SrcContainer $sourceContainer
執(zhí)行以上命令將會(huì)開始從您的源賬戶向目標(biāo)賬戶進(jìn)行 blob 的復(fù)制操作,此時(shí),您可能需要稍作等待以確保 blob 能夠完全的復(fù)制。如您需要查看該操作的狀態(tài),您可以使用以下命令。
復(fù)制
while(($blobCopy | Get-AzureStorageBlobCopyState).Status -eq "Pending")
{
Start-Sleep -s 30
$blobCopy | Get-AzureStorageBlobCopyState
}
}
當(dāng)完成 blob 復(fù)制操作后,該狀態(tài)將變?yōu)椤俺晒Α?。更詳?xì)的 VHD 拷貝操作示例可以參考 “Azure 虛擬機(jī): 跨存儲(chǔ)賬戶拷貝 VHDS” 。
使用 AzCopy 復(fù)制 blob
另一種方式可以使用 AzCopy 工具(下載地址),下面同樣是存儲(chǔ)賬戶間 blob 復(fù)制的命令:
復(fù)制
AzCopy https://sourceaccount.blob.core.chinacloudapi.cn/mycontainer1 https://destaccount.blob.core.chinacloudapi.cn/mycontainer2 /sourcekey:key1 /destkey:key2 abc.txt
關(guān)于如何在不同場(chǎng)景使用 AzCopy 工具更詳細(xì)的信息,請(qǐng)查看“使用 AzCopy 命令行工具入門”。
創(chuàng)建虛擬機(jī)磁盤
此時(shí),您復(fù)制到目標(biāo)存儲(chǔ)賬戶中的 blob 仍然只是一個(gè) blob, 為了可以從該 blob 啟動(dòng),您需要通過該 blob 創(chuàng)建一個(gè)虛擬機(jī)磁盤。導(dǎo)航至虛擬機(jī) 磁盤 部分并且選擇 創(chuàng)建。
注意:以上指令是特定的用于專用的 VMs,如您想要使該 VHD 作為映像來加載,您需要重啟 VM, 使用 sysperp 工具一般化處理,復(fù)制 blob,然后作為映像添加(而非磁盤)。

在 VHD URL 選項(xiàng)處選擇目標(biāo)容器中復(fù)制的 blob,勾選選項(xiàng)“ VHD 包含操作系統(tǒng)”,這向 Azure 表明您所創(chuàng)建的磁盤對(duì)象是用作 OS 磁盤使用的,而非作為數(shù)據(jù)磁盤使用。

注意:如果遇到該錯(cuò)誤提示“ Blob 發(fā)生租約沖突….”,返回上一步確認(rèn)該 blob 復(fù)制操作已經(jīng)完成。

或者,您可以通過 執(zhí)行 PowerShell 命令來進(jìn)行相同的操作。
復(fù)制
Add-AzureDisk -DiskName "myMigratedTestVM" `
-OS Linux `
-MediaLocation "https://kenazdestinationsa.blob.core.chinacloudapi.cn/destinationvhds/KenazTestService-TestVM1-2014-8-26-16-16-48-522-0.vhd" `
-Verbose
以上步驟完成后,該磁盤將出現(xiàn)在虛擬機(jī) 磁盤 部分。
創(chuàng)建虛擬機(jī)
此時(shí),您可以使用之前創(chuàng)建好的磁盤來創(chuàng)建虛擬機(jī),在經(jīng)典管理門戶中,選擇從庫中創(chuàng)建虛擬機(jī)并且在我的磁盤下選擇您創(chuàng)建好的磁盤。
注意:如果您轉(zhuǎn)移的虛擬機(jī)有一個(gè)已經(jīng)配置好的存儲(chǔ)池(或者需要磁盤驅(qū)動(dòng)器的字母排序保持不變),記錄下 VHD 映射到源 VM 的 LUN 編號(hào),并且確保數(shù)據(jù)磁盤在目標(biāo)虛擬機(jī)上被附加到了同樣的 LUN 編號(hào)上。

現(xiàn)在虛擬機(jī)已經(jīng)在目標(biāo)存儲(chǔ)賬戶中運(yùn)行了。
立即訪問http://market.azure.cn