Это старая версия документа.
Содержание
Отчет о падении ядра
Введение
Отчет о падении ядра является частью содержимого оперативной памяти (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
будет недостаточным. ??? (Once this is done, you must become root, as just using sudo will not be sufficient)
От имени пользователя 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
Resources
Kernel Crash Dump is a vast topic that requires good knowledge of the linux kernel. You can find more information on the topic here :
Kdump kernel documentation.
The crash tool
Analyzing Linux Kernel Crash (Based on Fedora, it still gives a good walkthrough of kernel dump analysis)