kdump es una característica del núcleo Linux que crea volcados de memoria en el caso de una falla catastrófica 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 bloqueo. Se puede acceder directamente a la imagen volcada de la memoria principal, exportada como un objeto de formato ejecutable y enlazable (ELF) a través de /proc/vmcore durante el manejo de una falla del kernel, o puede guardarse automáticamente en un sistema de archivos accesible localmente, en un dispositivo raw, o en un sistema remoto accesible a través de la red.[1][2]
En el caso de una falla del kernel, kdump preserva la consistencia del sistema al iniciar otro kernel de Linux, que se conoce como kernel de captura de volcado, y usarlo para exportar y guardar un volcado de memoria. Como resultado, el sistema se inicia en un entorno limpio y confiable en lugar de confiar en un kernel que ya se ha bloqueado, lo que puede causar varios problemas, como la corrupción del sistema de archivos al escribir un archivo de volcado de memoria. Para implementar este diseño de "kernel dual", kdump usa kexec para arrancar en el kernel de captura de volcado inmediatamente después de la falla del kernel, usando la capacidad de kexec para arrancar "sobre" el kernel actualmente en ejecución, evitando 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 de captura de volcado puede ser una imagen separada del núcleo Linux construida específicamente para ese propósito, o la imagen del kernel principal puede ser reutilizada en arquitecturas que soportan kernels reubicables.[1][3][4][5]
El contenido de la memoria principal (RAM) se conserva al arrancar y ejecutar el kernel de captura de volcado al reservar una pequeña cantidad de RAM por adelantado, en la cual el kernel de captura de volcado está precargado, por lo que no se utiliza ninguna de las RAM utilizadas por el kernel primario. Se sobrescribe cuando se maneja una falla del kernel. Esta cantidad reservada de RAM es utilizada únicamente por el núcleo de captura de volcado y, de lo contrario, no se utiliza durante la operación normal del sistema. Algunas arquitecturas, incluidas x86 y ppc64, requieren una pequeña porción de RAM de posición fija para arrancar un kernel 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 volcado de captura. 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 kernel crashkernel y kexec. Una utilidad de línea de comandos se usa después de que el núcleo primario se inicia para precargar una imagen de kernel 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 forma parte del núcleo Linux, las utilidades de espacio de usuario adicionales admiten el mecanismo kdump, incluido el kexec utilidad 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 de la operación de kdump, incluida la configuración de 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 de GNU (gdb), o utilizando la utilidad de Red Hat crash.[9][10]
La funcionalidad de kdump, junto con kexec, se fusionó con la línea principal del núcleo Linux en la versión del kernel 2.6.13, que se lanzó el 29 de agosto de 2005.[11]