共用方式為


從儲存體帳戶中的特製化 VHD 建立 VM

藉由使用 Powershell 連結特製化非受控磁碟作為 OS 磁碟來建立新的 VM。 特製化磁碟是現有 VM 中的 VHD 複本,可從原始的 VM 維護使用者帳戶、應用程式和其他狀態資料。

您有兩個選擇:

選項 1:上傳特製化 VHD

您可以上傳從特製化的 VM,以在內部部署虛擬化工具,像是從另一個雲端匯出 HYPER-V 或在 VM 建立 VHD。

準備 VM

您可以上傳使用內部部署 VM 建立的特製化 VHD,或上傳從另一個雲端匯出的 VHD。 特製化的 VHD 會從原始的 VM 維護使用者帳戶、應用程式和其他狀態資料。 如果您想要使用 VHD 現狀建立新的 VM,請確定完成下列步驟。

  • 準備要上傳至 Azure 的 Windows VHD. 不要使用 Sysprep 一般化 VM。
  • 移除任何 VM 上 (也就是 VMware 工具) 已安裝的來賓虛擬化工具和代理程式。
  • 確認已透過 DHCP 設定 VM 提取其 IP 位址和 DNS 設定。 這可確保伺服器在啟動時取得 VNet 內的 IP 位址。

取得儲存體帳戶

您需要一個 Azure 中的儲存體帳戶來裝載上傳的 VM 映像。 您可以使用現有的儲存體帳戶或建立新帳戶。

若要顯示可用的儲存體帳戶,請輸入︰

Get-AzStorageAccount

如果您想要使用現有的儲存體帳戶,請移至「上傳 VM 映像」一節。

如果您需要建立儲存體帳戶,請依照下列步驟操作:

  1. 您需要在當中建立儲存體帳戶的資源群組名稱。 若要找出您訂用帳戶中的所有資源群組,請輸入︰

    Get-AzResourceGroup
    

    若要在美國西部區域建立名為 myResourceGroup 的資源群組,請輸入︰

    New-AzResourceGroup -Name myResourceGroup -Location "West US"
    
  2. 使用 New-AzStorageAccount \(英文\) Cmdlet,在此資源群組中建立名為 mystorageaccount 的儲存體帳戶:

    New-AzStorageAccount -ResourceGroupName myResourceGroup -Name mystorageaccount -Location "West US" `
        -SkuName "Standard_LRS" -Kind "Storage"
    

將 VHD 上傳至儲存體帳戶

使用 Add-AzVhd \(英文\) Cmdlet,將映像上傳到儲存體帳戶中的容器。 這個範例會將檔案 myVHD.vhd"C:\Users\Public\Documents\Virtual hard disks\" 上傳至 myResourceGroup 資源群組中名為 mystorageaccount 的儲存體帳戶。 檔案會放入名為 mycontainer 的容器,新的檔案名稱會是 myUploadedVHD.vhd

$rgName = "myResourceGroup"
$urlOfUploadedImageVhd = "https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd"
Add-AzVhd -ResourceGroupName $rgName -Destination $urlOfUploadedImageVhd `
    -LocalFilePath "C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd"

如果成功,您會得到看起來如以下的回應:

MD5 hash is being calculated for the file C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd.
MD5 hash calculation is completed.
Elapsed time for the operation: 00:03:35
Creating new page blob of size 53687091712...
Elapsed time for upload: 01:12:49

LocalFilePath           DestinationUri
-------------           --------------
C:\Users\Public\Doc...  https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd

視您的網路連線和 VHD 檔案大小而定,此命令可能需要一些時間才能完成。

選項 2:從現有 Azure VM 複製 VHD

您可以將 VHD 複製到另一個儲存體帳戶,以在建立新的重複 VM 時使用。

開始之前

請確定您︰

  • 已取得來源和目的地儲存體帳戶的相關資訊。 針對來源 VM,您需要有儲存體帳戶和容器名稱。 容器名稱通常會是 vhd。 您也需要有一個目的地儲存體帳戶。 如果您還沒有帳戶,可以使用入口網站 (所有服務> 儲存體帳戶新增) 或使用new-azstorageaccount Cmdlet 來建立一個帳戶 > 。
  • 已下載並安裝 AzCopy 工具

解除配置 VM

解除配置 VM,這會釋出要複製的 VHD。

  • 入口網站:按一下 [虛擬機器> ]myVM> 停止
  • Powershell:使用 Stop-AzVM \(英文\) 來停止 (解除配置) myResourceGroup 資源群組中名為 myVM 的 VM。
Stop-AzVM -ResourceGroupName myResourceGroup -Name myVM

Azure 入口網站中 VM 的 [狀態] 會從 [已停止] 變更為 [已停止 (已解除配置)]。

取得儲存體帳戶 URL

您需要來源和目的地儲存體帳戶的 URL。 URL 看起來像是:https://<storageaccount>.blob.core.windows.net/<containerName>/。 如果您已經知道儲存體帳戶和容器名稱,可以直接取代方括號中的資訊來建立您的 URL。

您可以使用 Azure 入口網站或 Azure PowerShell 來取得 URL:

  • 入口網站:按一下 [ > 適用于所有服務>儲存體帳戶> ]儲存體帳戶>blob ,而且您的來源 VHD 檔案可能在vhd容器中。 按一下容器的 [屬性],複製標示為[URL] 的文字。 您會需要來源和目的地容器的 URL。
  • Powershell:使用 Get-AzVM \(英文\) 來取得 myResourceGroup 資源群組中名為 myVM 的 VM 資訊。 在結果中,查看 [儲存體設定檔] 區段的 [VHD URI]。 URI 的第一個部分是容器的 URL,最後一個部分是 VM 的作業系統 VHD 名稱。
Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"

取得儲存體存取金鑰

找出來源和目的地儲存體帳戶的存取金鑰。 如需存取金鑰的詳細資訊,請參閱 關於 Azure 儲存體帳戶

  • 入口網站:按一下 [所有服務]>[儲存體帳戶]>[儲存體帳戶]>[存取金鑰]。 複製標示為 [金鑰1] 的金鑰。
  • Powershell:使用 Get-AzStorageAccountKey \(英文\) 來取得 myResourceGroup 資源群組中 mystorageaccount 儲存體帳戶的儲存體金鑰。 複製標示 [金鑰1] 的金鑰。
Get-AzStorageAccountKey -Name mystorageaccount -ResourceGroupName myResourceGroup

複製 VHD

您可以使用 AzCopy 在儲存體帳戶之間複製檔案。 針對目的地容器,如果指定的容器不存在,它會為您建立。

若要使用 AzCopy,在您的本機電腦上開啟命令提示字元,瀏覽至安裝 AzCopy 的資料夾。 它會類似 C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy。

若要複製容器內的所有檔案,使用 /S 選項。 這可以用來複製作業系統 VHD 及其所有的資料磁碟 (如果它們是在相同容器中)。 這個範例示範如何將 mysourcestorageaccount 儲存體帳戶中mysourcecontainer 容器中的所有檔案,複製到 mydestinationstorageaccount 儲存體帳戶中的 mydestinationcontainer。 儲存體帳戶和容器的名稱請取代為您自己的。 使用您自己的金鑰取代 <sourceStorageAccountKey1><destinationStorageAccountKey1>

AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
    /Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
    /SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> /S

如果要複製包含多個檔案之容器中的特定 VHD,也可以使用 /Pattern 選項指定檔案名稱。 在此範例中,只會複製名為 myFileName.vhd 的檔案。

AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
  /Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
  /SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> `
  /Pattern:myFileName.vhd

完成時,您將收到如下的訊息:

Finished 2 of total 2 file(s).
[2016/10/07 17:37:41] Transfer summary:
-----------------
Total files transferred: 2
Transfer successfully:   2
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:13:07

疑難排解

  • 當您使用 AZCopy 時,如果您看到「伺服器無法驗證要求」錯誤,請確定授權標頭值的格式正確 (包含簽章)。 如果您正在使用金鑰 2 或次要儲存體金鑰,請嘗試使用主要或第 1 個儲存體金鑰。

建立新 VM

您必須建立新的 VM 所要使用的網路和其他 VM 資源。

建立子網路和 VNet

建立 虛擬網路的 vNet 和 subNet。

  1. 建立子網路。 此範例會在資源群組 myResourceGroup 中建立名為 mySubnet 的子網路,並將子網路位址首碼設定為 10.0.0.0/24

    $rgName = "myResourceGroup"
    $subnetName = "mySubNet"
    $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. 建立 vNet。 此範例會將虛擬網路名稱設定為 myVnetName、位置設定為 美國西部,及虛擬網路的位址首碼設定為 10.0.0.0/16

    $location = "West US"
    $vnetName = "myVnetName"
    $vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location `
        -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
    

    建立網路安全性群組和 RDP 規則

    若要能夠使用 RDP 登入 VM,您必須有可在連接埠 3389 上允許 RDP 存取的安全性規則。 因為新 VM 的 VHD 是從現有的特製化 VM 所建立,在建立 VM 之後,您可以從具有使用 RDP 之登入權限的來源虛擬機器使用現有帳戶。 這需要在建立相關聯網路介面之前完成。
    此範例會將 NSG 名稱設定為 myNsg 以及將 RDP 規則名稱設定為 myRdpRule

$nsgName = "myNsg"

$rdpRule = New-AzNetworkSecurityRuleConfig -Name myRdpRule -Description "Allow RDP" `
    -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 `
    -SourceAddressPrefix Internet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange 3389
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $rgName -Location $location `
    -Name $nsgName -SecurityRules $rdpRule
	

如需端點和 NSG 規則的詳細資訊,請參閱使用 PowerShell 對 Azure 中的 VM 開啟連接埠

建立公用 IP 位址和 NIC

若要能夠與虛擬網路中的虛擬機器進行通訊,您需要 公用 IP 位址 和網路介面。

  1. 建立公用 IP。 在此範例中,公用 IP 位址名稱會設定為 myIP

    $ipName = "myIP"
    $pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location `
        -AllocationMethod Dynamic
    
  2. 建立 NIC。 在此範例中,NIC 名稱會設定為 myNicName。 這個步驟也會讓稍早建立的網路安全性群組與此 NIC 相關聯。

    $nicName = "myNicName"
    $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $rgName `
     -Location $location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
    

設定 VM 名稱和大小

此範例將 VM 名稱設定為 "myVM",將 VM 大小設定為 "Standard_A2"。

$vmName = "myVM"
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize "Standard_A2"

新增 NIC

$vm = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id

設定 OS 磁碟

  1. 為您所上傳或複製的 VHD 設定 URI。 在此範例中,VHD 檔案 myOsDisk.vhd 保存在容器 myContainer 中的儲存體帳戶 myStorageAccount

    $osDiskUri = "https://myStorageAccount.blob.core.windows.net/myContainer/myOsDisk.vhd"
    
  2. 新增 OS 磁碟。 在此範例中,建立 OS 磁碟時,"osDisk" 一詞會附加至 VM 名稱而形成 OS 磁碟名稱。 這個範例也指定這個以 Windows 為基礎的 VHD,應該附加至 VM 作為 OS 磁碟。

    $osDiskName = $vmName + "osDisk"
    $vm = Set-AzVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri -CreateOption attach -Windows
    

選擇性:如果您有資料磁碟需要附加至 VM,請使用資料 VHD 的 URL 和適當的邏輯單元編號 (Lun) 新增資料磁碟。

$dataDiskName = $vmName + "dataDisk"
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -VhdUri $dataDiskUri -Lun 1 -CreateOption attach

使用儲存體帳戶時,資料和作業系統磁碟的 URL 近似於︰https://StorageAccountName.blob.core.windows.net/BlobContainerName/DiskName.vhd。 您可以藉由下列方法在入口網站上找到它:瀏覽至目標儲存體容器,按一下複製的作業系統或資料 VHD,然後複製 URL 的內容。

完成 VM

使用我們剛才建立的組態建立 VM。

#Create the new VM
New-AzVM -ResourceGroupName $rgName -Location $location -VM $vm

如果此命令成功,您會看到如下的輸出︰

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK OK   

確認已建立 VM

Azure 入口網站的 [所有服務]>[虛擬機器] 下,或是使用下列 PowerShell 命令,應可看到新建立的 VM:

$vmList = Get-AzVM -ResourceGroupName $rgName
$vmList.Name

後續步驟

登入至新的虛擬機器。 如需詳細資訊,請參閱 如何連接和登入執行 Windows 的 Azure 虛擬機器