kdump es una característica del kernel de Linux que crea volcados de memoria en caso de que se produzca un fallo del kernel . Cuando se activa, kdump exporta una imagen de memoria (también conocida como vmcore ) que se puede analizar con el fin de depurar y determinar la causa de un fallo. Se puede acceder a la imagen de memoria principal volcada , exportada como un objeto de formato ejecutable y enlazable (ELF), ya sea directamente a través de /proc /vmcore durante el manejo de un fallo del kernel, o se puede guardar automáticamente en un sistema de archivos accesible localmente , en un dispositivo sin formato o en un sistema remoto accesible a través de la red . [1] [2]
En caso de un fallo del kernel, kdump preserva la consistencia del sistema al arrancar otro kernel de Linux , conocido como kernel dump-capture , y usarlo para exportar y guardar un volcado de memoria. Como resultado, el sistema arranca en un entorno limpio y confiable en lugar de depender de un kernel que ya está bloqueado y que puede causar varios problemas, como causar corrupción del sistema de archivos mientras se escribe un archivo de volcado de memoria. Para implementar este diseño de "núcleo dual", kdump usa kexec para el arranque "en caliente" en el kernel dump-capture inmediatamente después del fallo del kernel, usando la capacidad de kexec para arrancar "sobre" el kernel que se está ejecutando actualmente mientras evita la ejecución de un cargador de arranque y la inicialización de hardware realizada por el firmware del sistema ( BIOS o UEFI ). Un kernel dump-capture puede ser una imagen de kernel de Linux separada creada específicamente para ese propósito, o la imagen de kernel principal puede reutilizarse en arquitecturas que admitan kernels reubicables . [1] [3] [4] [5] : 5–6
El contenido de la memoria principal ( RAM ) se conserva durante el arranque y la ejecución del núcleo de captura de volcado reservando una pequeña cantidad de RAM de antemano, en la que se precarga el núcleo de captura de volcado para que no se sobrescriba nada de la RAM utilizada por el núcleo principal cuando se maneja una falla del núcleo. Esta cantidad reservada de RAM es utilizada únicamente por el núcleo de captura de volcado y no se utiliza durante el funcionamiento normal del sistema. Algunas arquitecturas, incluidas x86 y ppc64 , requieren una pequeña porción de RAM de posición fija para arrancar un núcleo independientemente de dónde se cargue; en este caso, kexec crea una copia de esa porción de RAM para que también sea accesible para el núcleo de captura de volcado. El tamaño y la posición opcional de la porción reservada de RAM se especifican a través del parámetro de arranque del núcleo crashkernel , y la utilidad de línea de comandos kexec se utiliza después de que se inicia el núcleo principal para precargar una imagen de núcleo de captura de volcado y su imagen initrd asociada en la porción reservada de RAM. [1] [3] [4]
Además de la funcionalidad que es parte del núcleo de Linux, utilidades de espacio de usuario adicionales soportan el mecanismo kdump, incluyendo la utilidad kexec mencionada anteriormente. [1] [4] Además de las utilidades oficiales, que se proporcionan como un parche para el conjunto de utilidades de espacio de usuario de kexec, algunas distribuciones de Linux proporcionan utilidades adicionales que simplifican la configuración del funcionamiento de kdump, incluyendo la configuración del guardado automático de archivos de volcado de memoria. [6] [7] [8] Los archivos de volcado de memoria creados se pueden analizar utilizando el depurador GNU ( gdb ), o utilizando la utilidad de fallos dedicada de Red Hat . [9] [10]
Kdump reemplazó a la obsoleta herramienta Linux Kernel Crash Dumps (LKCD), que también escribía el contenido de la memoria en caso de falla. [11] Kdump presenta una utilidad más eficiente y escalable que LKCD. [12]
La funcionalidad de kdump, junto con kexec, se fusionó con la línea principal del kernel de Linux en la versión 2.6.13 del kernel, que se lanzó el 29 de agosto de 2005. [13]