Risoluzione dei problemi di avvio delle VM

Questo documento include informazioni sulla risoluzione dei problemi di avvio delle VM dovuti a errori di quota e dischi di avvio.

Errori di quota

Se ricevi un errore di quota quando avvii la VM, significa che potresti aver raggiunto il valore di quota per le risorse nel tuo progetto. Per comprendere il messaggio di errore, identificare il valore di quota superato e come risolvere il problema, consulta la pagina Risolvere gli errori di quota.

Dischi di avvio

Se l'istanza non si avvia e non riesci a connetterti o ad accedere tramite la console seriale interattiva, identifica il motivo per cui il disco di avvio non riesce a completare la procedura di avvio e di startup.

Identifica il motivo per cui il disco di avvio non si avvia

  • Verifica che il disco di avvio non sia pieno.

    Se il disco di avvio è completamente pieno e il sistema operativo non supporta il ridimensionamento automatico, non potrai connetterti all'istanza. Devi creare una nuova istanza e ricreare il disco di avvio. Per ulteriori informazioni, consulta Recupero di VM o dischi di avvio pieni.

  • Esamina l'output della porta seriale dell'istanza della macchina virtuale.

    Il BIOS, il bootloader e il kernel di un'istanza generano i messaggi di debug nell'output della porta seriale dell'istanza, fornendo informazioni preziose su eventuali errori o problemi riscontrati nell'istanza. Se attivi il logging dell'output della porta seriale in Cloud Logging, puoi accedere a queste informazioni anche quando l'istanza non è in esecuzione.

  • Abilita l'accesso interattivo alla console seriale.

    Puoi attivare l'accesso interattivo alla console seriale di un'istanza, in modo da poter accedere ed eseguire il debug dell'avvio dall'istanza senza doverla avviare completamente. Per saperne di più, consulta la sezione Risoluzione dei problemi utilizzando la console seriale.

  • Verifica che la clonazione del disco di avvio non sia in corso

    Se la clonazione del disco di avvio è in corso, non puoi avviare la VM e viene visualizzato un errore simile al seguente.

    Failed to start example-vm: The instance resource 'projects/example-project/zones/us-central1-b/instances/example-vm' is already being used by 'projects/example-project/zones/us-central1-b/disks/clone'
    

    Attendi il completamento della clonazione, quindi avvia la VM.

  • Verificare che non sia in corso lo snapshot del disco di avvio

    Se è in corso uno snapshot del disco di avvio, non puoi avviare la VM e viene visualizzato un errore simile al seguente:

    The instance resource 'projects/example-project/zones/asia-east1-b/instances/example-vm' is already being used by 'projects/example-project/global/snapshots/example-vm-prod-asia-east1-b-abc'
    

    Attendi il completamento dello snapshot, quindi avvia la VM.

  • Verifica che sul disco sia presente un file system valido.

    Se il file system è danneggiato o non valido, non potrai avviare l'istanza. Convalida il file system del disco:

    1. Scollega il disco in questione da tutte le istanze a cui è collegato, se applicabile:

      gcloud compute instances delete old-instance --keep-disks boot
      
    2. Avvia una nuova istanza con l'immagine più recente fornita da Google:

      gcloud compute instances create debug-instance
    3. Collega il disco come disco non di avvio, ma non montarlo. Sostituisci DISK con il nome del disco che non si avvia. Prendi nota del nome del dispositivo che identifica il disco nell'istanza:

      gcloud compute instances attach-disk debug-instance \
          --disk DISK \
          --device-name debug-disk
      
    4. Connettiti all'istanza:

      gcloud compute ssh debug-instance
      
    5. Cerca la partizione root del disco, riconoscibile grazie alla notazione part1. In questo caso, la partizione root del disco si trova in /dev/sdb1:

      ls -l /dev/disk/by-id
      total 0
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 google-debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 google-debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 google-persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 google-persistent-disk-0-part1 -> ../../sda1
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0-part1 -> ../../sda1
      
    6. Esegui un controllo del file system sulla partizione root completando i seguenti passaggi:

      1. Identifica il tipo di file system delle partizioni del disco eseguendo lsblk -f:

        sudo lsblk -f

        L'output è simile al seguente:

        NAME   FSTYPE LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT
        sdb
        └─sdb1 xfs          2e4f7b4e-9b0a-4b7c-8b8a-9b0a4b7c8b8c
        sda
        └─sda1 ext4         0e4f7b4e-9b0a-4b7c-8b8a-9b0a4b7c8b8a
      2. A seconda del tipo di file system, esegui uno dei seguenti comandi per verificare la presenza di errori nel file system:

        ext o vfat

        Se il file system della partizione root è ext2, ext3, ext4 o vfat, esegui il comando fsck come segue:

        sudo fsck DEVICE_NAME

        Sostituisci DEVICE_NAME con il nome del dispositivo della partizione root, ad esempio /dev/sdb1.

        Se fsck restituisce un errore come Bad magic number in super-block, significa che il file system è danneggiato.

        xfs

        Se il file system della partizione root è xfs, utilizza lo strumento xfs_repair.

        1. xfs_repair non funziona su un file system montato. Prima di eseguire xfs_repair, assicurati che la partizione sia smontata. Se la partizione è montata, esegui il comando umount per smontarla. Sostituisci DEVICE_NAME con il nome del dispositivo della partizione root, ad esempio /dev/sdb1.

          sudo umount DEVICE_NAME
        2. Per eseguire la scansione del file system alla ricerca di errori, esegui xfs_repair in modalità dry run utilizzando l'opzione -n.

          sudo xfs_repair -n DEVICE_NAME
          
          • Se non vengono rilevati errori o se xfs_repair -n viene completato correttamente, significa che non è presente alcun danneggiamento. Dovresti esaminare altre cause dell'errore di avvio della VM.
          • Se vengono segnalati errori o se xfs_repair -n non riesce a completare l'operazione con un messaggio come If you wish to clear the log, mount the file system with the norecovery option, vai al passaggio successivo per tentare una riparazione.
        3. Per riparare il file system, esegui il comando xfs_repair senza l'opzione -n.

          sudo xfs_repair DEVICE_NAME
          

          Se xfs_repair non riesce a completare l'operazione e suggerisce di utilizzare l'opzione -L, esegui xfs_repair con l'opzione -L per cancellare il log e riprovare a riparare il file system.

          sudo xfs_repair -L DEVICE_NAME
          
    7. Monta il file system:

      sudo mkdir MOUNT_POINT
      
      sudo mount DEVICE_NAME MOUNT_POINT
      

      Sostituisci quanto segue:

      • DEVICE_NAME: il nome del dispositivo della partizione root, ad esempio /dev/sdb1.
      • MOUNT_POINT: la directory in cui vuoi montare il disco, ad esempio /mydisk.
    8. Verifica che sul disco siano presenti i file del kernel:

       ls MOUNT_POINT/boot/vmlinuz-*
       

      L'output è simile al seguente:

       MOUNT_POINT/boot/vmlinuz-3.2.0-4-amd64
       

  • Verifica che il disco disponga di un record di avvio principale (MBR) valido.

    Esegui il seguente comando sull'istanza di debug a cui è collegato il disco di avvio permanente:

    sudo parted DISK_DEVICE print
    

    Sostituisci DISK_DEVICE con il nome del dispositivo del disco di avvio permanente da controllare, ad esempio /dev/sdb1.

    Se l'MBR è valido, vengono riportate in elenco le informazioni sul file system:

    Disk DISK_DEVICE: 10.7GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: msdos
    Disk Flags:
    Number  Start   End     Size    Type     File system  Flags
     1      2097kB  10.7GB  10.7GB  primary  ext4         boot
    

Correggi il problema di avvio

Dopo aver identificato dove si verifica l'errore durante il processo di avvio e startup, puoi risolvere il problema intraprendendo una delle seguenti azioni:

Creazione di un disco di avvio autonomo

Monta l'immagine importata su un disco secondario collegato a un'istanza VM provvisoria. Utilizza la console Google Cloud o la gcloud CLI per creare un disco autonomo dall'immagine che hai caricato e una VM temporanea a cui è collegato il disco autonomo. Puoi utilizzare questa istanza per modificare i file sul disco autonomo e risolvere i problemi che causano l'errore di avvio dell'immagine.

Console

Crea un disco autonomo dall'immagine disco di avvio importata. In alternativa, puoi scollegare un disco di avvio da un'istanza e utilizzarlo per creare un'istanza

  1. Nella Google Cloud console, vai alla pagina Dischi.

    Vai a Dischi

  2. Fai clic su Crea disco.
  3. Nella pagina Crea un disco , specifica i seguenti attributi:
    • Zona: Select a zone near you. You must use this same zone when you create your temporary instance.
    • Tipo di disco di origine: Immagine
    • Immagine di origine: specifica il nome dell'immagine disco di avvio che hai importato.
  4. Per creare il disco, fai clic su Crea.

Crea un'istanza temporanea in cui puoi collegare il disco autonomo e configura il bootloader in modo che funzioni in un ambiente della Google Cloud console.

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze

  2. Fai clic sul pulsante Crea istanza.

  3. Nella pagina Crea un'istanza, specifica un nome per l'istanza e una zona in cui posizionarla. La zona deve essere la stessa nella quale hai creato il disco autonomo.

  4. Espandi la sezione Gestione, sicurezza, dischi, networking, single-tenancy.

  5. Nella scheda Dischi della sezione Dischi aggiuntivi, fai clic su Collega disco esistente. Viene visualizzata una nuova sezione.

  6. Nella sezione Disco, seleziona dall'elenco a discesa il disco autonomo che hai creato. Il disco autonomo viene collegato all'istanza, così che tu possa montarlo e modificarne i contenuti in un secondo momento.

  7. Fai clic su Fine per completare il collegamento del disco.

  8. Fai clic sul pulsante Crea per creare l'istanza.

gcloud

Crea un disco autonomo dall'immagine disco di avvio importata. In alternativa, puoi scollegare un disco di avvio da un'istanza e utilizzarlo per creare un'istanza

gcloud compute disks create DISK_NAME \
    --zone=ZONE \
    --image=IMAGE_NAME

Sostituisci quanto segue:

  • DISK_NAME: il nome del nuovo disco autonomo.

  • ZONE: una zona vicina a te. Devi utilizzare la stessa zona quando crei l'istanza temporanea.

  • IMAGE_NAME: il nome dell'immagine disco di avvio che hai importato.

Crea un'istanza temporanea in cui puoi collegare il disco autonomo e configura il bootloader in modo che funzioni in un ambiente della console Google Cloud .

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --disk name=DISK_NAME

Sostituisci quanto segue:

  • INSTANCE_NAME: un nome univoco per l'istanza

  • ZONE: la zona in cui hai creato il disco autonomo

  • DISK_NAME: il nome del disco autonomo che hai creato dall'immagine disco di avvio importata

Dopo aver creato l'istanza collegata con il disco autonomo, hai un ambiente virtuale in cui puoi modificare il bootloader dall'immagine disco di avvio originale.

Configurazione del disco di avvio

Connettiti all'istanza, monta il disco autonomo e configura il bootloader in modo che si avvii correttamente su Compute Engine.

  1. Connettiti all'istanza temporanea utilizzando l'SSH nel browser o il comando gcloud compute ssh.
  2. Utilizza il comando blkid per identificare il disco che vuoi modificare e le partizioni da montare. In questo esempio, /dev/sdb è il disco importato.

    lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   10G  0 disk
    └─sda1   8:1    0   10G  0 part /
    sdb      8:16   0  100G  0 disk
    ├─sdb1   8:17   0   96G  0 part
    ├─sdb2   8:18   0    1K  0 part
    └─sdb5   8:21   0    4G  0 part
    
  3. Monta la partizione root dal disco autonomo alla directory /tmp. In questo esempio, /dev/sdb1 è la partizione root e le altre partizioni non richiedono modifiche. A seconda dello schema di partizione è possibile che tu debba montare più partizioni prima di poter accedere a tutti i file da modificare.

    sudo mount DEVICE_NAME /tmp
    

    Sostituisci DEVICE_NAME con il nome del dispositivo della partizione root da montare, ad esempio /dev/sdb1.

  4. Modifica i file che potrebbero causare errori durante l'avvio del disco. Per saperne di più, consulta le istruzioni di configurazione del bootloader.

  5. Smonta il disco di avvio dall'istanza temporanea.

    sudo umount /tmp
    

Utilizzo del disco di avvio

Al termine della configurazione, scollega il disco e utilizzalo come disco di avvio per la nuova istanza.

Console

Scollega il disco autonomo dall'istanza temporanea.

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze

  2. Nell'elenco delle istanze, fai clic sul nome dell'istanza temporanea in cui hai modificato il disco di avvio autonomo. Viene visualizzata la pagina dei dettagli dell'istanza.

  3. Nella parte superiore della pagina dei dettagli dell'istanza, fai clic su Modifica.

  4. In Dischi aggiuntivi, fai clic sulla X accanto al disco autonomo per segnalare che vuoi scollegarlo dall'istanza temporanea.

  5. Fai clic su Salva per salvare le modifiche.

Utilizza il disco autonomo scollegato per creare un'istanza.

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze

  2. Fai clic sul pulsante Crea istanza.

  3. Nella pagina Crea un'istanza, specifica un nome per l'istanza e una zona in cui posizionarla. La zona deve essere la stessa nella quale hai creato il disco autonomo.

  4. In Disco di avvio, fai clic su Cambia per iniziare a configurare il disco di avvio.

  5. Nella scheda Dischi esistenti, scegli il disco di avvio autonomo da utilizzare come disco di avvio per questa nuova istanza.

  6. Fai clic sul pulsante Crea per creare l'istanza.

gcloud

Scollega il disco autonomo dall'istanza temporanea.

gcloud compute instances detach-disk INSTANCE_NAME \
    --disk name=DISK_NAME

Sostituisci quanto segue:

  • INSTANCE_NAME: un nome univoco per l'istanza
  • DISK_NAME: il nome del nuovo disco autonomo

Utilizza il disco autonomo scollegato per creare un'istanza.

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --disk name=DISK_NAME,boot=yes

Sostituisci quanto segue:

  • INSTANCE_NAME: un nome univoco per l'istanza
  • ZONE: la zona in cui si trova il disco autonomo
  • DISK_NAME: il nome del disco autonomo che hai creato dall'immagine disco di avvio importata

Testa l'istanza che hai creato tramite il disco di avvio modificato. Se ancora non riesci a connetterti all'istanza, visualizza di nuovo l'output della porta seriale per identificare dove si verifica l'errore di avvio. Ripeti la procedura di risoluzione dei problemi finché non correggi quelli legati all'immagine disco di avvio.