Creare una VM da un disco rigido virtuale specializzato in un account di archiviazioneCreate a VM from a specialized VHD in a storage account

Creare una nuova macchina virtuale collegando un disco non gestito specializzato come disco del sistema operativo con Powershell.Create a new VM by attaching a specialized unmanaged disk as the OS disk using Powershell. Un disco specializzato è una copia del disco rigido virtuale proveniente da una macchina virtuale esistente che gestisce gli account utente, le applicazioni e altri dati di stato dalla macchina virtuale originale.A specialized disk is a copy of VHD from an existing VM that maintains the user accounts, applications and other state data from your original VM.

Sono disponibili due opzioni:You have two options:

Prima di iniziareBefore you begin

Se si usa PowerShell, verificare di avere la versione più recente del modulo di PowerShell AzureRM.Compute.If you use PowerShell, make sure that you have the latest version of the AzureRM.Compute PowerShell module. Eseguire il comando seguente per installarlo.Run the following command to install it.

Install-Module AzureRM.Compute 

Per altre informazioni, vedere Azure PowerShell Versioning (Controllo delle versioni di Azure PowerShell).For more information, see Azure PowerShell Versioning.

Opzione 1: Caricare un disco rigido virtuale specializzatoOption 1: Upload a specialized VHD

È possibile caricare il disco rigido virtuale da una VM specializzata creata con uno strumento di virtualizzazione locale, ad esempio Hyper-V, o da una VM esportata da un altro cloud.You can upload the VHD from a specialized VM created with an on-premises virtualization tool, like Hyper-V, or a VM exported from another cloud.

Preparare la macchina virtualePrepare the VM

È possibile caricare un disco rigido virtuale specializzato creato usando una VM locale o un disco rigido virtuale esportato da un altro cloud.You can upload a specialized VHD that was created using an on-premises VM or a VHD exported from another cloud. Un disco rigido virtuale specializzato gestisce gli account utente, le applicazioni e altri dati di stato dalla macchina virtuale originale.A specialized VHD maintains the user accounts, applications and other state data from your original VM. Se si intende usare il disco rigido virtuale così come è per creare una nuova macchina virtuale, assicurare il completamento delle operazioni seguenti.If you intend to use the VHD as-is to create a new VM, ensure the following steps are completed.

  • Preparare un disco rigido virtuale (VHD) di Windows per il caricamento in Azure.Prepare a Windows VHD to upload to Azure. Non generalizzare la macchina Virtuale con Sysprep.Do not generalize the VM using Sysprep.
  • Rimuovere tutti gli strumenti di virtualizzazione guest e gli agenti installati nella macchina virtuale, ad esempio gli strumenti VMware.Remove any guest virtualization tools and agents that are installed on the VM (i.e. VMware tools).
  • Assicurarsi che la macchina virtuale sia configurata per eseguire il pull dell'indirizzo IP e delle impostazioni DNS tramite DHCP.Ensure the VM is configured to pull its IP address and DNS settings via DHCP. In questo modo il server ottiene un indirizzo IP all'interno della rete virtuale all'avvio.This ensures that the server obtains an IP address within the VNet when it starts up.

Ottenere l'account di archiviazioneGet the storage account

Per archiviare l'immagine della VM caricata, è necessario un account di archiviazione di Azure.You need a storage account in Azure to store the uploaded VM image. È possibile usare un account di archiviazione esistente o crearne uno nuovo.You can either use an existing storage account or create a new one.

Per mostrare gli account di archiviazione disponibili, digitare:To show the available storage accounts, type:

Get-AzureRmStorageAccount

Se si vuole usare un account di archiviazione esistente, passare alla sezione Caricare l'immagine della VM .If you want to use an existing storage account, proceed to the Upload the VM image section.

Per creare un account di archiviazione, seguire questa procedura:If you need to create a storage account, follow these steps:

  1. È necessario il nome del gruppo di risorse in cui deve essere creato l'account di archiviazione.You need the name of the resource group where the storage account should be created. Per trovare tutti i gruppi di risorse inclusi nella sottoscrizione digitare:To find out all the resource groups that are in your subscription, type:

    Get-AzureRmResourceGroup
    

    Per creare un gruppo di risorse denominato MyResourceGroup nell'area Stati Uniti occidentali, digitare:To create a resource group named myResourceGroup in the West US region, type:

    New-AzureRmResourceGroup -Name myResourceGroup -Location "West US"
    
  2. Creare un account di archiviazione denominato mystorageaccount in questo gruppo di risorse con il cmdlet New-AzureRmStorageAccount.Create a storage account named mystorageaccount in this resource group by using the New-AzureRmStorageAccount cmdlet:

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

Caricare il disco rigido virtuale nell'account di archiviazioneUpload the VHD to your storage account

Usare il cmdlet Add-AzureRmVhd per caricare l'immagine in un contenitore nell'account di archiviazione.Use the Add-AzureRmVhd cmdlet to upload the image to a container in your storage account. In questo esempio, il file myVHD.vhd viene caricato da "C:\Users\Public\Documents\Virtual hard disks\" a un account di archiviazione denominato mystorageaccount nel gruppo di risorse myResourceGroup.This example uploads the file myVHD.vhd from "C:\Users\Public\Documents\Virtual hard disks\" to a storage account named mystorageaccount in the myResourceGroup resource group. Il file viene inserito nel contenitore denominato mycontainer e il nuovo nome del file sarà myUploadedVHD.vhd.The file will be placed into the container named mycontainer and the new file name will be myUploadedVHD.vhd.

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

Se l'operazione riesce, si ottiene una risposta simile alla seguente:If successful, you get a response that looks similar to this:

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

L'esecuzione del comando potrebbe richiedere del tempo, a seconda della connessione di rete e delle dimensioni del file VHD.Depending on your network connection and the size of your VHD file, this command may take a while to complete.

Opzione 2: Copiare il disco rigido virtuale da una VM di Azure esistenteOption 2: Copy the VHD from an existing Azure VM

È possibile copiare un disco rigido virtuale in un altro account di archiviazione da usare quando si crea una nuova VM duplicata.You can copy a VHD to another storage account to use when creating a new, duplicate VM.

Prima di iniziareBefore you begin

Verificare quanto segue:Make sure that you:

  • Disporre delle informazioni sugli account di archiviazione di origine e destinazione.Have information about the source and destination storage accounts. Per la VM di origine è necessario disporre dei nomi degli account di archiviazione e dei contenitori.For the source VM, you need to have the storage account and container names. In genere il nome del contenitore sarà vhds.Usually, the container name will be vhds. È inoltre necessario disporre di un account di archiviazione di destinazione.You also need to have a destination storage account. Se non si dispone già di un account di archiviazione, è possibile crearne uno usando il portale (Servizi > Account di archiviazione > Aggiungi) oppure mediante il cmdlet New-AzureRmStorageAccount.If you don't already have one, you can create one using either the portal (More Services > Storage accounts > Add) or using the New-AzureRmStorageAccount cmdlet.
  • Avere scaricato e installato lo strumento AzCopy.Have downloaded and installed the AzCopy tool.

Deallocare la VMDeallocate the VM

Deallocare la VM, operazione che consente di liberare il disco rigido virtuale da copiare.Deallocate the VM, which frees up the VHD to be copied.

  • Portale: fare clic su Macchine virtuali > myVM > Stop (Termina)Portal: Click Virtual machines > myVM > Stop
  • PowerShell: usare Stop-AzureRmVM per arrestare (deallocare) la VM denominata myVM nel gruppo di risorse myResourceGroup.Powershell: Use Stop-AzureRmVM to stop (deallocate) the VM named myVM in resource group myResourceGroup.
Stop-AzureRmVM -ResourceGroupName myResourceGroup -Name myVM

Nel portale di Azure lo stato della VM passa da Arrestato ad Arrestato (deallocato).The Status for the VM in the Azure portal changes from Stopped to Stopped (deallocated).

Ottenere gli URL dell'account di archiviazioneGet the storage account URLs

Sono necessari gli URL degli account di archiviazione di origine e destinazione.You need the URLs of the source and destination storage accounts. Gli URL hanno l'aspetto seguente: https://<storageaccount>.blob.core.windows.net/<containerName>/.The URLs look like: https://<storageaccount>.blob.core.windows.net/<containerName>/. Se si conosce già il nome degli account di archiviazione e dei contenitori, per creare l'URL è sufficiente sostituire le informazioni tra parentesi.If you already know the storage account and container name, you can just replace the information between the brackets to create your URL.

Per ottenere l'URL è possibile usare il portale di Azure o Azure PowerShell:You can use the Azure portal or Azure Powershell to get the URL:

  • Portale: fare clic su > per Altri servizi > Account di archiviazione > account di archiviazione > BLOB. Il file VHD di origine si trova probabilmente nel contenitore vhds.Portal: Click the > for More services > Storage accounts > storage account > Blobs and your source VHD file is probably in the vhds container. Fare clic su Proprietà per il contenitore e copiare il testo con l'etichetta URL.Click Properties for the container, and copy the text labeled URL. Sono necessari gli URL di entrambi i contenitori di origine e di destinazione.You'll need the URLs of both the source and destination containers.
  • PowerShell: usare Get-AzureRmVM per ottenere le informazioni dalla VM denominata myVM nel gruppo di risorse myResourceGroup.Powershell: Use Get-AzureRmVM to get the information for VM named myVM in the resource group myResourceGroup. Nei risultati esaminare la sezione Storage profile (Profilo archiviazione) per l'URI VHD.In the results, look in the Storage profile section for the Vhd Uri. La prima parte dell'URI è l'URL del contenitore, mentre l'ultima parte è il nome del disco rigido virtuale del sistema operativo della VM.The first part of the Uri is the URL to the container and the last part is the OS VHD name for the VM.
Get-AzureRmVM -ResourceGroupName "myResourceGroup" -Name "myVM"

Ottenere le chiavi di accesso alle risorse di archiviazioneGet the storage access keys

Trovare le chiavi di accesso per gli account di archiviazione di origine e destinazione.Find the access keys for the source and destination storage accounts. Per altre informazioni sulle chiavi di accesso, vedere Informazioni sugli account di archiviazione di Azure.For more information about access keys, see About Azure storage accounts.

  • Portale: fare clic su Altri servizi > Account di archiviazione > account di archiviazione > Chiavi di accesso.Portal: Click More services > Storage accounts > storage account > Access keys. Copiare la chiave denominata key1.Copy the key labeled as key1.
  • PowerShell: usare Get-AzureRmStorageAccountKey per ottenere la chiave di archiviazione per l'account di archiviazione mystorageaccount nel gruppo di risorse myResourceGroup.Powershell: Use Get-AzureRmStorageAccountKey to get the storage key for the storage account mystorageaccount in the resource group myResourceGroup. Copiare la chiave denominata key1.Copy the key labeled key1.
Get-AzureRmStorageAccountKey -Name mystorageaccount -ResourceGroupName myResourceGroup

Copiare il file VHDCopy the VHD

È possibile copiare file da un account di archiviazione a un altro usando AzCopy.You can copy files between storage accounts using AzCopy. Se il container di destinazione specificato non esiste, tale contenitore verrà creato automaticamente.For the destination container, if the specified container doesn't exist, it will be created for you.

Per usare AzCopy, aprire un prompt dei comandi sul computer locale e passare alla cartella in cui è installato tale strumento.To use AzCopy, open a command prompt on your local machine and navigate to the folder where AzCopy is installed. Il percorso sarà simile a C:\Programmi (x86)\Microsoft SDKs\Azure\AzCopy.It will be similar to C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy.

Per copiare tutti i file all'interno di un contenitore, è possibile usare l'opzione /S.To copy all of the files within a container, you use the /S switch. Può essere usata per copiare il disco rigido virtuale del sistema operativo e tutti i dischi dati che si trovano nello stesso contenitore.This can be used to copy the OS VHD and all of the data disks if they are in the same container. Questo esempio mostra come copiare tutti i file che si trovano nel contenitore mysourcecontainer dell'account di archiviazione mysourcestorageaccount nel contenitore mydestinationcontainer dell'account di archiviazione mydestinationstorageaccount.This example shows how to copy all of the files in the container mysourcecontainer in storage account mysourcestorageaccount to the container mydestinationcontainer in the mydestinationstorageaccount storage account. Sostituire i nomi degli account di archiviazione e dei contenitori con nomi a propria scelta.Replace the names of the storage accounts and containers with your own. Sostituire <sourceStorageAccountKey1> e <destinationStorageAccountKey1> con chiavi a propria scelta.Replace <sourceStorageAccountKey1> and <destinationStorageAccountKey1> with your own keys.

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

Se si vuole copiare solo uno specifico file VHD in un contenitore con più file, è anche possibile specificare il nome del file usando l'opzione /Pattern.If you only want to copy a specific VHD in a container with multiple files, you can also specify the file name using the /Pattern switch. In questo esempio verrà copiato solo il file denominato myFileName.vhd.In this example, only the file named myFileName.vhd will be copied.

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

Al termine verrà visualizzato un messaggio simile al seguente:When it is finished, you will get a message that looks something like:

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

risoluzione dei problemiTroubleshooting

  • Quando si usa AZCopy, se viene visualizzato l'errore "Il server non è stato in grado di autenticare la richiesta", assicurarsi che il valore dell'intestazione di autorizzazione sia formato correttamente, inclusa la firma.When you use AZCopy, if you see the error "Server failed to authenticate the request", make sure the value of the Authorization header is formed correctly including the signature. Se si sta usando la chiave 2 o la chiave di archiviazione secondaria, provare a usare la chiave 1 o la chiave di archiviazione primaria.If you are using Key 2 or the secondary storage key, try using the primary or 1st storage key.

Creare la nuova VMCreate the new VM

È necessario creare le risorse di rete e le altre risorse da usare nella nuova VM.You need to create networking and other VM resources to be used by the new VM.

Creare la subNet e la vNetCreate the subNet and vNet

Creare la rete virtuale e la subnet della rete virtuale.Create the vNet and subNet of the virtual network.

  1. Creare la subnet.Create the subNet. In questo esempio viene creata una subnet denominata mySubNet nel gruppo di risorse myResourceGroup e il prefisso dell'indirizzo della subnet viene impostato su 10.0.0.0/24.This example creates a subnet named mySubNet, in the resource group myResourceGroup, and sets the subnet address prefix to 10.0.0.0/24.

    $rgName = "myResourceGroup"
    $subnetName = "mySubNet"
    $singleSubnet = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. Creare la rete virtuale.Create the vNet. In questo esempio il nome della rete virtuale è myVnetName, la posizione specificata è Stati Uniti occidentali e il prefisso dell'indirizzo per la rete virtuale è 10.0.0.0/16.This example sets the virtual network name to be myVnetName, the location to West US, and the address prefix for the virtual network to 10.0.0.0/16.

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

Creare un indirizzo IP pubblico e NICCreate a public IP address and NIC

Per abilitare la comunicazione con la macchina virtuale nella rete virtuale, sono necessari un indirizzo IP pubblico e un'interfaccia di rete.To enable communication with the virtual machine in the virtual network, you need a public IP address and a network interface.

  1. Creare l'IP pubblico.Create the public IP. In questo esempio, il nome dell'indirizzo IP pubblico è myIP.In this example, the public IP address name is set to myIP.

    $ipName = "myIP"
    $pip = New-AzureRmPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location `
        -AllocationMethod Dynamic
    
  2. Creare la scheda NIC.Create the NIC. In questo esempio, il nome specificato della scheda NIC è myNicName.In this example, the NIC name is set to myNicName.

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

Creare il gruppo di sicurezza di rete e una regola RDPCreate the network security group and an RDP rule

Per essere in grado di accedere alla VM tramite RDP, è necessario disporre di una regola di sicurezza che consenta l'accesso RDP sulla porta 3389.To be able to log in to your VM using RDP, you need to have an security rule that allows RDP access on port 3389. Poiché il disco rigido virtuale per la nuova macchina virtuale è stato creato da una VM specializzata esistente, dopo l'avvenuta creazione della macchina virtuale è possibile usare un account esistente dalla VM di origine che aveva l'autorizzazione di accedere tramite RDP.Because the VHD for the new VM was created from an existing specialized VM, after the VM is created you can use an existing account from the source virtual machine that had permission to log on using RDP. In questo esempio il nome NSG impostato è myNsg, mentre il nome della regola RDP è myRdpRule.This example sets the NSG name to myNsg and the RDP rule name to myRdpRule.

$nsgName = "myNsg"

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

Per altre informazioni sugli endpoint e sulle regole NSG, vedere Apertura di porte a una VM tramite PowerShell.For more information about endpoints and NSG rules, see Opening ports to a VM in Azure using PowerShell.

Impostare il nome e le dimensioni della macchina virtualeSet the VM name and size

In questo esempio il nome della macchina virtuale viene impostato su "myVM" e le dimensioni su "Standard_A2".This example sets the VM name to "myVM" and the VM size to "Standard_A2".

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

Aggiungere la scheda di interfaccia di reteAdd the NIC

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

Configurare il disco del sistema operativoConfigure the OS disk

  1. Impostare l'URI per il disco rigido virtuale caricato o copiato.Set the URI for the VHD that you uploaded or copied. In questo esempio, il file del disco rigido virtuale denominato myOsDisk.vhd viene mantenuto in un account di archiviazione denominato myStorageAccount all'interno di un contenitore denominato myContainer.In this example, the VHD file named myOsDisk.vhd is kept in a storage account named myStorageAccount in a container named myContainer.

    $osDiskUri = "https://myStorageAccount.blob.core.windows.net/myContainer/myOsDisk.vhd"
    
  2. Aggiungere il disco del sistema operativo.Add the OS disk. In questo esempio, quando viene creato il disco del sistema operativo, il termine "osDisk" viene collegato al nome della macchina virtuale per creare il nome del disco del sistema operativo.In this example, when the OS disk is created, the term "osDisk" is appened to the VM name to create the OS disk name. Questo esempio specifica anche che il disco rigido virtuale basato su Windows deve essere collegato alla macchina virtuale come disco del sistema operativo.This example also specifies that this Windows-based VHD should be attached to the VM as the OS disk.

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

Facoltativo: se si dispone di dischi dati da associare alla macchina virtuale, aggiungere i dischi dati tramite gli URL dei dischi rigidi virtuali di dati e il numero di unità logica (LUN) appropriato.Optional: If you have data disks that need to be attached to the VM, add the data disks by using the URLs of data VHDs and the appropriate Logical Unit Number (Lun).

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

Quando si usa un account di archiviazione, gli URL dei dischi dati e del sistema operativo sono simili al seguente: https://StorageAccountName.blob.core.windows.net/BlobContainerName/DiskName.vhd.When using a storage account, the data and operating system disk URLs look something like this: https://StorageAccountName.blob.core.windows.net/BlobContainerName/DiskName.vhd. Per trovarlo nel portale, passare al contenitore di archiviazione di destinazione, fare clic sul disco rigido virtuale del sistema operativo o dei dati copiato e quindi copiare il contenuto dell'URL.You can find this on the portal by browsing to the target storage container, clicking the operating system or data VHD that was copied, and then copying the contents of the URL.

Completare la VMComplete the VM

Creare la macchina virtuale usando le configurazioni appena create.Create the VM using the configurations that we just created.

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

Se il comando ha esito positivo, viene visualizzato un output simile al seguente:If this command was successful, you'll see output like this:

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

Verificare che la VM sia stata creataVerify that the VM was created

La VM appena creata verrà visualizzata nel portale di Azure in Sfoglia > Macchine virtuali oppure usando i comandi di PowerShell seguenti:You should see the newly created VM either in the Azure portal, under Browse > Virtual machines, or by using the following PowerShell commands:

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

Passaggi successiviNext steps

Per accedere alla nuova macchina virtuale, passare alla VM nel portale, fare clic su Connettie aprire il file RDP di Desktop remoto.To sign in to your new virtual machine, browse to the VM in the portal, click Connect, and open the Remote Desktop RDP file. Usare le credenziali dell'account della macchina virtuale originale per accedere alla nuova macchina virtuale.Use the account credentials of your original virtual machine to sign in to your new virtual machine. Per altre informazioni, vedere Come connettersi e accedere a una macchina virtuale di Azure che esegue Windows.For more information, see How to connect and log on to an Azure virtual machine running Windows.