Soluciona problemas de inicio de VM de Linux debido al error irrecuperable del kernel


En este documento, se incluye información sobre la solución de problemas sobre una VM que no responde debido a un error irrecuperable del kernel.

Antes de comenzar

  • Si deseas registrar la salida del puerto en serie en Cloud Logging, familiarízate con Cloud Logging.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera

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

    Console

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

    gcloud

    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

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

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

        gcloud init

      Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

Error irrecuperable del kernel

Un error irrecuperable del kernel puede ocurrir cuando el kernel no puede cargar correctamente los módulos initramfs, que son necesarios para que se inicie el SO invitado.

Otra forma de error irrecuperable del kernel puede ocurrir en una situación en la que el kernel no sabe cómo manejar una solicitud determinada y se protege mediante la detención. El error irrecuperable del kernel puede ocurrir en una VM de Compute Engine que ejecuta Red Hat, SUSE, CentOS o Ubuntu.

Mensajes de error comunes:

A continuación, se muestran algunos de los eventos de error irrecuperables del kernel más habituales como referencia:

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 

Causas habituales

El error irrecuperable del kernel puede ocurrir por varios motivos. A continuación, se muestran algunos de los motivos más habituales:

  • La entrada relacionada con el archivo initramfs que corresponde al kernel no existe en el archivo grub.cfg.
  • El archivo initramfs no se genera en el directorio /boot durante la instalación del kernel.
  • El archivo initramfs solo se genera parcialmente o está dañado.

Síntomas

Cuando experimentas un error irrecuperable del kernel en una instancia de VM, un síntoma común es que el kernel no te permite conectarte a la VM, incluso cuando se usa la consola en serie.

Debes verificar los registros de la consola en serie para identificar el kernel que cargó el SO invitado, por ejemplo:

[    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
Verifica también el error irrecuperable del kernel. Por lo general, este error se ve en la línea del kernel cuando se inicia la VM o al final de los registros de la consola en serie con varias trazas de llamadas de pila.

En el siguiente ejemplo, se muestra un evento de error irrecuperable del kernel debido a problemas de 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  

Resuelve el error irrecuperable del kernel

Para resolver error irrecuperable del kernel, sigue estos pasos:

  1. Conéctate a la consola en serie y accede a la VM desde la consola de Google Cloud.

  2. Haz clic en Restablecer para la VM en la consola de Google Cloud.

  3. Después de que aparezca la pantalla de presentación de GRUB, selecciona el kernel que funcionaba antes o el kernel de recuperación y, luego, inicia el sistema. Esto hace que la VM comience con el kernel seleccionado.

    error irrecuperable del kernel

  4. Cuando se puede acceder a la VM, puedes iniciar una conexión SSH a la VM.

  5. Identifica la causa del problema y toma las medidas necesarias.

    Por ejemplo, si falta el archivo initramfs o está dañado, completa los siguientes pasos:

    1. Genera el archivo initramfs correspondiente al kernel original mediante el comando dracut, por ejemplo:

      dracut -f /boot/initramfs-3.10.0-1160.95.1.el7.x86_64.img 3.10.0-1160.95.1.el7.x86_64
      
    2. Actualiza el archivo grub2.cfg con el comando grub2-mkconfig, por ejemplo:

      grub2-mkconfig -o /boot/grub2/grub.cfg
      
    3. Después de generar el archivo initramfs, puedes reiniciar la VM sin ningún error.