Risolvere i problemi di avvio delle VM Linux dovuti a panico del kernel


Questo documento include informazioni sulla risoluzione dei problemi relativi a una VM che non risponde a causa di errori di panico del kernel.

Prima di iniziare

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

    Select the tab for how you plan to use the samples on this page:

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione Google Cloud sull'autenticazione.

Panico del kernel

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

Un'altra forma di panico del kernel può verificarsi in una situazione in cui il kernel non sa come gestire una determinata richiesta e si protegge fermandosi. Un panico del kernel può verificarsi su una VM Compute Engine che esegue RedHat, SUSE, CentOS o Ubuntu.

Messaggi di errore comuni

Di seguito sono riportati alcuni degli eventi di panico del kernel più comuni come riferimento:

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

L'errore di panico del kernel può verificarsi per diversi motivi. Ecco alcuni dei motivi 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

Quando si verifica un panico del kernel in un'istanza VM, un sintomo comune è che il kernel non consente di connettersi alla VM, anche quando si utilizza la console seriale.

Devi 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 panico del kernel. Questo errore viene visualizzato normalmente nella riga del kernel all'avvio della VM o alla fine dei log della console seriale con più tracce di chiamata dello stack.

L'esempio seguente mostra un evento di panico del kernel a causa di problemi 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 panico del kernel

Per risolvere l'errore di panico del kernel:

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

  2. Fai clic su Reimposta per la VM nella console Google Cloud.

  3. Dopo aver visualizzato la schermata iniziale di GRUB, seleziona il kernel o il kernel di salvataggio che funzionava in precedenza 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 non è presente 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, puoi riavviare la VM senza errori.