Содержание
Отчет о падении ядра
Введение
Отчет о падении ядра является частью содержимого оперативной памяти (RAM), которая копируется на диск всякий раз, когда выполнение ядра прерывается. Следующие события могут стать причиной остановки ядра:
Критическая ошибка ядра (Kernel Panic)
Незамаскированное прерывание (NMI)
Фатальная ошибка проверки машины (MCE)
Отказ оборудования
Ручное вмешательство
Некоторые из этих событий (паника, NMI) ядро обрабатывает автоматически и запускает механизм сохранения отчета через kexec. В других случаях требуется ручное вмешательство для захвата памяти. Всякий раз как что-то из перечисленного происходит, важно найти основную причину с целью предотвращения такого события снова. Причина может быть определена с помощью инспектирования содержимого памяти.
Механизм отчета о падении ядра
Когда происходит критическая ошибка ядра, ядро полагается на механизм kexec для быстрой перезагрузки новой копии ядра в предварительно зарезервированную секцию памяти, которая выделяется при загрузке системы. Это позволяет существующей памяти остаться нетронутой с целью безопасного копирования ее содержимого в файл.
Установка
Утилита сохранения отчета о падении ядра устанавливается следующей командой:
sudo apt-get install linux-crashdump
После этого потребуется перезагрузка.
Настройка
Никакой дальнейшей настройки не требуется чтобы разрешить механизм отчета о падении ядра.
Проверка
Для подтверждения, что механизм отчета о падении ядра доступен, надо проверить несколько вещей. Во-первых, убедитесь, что указан загрузочный параметр crashkernel. (заметьте, что строка внизу разделена на две для сохранения форматирования документа):
cat /proc/cmdline BOOT_IMAGE=/vmlinuz-3.2.0-17-server root=/dev/mapper/PreciseS-root ro crashkernel=384M-2G:64M,2G-:128M
Параметр crashkernel имеет следующий синтаксис:
crashkernel=<range1>:<size1>[,<range2>:<size2>,...][@offset] range=start-[end] 'start' is inclusive and 'end' is exclusive.
Таким образом с параметром crashkernel, найденным в файле /proc/cmdline мы имеем:
crashkernel=384M-2G:64M,2G-:128M
Значение выше означает:
если оперативная память меньше 384МБ, то ничего не резервировать (это вариант «спасения»)
если оперативная память между 384МБ и 2ГБ (привилегированная), то зарезервировать 64МБ
если оперативная память больше 2ГБ, то зарезервировать 128МБ
Во-вторых, убедитесь, что ядро зарезервировало требуемую память для kdump ядра, выполнив:
dmesg | grep -i crash ... [ 0.000000] Reserving 64MB of memory at 800MB for crashkernel (System RAM: 1023MB)
Проверка механизма отчета о падении ядра
Убедитесь, что механизм SysRQ включен, посмотрев значение параметра ядра /proc/sys/kernel/sysrq:
cat /proc/sys/kernel/sysrq
Если возвращается значение 0, свойство отключено. Включите его следующей командой:
sudo sysctl -w kernel.sysrq=1
Как только закончите с этим, вам придется стать суперпользователем (root), поскольку будет недостаточно использовать только sudo
.
От имени пользователя root вам нужно выполнить команду echo c > /proc/sysrq-trigger
. Если вы используете сетевое соединение, вы потеряете связь с системой. Именно поэтому лучше проводить тест с системной консоли. Это позволит сделать процесс отчета о падении ядра видимым.
Типичный вывод теста будет выглядеть следующим образом:
sudo -s [sudo] password for ubuntu: # echo c > /proc/sysrq-trigger [ 31.659002] SysRq : Trigger a crash [ 31.659749] BUG: unable to handle kernel NULL pointer dereference at (null) [ 31.662668] IP: [<ffffffff8139f166>] sysrq_handle_crash+0x16/0x20 [ 31.662668] PGD 3bfb9067 PUD 368a7067 PMD 0 [ 31.662668] Oops: 0002 [#1] SMP [ 31.662668] CPU 1 ....
Дальнейший вывод отрезан, но вы можете посмотреть перезагрузку системы и где-нибудь в журнале вы сможете найти следующую строчку:
Begin: Saving vmcore from kernel crash ...
После завершения система перезагрузится в нормальный рабочий режим. После чего вы сможете найти файл отчета о падении ядра в каталоге /var/crash:
ls /var/crash linux-image-3.0.0-12-server.0.crash
Ссылки
Отчет о падении ядра - обширная тема, требующая хорошего знания ядра линукс. Вы сможете найти больше информации по следующим ссылкам:
Анализ падений ядра линукс (Основано на дистрибутиве Fedora, однако предоставляет хороший критический анализ исследований отчетов падения ядра)