kdump — это функция ядра Linux , которая создает аварийные дампы в случае сбоя ядра . При запуске kdump экспортирует образ памяти (также известный как vmcore ), который можно проанализировать в целях отладки и определения причины сбоя. К дампу основной памяти , экспортированному как объект исполняемого и связываемого формата (ELF), можно получить доступ либо напрямую через /proc /vmcore во время обработки сбоя ядра, либо он может быть автоматически сохранен в локально доступной файловой системе . на необработанное устройство или в удаленную систему, доступную по сети . [1] [2]
В случае сбоя ядра kdump сохраняет согласованность системы, загружая другое ядро Linux , известное как ядро захвата дампа , и используя его для экспорта и сохранения дампа памяти. В результате система загружается в чистую и надежную среду вместо того, чтобы полагаться на уже поврежденное ядро, которое может вызвать различные проблемы, например, повреждение файловой системы при записи файла дампа памяти. Чтобы реализовать эту схему «двойного ядра», kdump использует kexec для «теплой» загрузки ядра, захватывающего дамп, сразу после сбоя ядра, используя способность kexec загружаться «поверх» текущего работающего ядра, избегая при этом выполнения загрузчика и аппаратного обеспечения. инициализация, выполняемая прошивкой системы ( BIOS или UEFI ). Ядро для захвата дампа может представлять собой либо отдельный образ ядра Linux , созданный специально для этой цели, либо основной образ ядра может быть повторно использован в архитектурах , поддерживающих перемещаемые ядра. [1] [3] [4] [5] : 5–6
Содержимое основной памяти ( ОЗУ ) сохраняется во время загрузки и работы ядра захвата дампа за счет предварительного резервирования небольшого объема ОЗУ, в которое предварительно загружается ядро захвата дампа, поэтому никакая часть ОЗУ, используемая основным ядром, не используется. перезаписывается при обработке сбоя ядра. Этот зарезервированный объем оперативной памяти используется исключительно ядром захвата дампа и в противном случае не используется во время нормальной работы системы. Некоторые архитектуры, включая x86 и ppc64 , требуют небольшой фиксированной части оперативной памяти для загрузки ядра независимо от того, где оно загружено; в этом случае kexec создает копию этой части ОЗУ, чтобы она также была доступна ядру захвата дампа. Размер и необязательное положение зарезервированной части ОЗУ указываются с помощью параметра загрузки ядра крашкернел , а утилита командной строки kexec используется после загрузки основного ядра для предварительной загрузки образа ядра для захвата дампа и связанного с ним образа initrd в зарезервированную часть. оперативной памяти. [1] [3] [4]
Помимо функциональности, входящей в состав ядра Linux, механизм kdump поддерживают дополнительные утилиты пользовательского пространства , включая упомянутую выше утилиту kexec . [1] [4] Помимо официальных утилит, которые предоставляются в виде патча к набору утилит пользовательского пространства kexec, некоторые дистрибутивы Linux предоставляют дополнительные утилиты, упрощающие настройку работы kdump, включая настройку автоматического сохранения файлов дампа памяти. [6] [7] [8] Созданные файлы дампа памяти можно проанализировать с помощью отладчика GNU ( gdb ) или с помощью специальной утилиты аварийного восстановления Red Hat . [9] [10]
Функциональность kdump вместе с kexec была объединена с основной веткой ядра Linux в версии ядра 2.6.13, выпущенной 29 августа 2005 г. [11]