Risolvere i problemi di una macchina virtuale Windows collegando il disco del sistema operativo a una macchina virtuale di ripristino usando Azure PowerShell

Se la macchina virtuale (VM) Windows in Azure rileva un errore di avvio o del disco, potrebbe essere necessario eseguire i passaggi per la risoluzione dei problemi sul disco stesso. Un esempio comune potrebbe essere un aggiornamento dell'applicazione non riuscito che impedisce alla macchina virtuale di avviarsi correttamente. Questo articolo descrive in dettaglio come usare Azure PowerShell per connettere il disco a un'altra macchina virtuale Windows per correggere eventuali errori, quindi riparare la macchina virtuale originale.

Importante

Gli script in questo articolo si applicano solo alle macchine virtuali che utilizzano Disco gestito.

Panoramica del processo di recupero

È ora possibile usare Azure PowerShell per modificare il disco del sistema operativo per una macchina virtuale. Non è più necessario eliminare e ricreare la VM.

Il processo di risoluzione dei problemi è il seguente:

  1. Arrestare la VM interessata.
  2. Crea uno snapshot dal disco del sistema operativo della VM.
  3. Crea un disco dallo snapshot del disco del sistema operativo.
  4. Collegare il disco come disco dati a una macchina virtuale di ripristino.
  5. Connettersi alla macchina virtuale di ripristino. Modifica i file o esegui qualsiasi strumento per risolvere i problemi sul disco del sistema operativo copiato.
  6. Smonta e scollega il disco dalla macchina virtuale di ripristino.
  7. Modificare il disco del sistema operativo per la macchina virtuale interessata.

È possibile utilizzare i comandi di riparazione VM per automatizzare i passaggi 1, 2, 3, 4, 6 e 7. Per altra documentazione e istruzioni, vedere Riparare una macchina virtuale Windows usando i comandi di riparazione di macchine virtuali di Azure.

Assicurati di avere l'ultima versione di Azure PowerShell installata e di aver effettuato l'accesso alla tua sottoscrizione:

Connect-AzAccount

Negli esempi seguenti, sostituisci i nomi dei parametri con i tuoi valori.

Determina i problemi di avvio

È possibile visualizzare uno screenshot della macchina virtuale in Azure per risolvere i problemi di avvio. Questo screenshot può aiutare a identificare il motivo per cui una macchina virtuale non si avvia. L'esempio seguente acquisisce lo screenshot dalla macchina virtuale di Windows denominata myVM nel gruppo di risorse denominato myResourceGroup:

Get-AzVMBootDiagnosticsData -ResourceGroupName myResourceGroup `
    -Name myVM -Windows -LocalPath C:\Users\ops\

Esamina lo screenshot per determinare perché la VM non si avvia. Prendere nota di eventuali messaggi di errore specifici o codici di errore forniti.

Arresta la macchina virtuale

L'esempio seguente arresta la VM denominata myVM dal gruppo di risorse denominato myResourceGroup:

Stop-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"

Attendere fino al termine dell'eliminazione della VM prima di passare al passaggio successivo.

Crea uno snapshot dal disco del sistema operativo della VM

L'esempio seguente crea un'istantanea con nome mySnapshot dal disco del sistema operativo della macchina virtuale denominata "myVM".

$resourceGroupName = 'myResourceGroup' 
$location = 'eastus' 
$vmName = 'myVM'
$snapshotName = 'mySnapshot'  

#Get the VM
$vm = get-azvm `
-ResourceGroupName $resourceGroupName `
-Name $vmName

#Create the snapshot configuration for the OS disk
$snapshot =  New-AzSnapshotConfig `
-SourceUri $vm.StorageProfile.OsDisk.ManagedDisk.Id `
-Location $location `
-CreateOption copy

#Take the snapshot
New-AzSnapshot `
   -Snapshot $snapshot `
   -SnapshotName $snapshotName `
   -ResourceGroupName $resourceGroupName 

Uno snapshot è una copia completa di sola lettura di un disco rigido virtuale. Non può essere collegato a una VM. Nel passaggio successivo, creeremo un disco da questa istantanea.

Crea un disco dallo snapshot

Questo script crea un disco gestito con nome newOSDisk dall'istantanea denominata mysnapshot.

#Set the context to the subscription Id where Managed Disk will be created
#You can skip this step if the subscription is already selected

$subscriptionId = 'yourSubscriptionId'

Select-AzSubscription -SubscriptionId $SubscriptionId

#Provide the name of your resource group
$resourceGroupName ='myResourceGroup'

#Provide the name of the snapshot that will be used to create Managed Disks
$snapshotName = 'mySnapshot' 

#Provide the name of the Managed Disk
$diskName = 'newOSDisk'

#Provide the size of the disks in GB. It should be greater than the VHD file size.
$diskSize = '128'

#Provide the storage type for Managed Disk. Premium_LRS or Standard_LRS.
$storageType = 'Standard_LRS'

#Provide the Azure region (e.g. westus) where Managed Disks will be located.
#This location should be same as the snapshot location
#Get all the Azure location using command below:
#Get-AzLocation
$location = 'eastus'

$snapshot = Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName 
 
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id
 
New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $diskName

Ora hai una copia del disco del sistema operativo originale. È possibile montare questo disco su un'altra macchina virtuale Windows per la risoluzione dei problemi.

Collegare il disco a un'altra macchina virtuale Windows per la risoluzione dei problemi

Ora alleghiamo la copia del disco del sistema operativo originale a una macchina virtuale come disco dati. Questo processo consente di correggere gli errori di configurazione o di esaminare ulteriori file di registro dell'applicazione o del sistema nel disco. L'esempio seguente collega il disco denominato newOSDisk alla macchina virtuale denominata RecoveryVM.

Nota

Per collegare il disco, la copia del disco del sistema operativo originale e la macchina virtuale di ripristino devono trovarsi nella stessa posizione.

$rgName = "myResourceGroup"
$vmName = "RecoveryVM"
$location = "eastus" 
$dataDiskName = "newOSDisk"
$disk = Get-AzDisk -ResourceGroupName $rgName -DiskName $dataDiskName 

$vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName 

$vm = Add-AzVMDataDisk -CreateOption Attach -Lun 0 -VM $vm -ManagedDiskId $disk.Id

Update-AzVM -VM $vm -ResourceGroupName $rgName

Connettiti alla VM di ripristino e risolvi i problemi sul disco collegato

  1. RDP alla macchina virtuale di ripristino usando le credenziali appropriate. L'esempio seguente scarica il file di connessione RDP per la macchina virtuale denominata RecoveryVM nel gruppo di risorse denominato myResourceGroup e lo scarica in C:\Users\ops\Documents".

    Get-AzRemoteDesktopFile -ResourceGroupName "myResourceGroup" -Name "RecoveryVM" `
        -LocalPath "C:\Users\ops\Documents\myVMRecovery.rdp"
    
  2. Il disco dati dovrebbe essere rilevato e collegato automaticamente. Visualizza l'elenco dei volumi collegati per determinare la lettera di unità come segue:

    Get-Disk
    

    Il seguente output di esempio mostra il disco connesso a un disco 2. (È anche possibile utilizzare Get-Volume per visualizzare la lettera dell'unità):

    Number   Friendly Name   Serial Number   HealthStatus   OperationalStatus   Total Size   Partition
                                                                                             Style
    ------   -------------   -------------   ------------   -----------------   ----------   ----------
    0        Virtual HD                                     Healthy             Online       127 GB MBR
    1        Virtual HD                                     Healthy             Online       50 GB MBR
    2        newOSDisk                                  Healthy             Online       127 GB MBR
    

Dopo aver montato la copia del disco del sistema operativo originale, è possibile eseguire le operazioni di manutenzione e risoluzione dei problemi necessarie. Dopo aver risolto i problemi, continuare con i passaggi seguenti.

Smonta e scollega il disco del sistema operativo originale

Una volta risolti gli errori, smontare e scollegare il disco esistente dalla macchina virtuale di ripristino. Non è possibile usare il disco con nessun'altra macchina virtuale finché non viene rilasciato il lease che collega il disco alla macchina virtuale di ripristino.

  1. Dall'interno della sessione RDP, smontare il disco dati sulla VM di ripristino. È necessario il numero del disco dal cmdlet Get-Disk precedente. Quindi, utilizzare Set-Disk per impostare il disco come non in linea:

    Set-Disk -Number 2 -IsOffline $True
    

    Confermare che il disco è ora impostato come non in linea utilizzando nuovamente Get-Disk. L'output di esempio seguente mostra che il disco è ora impostato come offline:

    Number   Friendly Name   Serial Number   HealthStatus   OperationalStatus   Total Size   Partition
                                                                                             Style
    ------   -------------   -------------   ------------   -----------------   ----------   ----------
    0        Virtual HD                                     Healthy             Online       127 GB MBR
    1        Virtual HD                                     Healthy             Online       50 GB MBR
    2        Msft Virtu...                                  Healthy             Offline      127 GB MBR
    
  2. Esci dalla sessione RDP. Dalla sessione PowerShell di Azure, rimuovere il disco denominato newOSDisk dalla macchina virtuale denominata 'RecoveryVM'.

    $myVM = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "RecoveryVM"
    Remove-AzVMDataDisk -VM $myVM -Name "newOSDisk"
    Update-AzVM -ResourceGroup "myResourceGroup" -VM $myVM
    

Modificare il disco del sistema operativo per la macchina virtuale interessata

È possibile usare Azure PowerShell per scambiare i dischi del sistema operativo. Non è necessario eliminare e ricreare la VM.

Questo esempio arresta la VM denominata myVM e assegna il disco denominato newOSDisk come nuovo disco del sistema operativo.

# Get the VM 
$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM 

# Make sure the VM is stopped\deallocated
Stop-AzVM -ResourceGroupName myResourceGroup -Name $vm.Name -Force

# Get the new disk that you want to swap in
$disk = Get-AzDisk -ResourceGroupName myResourceGroup -Name newDisk

# Set the VM configuration to point to the new disk  
Set-AzVMOSDisk -VM $vm -ManagedDiskId $disk.Id -Name $disk.Name  -sto

# Update the VM with the new OS disk. Possible values of StorageAccountType include: 'Standard_LRS' and 'Premium_LRS'
Update-AzVM -ResourceGroupName myResourceGroup -VM $vm -StorageAccountType <Type of the storage account >

# Start the VM
Start-AzVM -Name $vm.Name -ResourceGroupName myResourceGroup

Verificare e abilitare la diagnostica di avvio

L'esempio seguente abilita l'estensione di diagnostica sulla macchina virtuale denominata myVMDeployed nel gruppo di risorse denominato myResourceGroup:

$myVM = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVMDeployed"
Set-AzVMBootDiagnostics -ResourceGroupName myResourceGroup -VM $myVM -enable
Update-AzVM -ResourceGroup "myResourceGroup" -VM $myVM

Passaggi successivi

Se si verificano problemi di connessione alla macchina virtuale, vedere Risolvere i problemi di connessione RDP a una macchina virtuale di Azure. Per problemi con l'accesso alle applicazioni in esecuzione sulla macchina virtuale, vedere Risolvere i problemi di connettività delle applicazioni su una macchina virtuale Windows.

Per ulteriori informazioni sull'uso di Resource Manager, vedere Panoramica di Azure Resource Manager.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.