Risolvi i problemi di avvio delle VM Linux dovuti a errori di tipo kernel panic

Questo documento include informazioni per la risoluzione dei problemi relativi a una VM che non risponde a causa di errori di tipo kernel panic.

Prima di iniziare

  • Se vuoi registrare l'output della porta seriale in Cloud Logging, acquisisci familiarità con Cloud Logging.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Seleziona la scheda relativa a come prevedi di utilizzare i campioni in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi Google Cloud e alle API, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  • Imposta una regione e una zona predefinite.
  • REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI.

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .

Kernel panic

Un kernel panic può verificarsi quando il kernel non è in grado di caricare correttamente i moduli initramfs necessari per l'avvio del sistema operativo guest.

Un'altra forma kernel panic può verificarsi in una situazione in cui il kernel non è in grado di gestire una determinata richiesta e si protegge arrestandosi. Un kernel panic può avere luogo su una VM Compute Engine che esegue RedHat, SUSE, CentOS o Ubuntu.

Messaggi di errore comuni

Di seguito sono riportati alcuni degli eventi kernel panic più comuni:

Kernel panic - not syncing: hung_task: blocked tasks
Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Kernel panic - not syncing: NMI: Not continuing
Kernel panic - not syncing: out of memory. panic_on_oom is selected
Kernel panic - not syncing: Fatal Machine check 

Cause comuni

Gli errori di tipo kernel panic possono verificarsi per diversi motivi. Ecco alcuni dei più comuni:

  • La voce relativa al file initramfs che corrisponde al kernel non esiste nel file grub.cfg.
  • Il file initramfs non viene generato nella directory /boot durante l'installazione del kernel.
  • Il file initramfs viene generato solo parzialmente o è danneggiato.

Sintomi

Un sintomo frequente del verificarsi di un kernel panic nell'istanza di una VM è che il kernel non consente di connettersi alla VM, anche se si utilizza la console seriale.

È necessario controllare i log della console seriale per identificare il kernel caricato dal sistema operativo guest, ad esempio:

[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-1160.95.1.el7.x86_64 (mockbuild@x86-vm-42.build.eng.bos.redhat.com) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Aug 10 10:46:21 EDT 2023
Controlla anche l'errore di tipo kernel panic. Questo errore si trova normalmente nella riga del kernel che corrisponde all'avvio della VM o alla fine dei log della console seriale con più tracce dello stack delle chiamate.

L'esempio seguente mostra un evento di kernel panic causato da problemi relativi a initramfs:

[    1.520840] No filesystem could mount root, tried:
[    1.520840]
[    1.521964] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.523495] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.10.0-1160.95.1.el7.x86_64 #1
[    1.524932] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/11/2022
[    1.526901] Call Trace:
[    1.527421]  dump_stack+0x41/0x60
[    1.527978]  panic+0xe7/0x2ac
[    1.528578]  mount_block_root+0x2be/0x2e6
[    1.529693]  ? do_early_param+0x95/0x95
[    1.530441]  prepare_namespace+0x135/0x16b
[    1.531237]  kernel_init_freeable+0x203/0x22d
[    1.532081]  ? rest_init+0xaa/0xaa
[    1.532808]  kernel_init+0xa/0x103
[    1.533395]  ret_from_fork+0x35/0x40
[    1.535229] Kernel Offset: 0x23a00000 from 0xffffffff81000000  

Risolvi l'errore di tipo kernel panic

Per risolvere l'errore di tipo kernel panic, segui questi passaggi:

  1. Connettiti alla console seriale e accedi alla VM dalla console Google Cloud .

  2. Nella console Google Cloud , fai clic su Reimposta in corrispondenza della VM.

  3. Dopo la visualizzazione della schermata iniziale di GRUB, seleziona il kernel o il kernel di recupero che funzionava prima dell'errore e avvia il sistema. La VM viene avviata con il kernel selezionato.

    kernel panic

  4. Quando la VM è accessibile, puoi avviare una connessione SSH alla VM.

  5. Identifica la causa del problema e intervieni di conseguenza.

    Ad esempio, se il file initramfs manca o è danneggiato, segui questi passaggi:

    1. Genera il file initramfs corrispondente al kernel originale utilizzando il comando dracut:

      dracut -f /boot/initramfs-KERNEL_VERSION.img KERNEL_VERSION
      

      Sostituisci KERNEL_VERSION con la versione corrente del kernel della VM. Ad esempio, 3.10.0-1160.95.1.el7.x86_64.

    2. Aggiorna il file grub2.cfg utilizzando il comando grub2-mkconfig, ad esempio:

      grub2-mkconfig -o /boot/grub2/grub.cfg
      
    3. Dopo aver generato il file initramfs, la VM può essere avviata senza errori.