Risolvere i problemi di una macchina virtuale Linux collegando il disco del sistema operativo a una macchina virtuale di ripristino con l'interfaccia della riga di comando di Azure

Se la macchina virtuale (VM) Linux rileva un errore di avvio o del disco, potrebbe essere necessario eseguire i passaggi per la risoluzione dei problemi sul disco rigido virtuale stesso. Un esempio comune potrebbe essere una voce non valida in /etc/fstab che impedisce alla macchina virtuale di avviarsi correttamente. Questo articolo descrive in dettaglio come usare l'interfaccia della riga di comando di Azure per connettere il disco rigido virtuale a un'altra macchina virtuale Linux per correggere eventuali errori, quindi ricreare la macchina virtuale originale.

Panoramica del processo di recupero

Il processo di risoluzione dei problemi è il seguente:

  1. Arrestare la VM interessata.
  2. Scatta uno snapshot dal disco del sistema operativo della VM.
  3. Crea un disco dallo snapshot del disco del sistema operativo.
  4. Collegare e montare il nuovo disco del sistema operativo in un'altra macchina virtuale Linux per la risoluzione dei problemi.
  5. Connettersi alla VM per la risoluzione dei problemi. Modifica i file o esegui qualsiasi strumento per risolvere i problemi sul nuovo disco del sistema operativo.
  6. Smonta e scollega il nuovo disco del sistema operativo dalla VM per la risoluzione dei problemi.
  7. Modificare il disco del sistema operativo per la macchina virtuale interessata.

Per eseguire questi passaggi per la risoluzione dei problemi, è necessario che sia installata l'ultima interfaccia della riga di comando di Azure e che sia stato eseguito l'accesso a un account Azure usando az login.

È 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 Linux usando i comandi di riparazione di macchine virtuali di Azure.

Importante

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

Negli esempi seguenti, sostituisci i nomi dei parametri con i tuoi valori, ad esempio myResourceGroup e myVM.

Determina i problemi di avvio

Esamina l'output seriale per determinare perché la tua VM non è in grado di avviarsi correttamente. Un esempio comune è una voce non valida in /etc/fstab o l'eliminazione o lo spostamento del disco rigido virtuale sottostante.

Ottieni i log di avvio con az vm boot-diagnostics get-boot-log. L'esempio seguente ottiene l'output seriale dalla VM denominata myVM nel gruppo di risorse denominato myResourceGroup:

az vm boot-diagnostics get-boot-log --resource-group myResourceGroup --name myVM

Esaminare l'output seriale per determinare perché la macchina virtuale non si avvia. Se l'output seriale non fornisce alcuna indicazione, potrebbe essere necessario esaminare i file di registro in /var/log dopo aver collegato il disco rigido virtuale a una macchina virtuale per la risoluzione dei problemi.

Arresta la macchina virtuale

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

az vm stop --resource-group MyResourceGroup --name MyVm

Scatta uno snapshot dal disco del sistema operativo della VM interessata

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. L'esempio seguente crea un'istantanea con nome mySnapshot dal disco del sistema operativo della macchina virtuale denominata "myVM".

#Get the OS disk Id 
$osdiskid=(az vm show -g myResourceGroup -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)

#creates a snapshot of the disk
az snapshot create --resource-group myResourceGroupDisk --source "$osdiskid" --name mySnapshot

Crea un disco dallo snapshot

Questo script crea un disco gestito con nome myOSDisk dall'istantanea denominata mySnapshot.

#Provide the name of your resource group
$resourceGroup="myResourceGroup"

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

#Provide the name of the Managed Disk
$osDisk="myNewOSDisk"

#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="Premium_LRS"

#Provide the OS type
$osType="linux"

#Get the snapshot Id 
$snapshotId=(az snapshot show --name $snapshot --resource-group $resourceGroup --query id -o tsv)

# Create a new Managed Disks using the snapshot Id.

az disk create --resource-group $resourceGroup --name $osDisk --sku $storageType --size-gb $diskSize --source $snapshotId

Se il gruppo di risorse e l'istantanea di origine non si trovano nella stessa area, riceverai l'errore "Risorsa non trovata" quando esegui az disk create. In questo caso, devi specificare --location <region> per creare il disco nella stessa regione dell'istantanea di origine.

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

Collega il nuovo disco rigido virtuale a un'altra macchina virtuale

Per i passaggi successivi, utilizzerai un'altra macchina virtuale per la risoluzione dei problemi. Collegare il disco a questa macchina virtuale per la risoluzione dei problemi per sfogliare e modificare il contenuto del disco. Questo processo consente di correggere eventuali errori di configurazione o rivedere ulteriori file di registro dell'applicazione o del sistema.

Questo script collega il disco myNewOSDisk alla VM MyTroubleshootVM:

# Get ID of the OS disk that you just created.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)

# Attach the disk to the troubleshooting VM
az vm disk attach --disk $myNewOSDiskid --resource-group $resourceGroup --size-gb $diskSize --sku $storageType --vm-name MyTroubleshootVM

Montare il disco dati collegato

Nota

Gli esempi seguenti descrivono in dettaglio i passaggi richiesti in una macchina virtuale Ubuntu. Se utilizzi una distribuzione Linux diversa, come Red Hat Enterprise Linux o SUSE, le posizioni dei file di registro e i comandi mount potrebbero essere leggermente diversi. Fare riferimento alla documentazione per la distribuzione specifica per le modifiche appropriate nei comandi.

  1. SSH alla VM per la risoluzione dei problemi utilizzando le credenziali appropriate. Se questo disco è il primo disco dati collegato alla macchina virtuale per la risoluzione dei problemi, è probabile che il disco sia connesso a /dev/sdc. Usa dmesg per visualizzare i dischi collegati:

    dmesg | grep SCSI
    

    L'output è simile al seguente esempio:

    [    0.294784] SCSI subsystem initialized
    [    0.573458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
    [    7.110271] sd 2:0:0:0: [sda] Attached SCSI disk
    [    8.079653] sd 3:0:1:0: [sdb] Attached SCSI disk
    [ 1828.162306] sd 5:0:0:0: [sdc] Attached SCSI disk
    

    Nell'esempio precedente, il disco del sistema operativo si trova in /dev/sda e il disco temporaneo fornito per ogni VM si trova in /dev/sdb. Se disponi di più dischi dati, dovrebbero trovarsi in /dev/sdd, /dev/sde e così via.

  2. Crea una directory per montare il tuo disco rigido virtuale esistente. L'esempio seguente crea una directory denominata troubleshootingdisk:

    sudo mkdir /mnt/troubleshootingdisk
    
  3. Se disponi di più partizioni sul tuo disco rigido virtuale esistente, monta la partizione richiesta. L'esempio seguente monta la prima partizione primaria in /dev/sdc1:

    sudo mount /dev/sdc1 /mnt/troubleshootingdisk
    

    Nota

    La procedura consigliata consiste nel montare i dischi dati nelle macchine virtuali in Azure usando l'identificatore univoco universale (UUID) del disco rigido virtuale. Per questo breve scenario di risoluzione dei problemi, non è necessario montare il disco rigido virtuale utilizzando l'UUID. Tuttavia, in condizioni di utilizzo normale, la modifica di /etc/fstab per montare i dischi rigidi virtuali utilizzando il nome del dispositivo anziché l'UUID potrebbe impedire l'avvio della VM.

Risolvi i problemi sul nuovo disco del sistema operativo

Con il disco rigido virtuale esistente montato, è ora possibile eseguire qualsiasi operazione di manutenzione e risoluzione dei problemi secondo necessità. Dopo aver risolto i problemi, continuare con i passaggi seguenti.

Smonta e scollega il nuovo disco del sistema operativo

Una volta risolti gli errori, smontare e scollegare il disco rigido virtuale esistente dalla VM per la risoluzione dei problemi. Non è possibile utilizzare il disco rigido virtuale con qualsiasi altra macchina virtuale fino a quando non viene rilasciato il lease che collega il disco rigido virtuale alla macchina virtuale per la risoluzione dei problemi.

  1. Dalla sessione SSH alla VM per la risoluzione dei problemi, smonta il disco rigido virtuale esistente. Cambia prima dalla directory principale per il tuo punto di montaggio:

    cd /
    

    Ora smonta il disco rigido virtuale esistente. L'esempio seguente smonta il dispositivo in /dev/sdc1:

    sudo umount /dev/sdc1
    
  2. Ora scollega il disco rigido virtuale dalla VM. Esci dalla sessione SSH sulla VM per la risoluzione dei problemi:

    az vm disk detach -g MyResourceGroup --vm-name MyTroubleShootVm --name myNewOSDisk
    

Modificare il disco del sistema operativo per la macchina virtuale interessata

È possibile usare l'interfaccia della riga di comando di Azure 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 myNewOSDisk come nuovo disco del sistema operativo.

# Stop the affected VM
az vm stop -n myVM -g myResourceGroup

# Get ID of the OS disk that is repaired.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)

# Change the OS disk of the affected VM to "myNewOSDisk"
az vm update -g myResourceGroup -n myVM --os-disk $myNewOSDiskid

# Start the VM
az vm start -n myVM -g myResourceGroup

Passaggi successivi

Se si verificano problemi di connessione alla macchina virtuale, vedere Risolvere i problemi relativi alle connessioni SSH 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 Linux.

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.