EUR
european

EUR

usa

USD

Ex. VAT Ex. VAT 0%

Activar Kdump en Linux: volcados por kernel panic

Nivel: Intermedio / Senior
Tiempo estimado: ~30 minutos
Objetivo: Configurar la captura de volcados de fallos (crash dump) de kdump en Linux para panicas del kernel, permitiendo un análisis post-mortem fiable de fallos en producción. Esta guía explica cómo habilitar kdump en Linux, cubriendo toda la configuración del volcado de fallos de Linux, desde la reserva de memoria hasta el análisis del vmcore.

Introducción

Un pánico del kernel (kernel panic) detiene el sistema y, sin un volcado de fallos, no tienes datos con los que trabajar. Kdump, el framework estándar de volcado de fallos del kernel de Linux, resuelve esto: precarga un kernel de captura en la memoria reservada y, cuando el kernel principal entra en pánico, kexec arranca ese kernel de captura para escribir una imagen completa de la memoria (vmcore) en el disco. En este tutorial, aprenderás a habilitar kdump en Linux para la captura de volcados por pánico del kernel en sistemas Ubuntu, Debian y basados en RHEL. Te mostraremos exactamente cómo habilitar los sistemas kdump de Linux, incluyendo los pasos de análisis post-mortem del vmcore en Linux.

¿Qué es Kdump?

Kdump es un mecanismo de volcado de fallos del kernel que utiliza kexec para arrancar un kernel de captura secundario desde una región de memoria reservada cada vez que el kernel principal entra en pánico. El kernel de captura se ejecuta con memoria limitada (establecida por el parámetro de arranque crashkernel) y escribe la imagen de memoria del kernel fallido en el disco como un vmcore: un archivo de volcado de memoria completo que puede analizarse con la utilidad crash o gdb. El servicio kdump (kdump.service en sistemas basados en RHEL o kdump-tools.service en sistemas basados en Debian) gestiona la carga del kernel de captura en el momento del arranque.

Componentes clave:

  • Kexec: la llamada al sistema y la herramienta de espacio de usuario que carga el kernel de captura en la memoria reservada.
  • Crashkernel: el parámetro de arranque que indica al kernel principal cuánta RAM reservar para la operación de kdump en Linux (por ejemplo, crashkernel=256M).
  • Vmcore: el archivo de salida que contiene el volcado de memoria completo, escrito en /var/crash por defecto.
  • /var/crash: el directorio predeterminado donde kdump almacena los archivos vmcore después de un pánico del kernel.

Requisitos previos

Antes de comenzar, asegúrate de que se cumplen las siguientes condiciones:

  • Sistema operativo: Ubuntu 22.04/24.04 LTS, Debian 12/13 o RHEL/CentOS/AlmaLinux 9/10 (Probado y verificado en Ubuntu 24.04, Debian 13 y AlmaLinux 10).
  • Acceso: Acceso sudo o root al servidor.
  • RAM: Mínimo 2 GB en total. Kdump reserva una parte de la memoria del sistema (típicamente 256 MB) para el kernel de captura; los sistemas con poca memoria pueden no tener suficiente margen.
  • Espacio en disco: Al menos tanto espacio libre en /var/crash como RAM tenga tu sistema (un vmcore puede ser tan grande como la memoria física).
  • Conocimientos requeridos: Uso seguro de la línea de comandos de Linux, edición básica de archivos y familiaridad con los parámetros de arranque de GRUB.
  • Ventana de reinicio: La configuración del parámetro crashkernel requiere un reinicio para surtir efecto.

Paso 1: Instalar los paquetes kdump y kexec

Kdump depende de kexec-tools (el componente de espacio de usuario de kexec/kdump en Linux) y de asistentes específicos de la distribución.

Ubuntu/Debian:

sudo apt update && sudo apt install kdump-tools kexec-tools crash -y

Durante una instalación interactiva en Ubuntu, puede aparecer un aviso de debconf preguntando si se debe configurar el parámetro crashkernel automáticamente. Selecciona Sí si se te pregunta. Si el aviso no aparece (por ejemplo, en modo no interactivo), crashkernel se configura automáticamente mediante un archivo drop-in. Si necesitas ajustar el valor más tarde, el Paso 2 cubre la configuración manual.

RHEL/CentOS/AlmaLinux:

sudo dnf install kexec-tools crash -y

En los sistemas basados en RHEL, el paquete kexec-tools proporciona todo lo necesario: el binario kexec, el servicio kdump y los archivos de configuración predeterminados.

Info

En versiones modernas como AlmaLinux 9 y 10, kexec-tools suele estar preinstalado y el servicio kdump.service ya está activo por defecto. Puedes verificarlo ejecutando cat /sys/kernel/kexec_crash_loaded; si devuelve 1, los Pasos 2 y 4 se pueden omitir con seguridad.

Info

El paquete crash es la herramienta estándar de Linux para el análisis de vmcore. Instalarlo ahora te ahorrará tiempo cuando realmente necesites inspeccionar un volcado.

Paso 2: Configurar el parámetro de arranque crashkernel

El parámetro crashkernel le indica al kernel cuánta memoria reservar para kdump en Linux en el momento del arranque. Sin esta reserva, el kernel de captura no tiene dónde ejecutarse. Entender cómo configurar correctamente los valores del parámetro crashkernel es esencial: muy poca y el kernel de captura no arrancará; demasiada y desperdiciarás RAM de producción.

2.1 Comprobar la configuración actual

Primero, comprueba si crashkernel ya está configurado:

cat /proc/cmdline | grep crashkernel

Si la salida contiene una entrada crashkernel=, el parámetro ya está configurado. Puedes verificar la cantidad reservada y saltar al Paso 3 si cumple con tus necesidades.

2.2 Configurar el parámetro crashkernel en sistemas basados en GRUB

Ubuntu/Debian:

Antes de modificar la configuración principal de GRUB, comprueba si ya existe un archivo drop-in:

cat /etc/default/grub.d/kdump-tools.cfg

Si el paquete ya ha configurado crashkernel aquí, modifica este archivo en su lugar para evitar entradas duplicadas en grub.cfg. De lo contrario, abre el archivo de valores predeterminados principal de GRUB:

sudo nano /etc/default/grub

Busca la línea GRUB_CMDLINE_LINUX_DEFAULT y añade el parámetro crashkernel. Para la mayoría de los servidores de producción con 4 GB o más de RAM, 256 MB son suficientes para reservar memoria para kdump en Linux:

GRUB_CMDLINE_LINUX_DEFAULT="quiet crashkernel=256M"

Info

Si la línea ya tiene otros parámetros, añade crashkernel=256M después de un espacio; no reemplaces los valores existentes.

Para servidores con menos de 4 GB de RAM, usa crashkernel=128M. Para sistemas con 64 GB o más, considera crashkernel=512M. También puedes usar la sintaxis de escalado automático crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M para configurar los valores del parámetro crashkernel dinámicamente en función de la RAM instalada.

Guarda y cierra el archivo, luego regenera la configuración de GRUB:

sudo update-grub

RHEL/CentOS/AlmaLinux:

Para RHEL/AlmaLinux 8+, el parámetro crashkernel se encuentra en GRUB_CMDLINE_LINUX (sin _DEFAULT). Sin embargo, en sistemas modernos que usan BLS (Boot Loader Specification), la forma más segura y recomendada de actualizar la línea de comandos del kernel es usar grubby en lugar de modificar /etc/default/grub directamente:

sudo grubby --update-kernel=ALL --args="crashkernel=256M"

Si debes modificarlo manualmente a través de las configuraciones de GRUB, edita /etc/default/grub y actualiza GRUB_CMDLINE_LINUX. Luego regenera la configuración (las rutas varían según el modo de arranque):

# Para sistemas BIOS heredados (legacy): sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Para sistemas UEFI (por ejemplo, AlmaLinux): sudo grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg

Warning

Una mala configuración de GRUB puede hacer que el sistema no sea arrancable. Revisa tus entradas dos veces. Si tienes acceso a la consola (IPMI/KVM), tenlo listo.

2.3 Reiniciar para aplicar la reserva de crashkernel

La reserva de memoria crashkernel solo entra en vigor después de un reinicio:

sudo reboot

Después de que el sistema vuelva a arrancar, verifica que la reserva esté activa:

cat /proc/cmdline | grep crashkernel

La salida esperada debe incluir:

crashkernel=256M

También confirma que la memoria se reservó realmente:

sudo dmesg | grep -i "crashkernel reserved"

Deberías ver una línea como:

crashkernel reserved: 0x... - 0x... (NNN MB)

Si la reserva falló (el mensaje dice "crashkernel reservation failed"), es posible que necesites aumentar o disminuir el valor. Este es un paso común de solución de problemas de pánico del kernel en Linux: el kernel no pudo encontrar un bloque contiguo del tamaño solicitado.

Paso 3: Configurar los ajustes del servicio kdump en Linux

Con la memoria reservada, configura dónde y cómo kdump almacena el vmcore.

3.1 Configuración en RHEL/CentOS/AlmaLinux

El archivo de configuración principal es /etc/kdump.conf. Ábrelo:

sudo nano /etc/kdump.conf

Las directivas críticas:

path /var/crash core_collector makedumpfile -l --message-level 7 -d 31

  • path /var/crash: establece el directorio de destino del vmcore. Todos los volcados de fallos aterrizan aquí.
  • core_collector makedumpfile: comprime el volcado y filtra las páginas innecesarias. La bandera -d 31 excluye páginas cero, caché, datos de usuario y páginas libres, reduciendo típicamente un vmcore al 10-20% de la RAM total.

Info

La ruta predeterminada /var/crash es relativa al sistema de archivos raíz. Si tu partición raíz es pequeña, considera apuntar esto a una partición dedicada o a un montaje externo con suficiente espacio.

3.2 Configuración en Ubuntu/Debian

En los sistemas basados en Debian, la configuración de kdump-tools se encuentra en /etc/default/kdump-tools. Ábrelo:

sudo nano /etc/default/kdump-tools

Asegúrate de que estas líneas estén configuradas:

USE_KDUMP=1 KDUMP_COREDIR="/var/crash" KDUMP_CORE_COLLECTOR="makedumpfile -l --message-level 7 -d 31"

USE_KDUMP=1 habilita el servicio kdump. Sin él, el kernel de captura no se cargará en el arranque.

Paso 4: Habilitar e iniciar el servicio kdump

Este es el paso final sobre cómo habilitar kdump en Linux. Habilita el servicio kdump para que el kernel de captura se cargue automáticamente en cada arranque, completando la configuración de kexec/kdump en Linux.

Ubuntu/Debian:

sudo systemctl enable kdump-tools sudo systemctl start kdump-tools

RHEL/CentOS/AlmaLinux:

sudo systemctl enable kdump sudo systemctl start kdump

Verifica que el servicio esté en ejecución:

Ubuntu/Debian:

sudo systemctl status kdump-tools

RHEL/CentOS/AlmaLinux:

sudo systemctl status kdump

La salida esperada debe incluir:

Active: active (exited)

El estado "exited" (salido) es normal: el servicio kdump carga el kernel de captura en la memoria reservada y luego sale. No se ejecuta como un demonio persistente.

Info

Si el servicio no logra iniciarse, ejecuta journalctl -xeu kdump (o kdump-tools en sistemas basados en Debian) para ver el motivo. La causa más común es una reserva de crashkernel faltante o insuficiente; revisa el Paso 2.

Paso 5: Verificación y pruebas

5.1 Verificar que kdump está listo

Confirma que el kernel de captura está cargado y listo para activarse en un pánico del kernel:

cat /sys/kernel/kexec_crash_loaded

Salida esperada:

1

Un valor de 1 significa que el kernel de captura está cargado. Un 0 significa que kdump no está operativo; vuelve atrás y comprueba el estado del servicio y la reserva de crashkernel.

También puedes inspeccionar cuánta memoria se apartó para reservar memoria para kdump en Linux:

cat /sys/kernel/kexec_crash_size

Esto devuelve la reserva en bytes.

5.2 Provocar un fallo de prueba

Warning

El siguiente comando causa un pánico del kernel inmediato. El sistema colapsará, capturará un vmcore y se reiniciará. Nunca ejecutes esto en un servidor de producción durante el horario laboral sin una ventana de mantenimiento. Asegúrate de que todos los servicios críticos estén drenados o de que el servidor esté fuera de la rotación del balanceador de carga.

Habilita los disparadores SysRq y luego fuerza el colapso:

echo 1 | sudo tee /proc/sys/kernel/sysrq echo c | sudo tee /proc/sysrq-trigger

El sistema entrará en pánico. Si kdump está configurado correctamente, el kernel de captura arrancará, escribirá el vmcore en /var/crash y el sistema se reiniciará automáticamente.

Info

Tu sesión SSH se caerá instantáneamente. Espera de 3 a 5 minutos a que se escriba el volcado y el sistema se reinicie completamente antes de intentar reconectarte.

5.3 Confirmar que se capturó el vmcore

Después del reinicio, comprueba /var/crash en busca del volcado:

ls -lh /var/crash/

Salida esperada (el formato varía según la distribución):

Familia RHEL (AlmaLinux/CentOS):

drwxr-xr-x 2 root root 4.0K May 23 14:00 127.0.0.1-2026-05-23-14:00:01/

Dentro de este directorio con marca de tiempo, encontrarás vmcore (el volcado de memoria) y vmcore-dmesg.txt (el registro del kernel).

Familia Debian (Ubuntu/Debian):

drwxr-xr-x 2 root root 4.0K May 23 14:00 202605231400/

Dentro de este directorio, los archivos suelen llamarse dump.<timestamp> y dmesg.<timestamp>.

Comprueba el interior del directorio:

ls -lh /var/crash/*/

Ver estos archivos confirma que tu canalización de volcado de fallos del kernel de Linux está totalmente operativa.

Paso 6: Analizar un archivo vmcore

Capturar un volcado de fallos solo es útil si puedes leerlo. La utilidad crash es la herramienta estándar en la que confían los administradores de Linux para el análisis de vmcore y la solución de problemas de pánico del kernel en Linux.

6.1 Instalar el kernel de depuración (debug)

La herramienta crash requiere los símbolos de depuración de la versión exacta del kernel que entró en pánico.

Ubuntu:

echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ddebs.list sudo apt install ubuntu-dbgsym-keyring sudo apt update sudo apt install linux-image-unsigned-$(uname -r)-dbgsym

Info

Para kernels firmados, los símbolos de depuración se encuentran en el paquete unsigned.

Debian:

echo "deb http://deb.debian.org/debian-debug/ $(lsb_release -cs)-debug main" | sudo tee /etc/apt/sources.list.d/debian-debug.list sudo apt update sudo apt install linux-image-$(uname -r)-dbg

Info

Debes instalar la compilación exacta de los símbolos de depuración. Si no se encuentra el paquete, actualiza tu kernel a la última versión disponible y reinicia.

RHEL/CentOS/AlmaLinux:

sudo dnf --enablerepo='*-debuginfo' install -y kernel-debuginfo-$(uname -r)

Info

Alternativamente, puedes usar sudo dnf debuginfo-install -y kernel-$(uname -r) si el plugin debuginfo-install está disponible.

6.2 Abrir el vmcore con crash

Antes de ejecutar crash, verifica que los símbolos de depuración estén instalados y coincidan con tu versión del kernel para no ejecutarlo a ciegas:

# RHEL/Debian: ls -lh /usr/lib/debug/lib/modules/$(uname -r)/vmlinux # Ubuntu: ls -lh /usr/lib/debug/boot/vmlinux-$(uname -r)

Navega al directorio del volcado de fallos y abre el vmcore (el comando exacto varía según el SO):

RHEL/CentOS/AlmaLinux:

sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore

Debian:

sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/dump.*

Ubuntu:

sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/*/dump.*

La utilidad crash se carga y te introduce en un shell interactivo. Comandos clave para el triaje inicial:

bt # traza inversa (backtrace) de la tarea que provocó el pánico log # búfer de registro del kernel (igual que dmesg en el momento del pánico) ps # lista de procesos en el momento del fallo mod # módulos del kernel cargados sys # información del sistema

Escribe exit o quit para salir del shell de crash.

Info

Comienza con bt para ver la pila de llamadas exacta que desencadenó el pánico. En la mayoría de los casos, esto apunta inmediatamente al módulo o controlador del kernel infractor: la técnica de solución de problemas de pánico del kernel de Linux más directa disponible.

Reversión (Rollback)

Para deshacer la configuración de kdump y recuperar la memoria reservada:

1. Detener y deshabilitar el servicio kdump:

Ubuntu/Debian:

sudo systemctl disable --now kdump-tools

RHEL/CentOS/AlmaLinux:

sudo systemctl disable --now kdump

2. Eliminar el parámetro crashkernel:

Ubuntu/Debian:

Abre el archivo de configuración drop-in:

sudo nano /etc/default/grub.d/kdump-tools.cfg

Elimina el parámetro crashkernel (si lo añadiste manualmente a /etc/default/grub, edita ese archivo en su lugar).

RHEL/CentOS/AlmaLinux:

Abre el archivo de valores predeterminados de GRUB:

sudo nano /etc/default/grub

Elimina crashkernel=256M de la línea GRUB_CMDLINE_LINUX o GRUB_CMDLINE_LINUX_DEFAULT.

Regenerar GRUB:

Ubuntu/Debian:

sudo update-grub

RHEL/CentOS/AlmaLinux:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

3. Reiniciar para liberar la memoria reservada:

sudo reboot

4. Eliminar los paquetes (opcional):

Ubuntu/Debian:

sudo apt remove --purge kdump-tools kexec-tools crash -y

RHEL/CentOS/AlmaLinux:

sudo dnf remove kexec-tools crash -y

Warning

Eliminar kdump significa que el sistema ya no capturará volcados de fallos en los panicos del kernel. Los archivos vmcore existentes en /var/crash no se eliminan; archívalos o elimínalos manualmente si necesitas el espacio en disco.

Resolución de problemas

El servicio kdump no se inicia

Comprueba el journal para conocer el motivo:

journalctl -xeu kdump

Causas comunes:

  • No hay reserva de crashkernel. Verifica con cat /proc/cmdline | grep crashkernel. Si falta, repite el Paso 2.
  • Memoria reservada insuficiente. El kernel de captura necesita suficiente RAM para inicializarse y escribir el volcado. Intenta aumentar el valor (por ejemplo, crashkernel=512M).
  • Conflicto con Secure Boot. Algunas configuraciones de Secure Boot impiden que kexec cargue kernels no firmados. Firma el kernel de captura o desactiva Secure Boot en la BIOS.

No se escribe el vmcore después de un pánico

  • Espacio en disco. Verifica que /var/crash tenga suficiente espacio libre. Un vmcore puede acercarse al tamaño de la RAM física (antes de la compresión de makedumpfile).
  • Ruta incorrecta. Confirma que path en /etc/kdump.conf (o KDUMP_COREDIR en /etc/default/kdump-tools) apunte a un sistema de archivos montado y con permisos de escritura.
  • Denegación de SELinux. En sistemas basados en RHEL, comprueba ausearch -m avc -ts recent en busca de denegaciones relacionadas con kdump.

El sistema se cuelga en lugar de capturar el volcado

Esto suele indicar un problema de hardware o del controlador que impide la transición de kexec/kdump en Linux. Intenta añadir irqpoll nr_cpus=1 reset_devices a la línea de comandos del kernel de kdump en /etc/sysconfig/kdump (RHEL) o /etc/default/kdump-tools (Debian) como KDUMP_CMDLINE_APPEND.

Conclusión

Esto es todo. Crashkernel reserva la memoria, el servicio kdump carga el kernel de captura en el arranque y, en un volcado por pánico del kernel de Linux, el vmcore aterriza en /var/crash, listo para una configuración de volcado de fallos de Linux en la que realmente puedes confiar. Ahora tienes una configuración funcional para habilitar la captura de volcados de fallos de kdump en Linux automáticamente; para una solución de problemas de pánico del kernel de Linux más profunda, alimenta el vmcore a crash y comienza con la traza inversa.

Versión del documento: 1.0
Última actualización: Mayo de 2026
Propietario: Equipo de Documentación Técnica

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • kingdom
  • germany
  • Español
  • French
  • Hrvatska
  • Italiano
  • Poland
  • Slovenski
  • ukraine
  • Türkçe
  • Русский
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA