Kernel/Kdump
Kdump предоставляет возможность получить дамп ядра в случае падения ядра (kernel panic) для последующего анализа разработчиками.
В Альте используется интерфейс на базе дебиановского kdump-tools с утилитой kdump-config.
initrd для kdump, а используется обычный initrd с обычным ядром. Так же не поддерживается дамп по ftp.
Описание используемого механизма ядра: https://www.kernel.org/doc/html/latest/admin-guide/kdump/kdump.html (англ.)
Пример конфигурации системы по шагам
# apt-get update # apt-get install -y kdump-tools
Добавьте параметр crashkernel=256M (сколько памяти резервировать для Kdump ядра) в kernel command line, для этого (при использовании загрузчика grub2) редактируйте файл /etc/sysconfig/grub2 строку GRUB_CMDLINE_LINUX_DEFAULT=, например:
# vim /etc/sysconfig/grub2
GRUB_CMDLINE_LINUX_DEFAULT='panic=10 console=ttyS0 audit=0 crashkernel=256M'
Затем нужно [перегенерировать grub.cfg], чтоб новый параметр применился при следующей загрузке системы:
# update-grub
И включить сервис kdump-tools:
# systemctl enable kdump-tools
После этого можно (нужно) перезагрузить систему (reboot).
Результат работы сервиса можно будет посмотреть командами kdump-config show (выведет больше подробностей) или kdump-config status (кратко) — в их выводе должен быть текст ready to kdump:
# kdump-config status
current state : ready to kdump
Проверка работоспособности Kdump
Системы разные, и после первоначальной установки на всякий случай можно убедиться, что всё работает. Для этого после рубута (при наличии статуса "ready to kdump") искусственно вызовите крэш системы:
# sync # echo 1 > /proc/sys/kernel/sysrq # echo c > /proc/sysrq-trigger
Возникнет kernel panic, после чего система должна загрузиться в dump-capture ядро, которое запишет дамп предыдущего ядра в подкаталог, названный по дате и времени в /var/crash. После этого система сама перезагрузится. Пример:
# ls -l /var/crash/202211220350
total 137928
-rw------- 1 root root 151909 Nov 22 03:50 dmesg.202211220350
-rw-r--r-- 1 root root 141075304 Nov 22 03:50 dump.202211220350
(Файл dump.202211220350 записывается по умолчанию во flattened формате.)
Анализ дампа ядра
Чтоб посмотреть список дампов можно воспользоваться утилитой kdumpctl (работает по аналогии coredumpctl):
# kdumpctl list
DATE TIME VMCOREINFO SIZE
2022-11-22 03:50 OSRELEASE=6.0.9-un-def-alt1 135M
2022-11-22 04:00 OSRELEASE=6.0.9-un-def-alt1 137M
Для анализа необходима утилита crash и -debuginfo пакет для ядра соответствующий по версии упавшему ядру. (Статья по установке -debuginfo пакетов. Учтите, что -debuginfo пакеты для ядра огромны). Например, для un-def ядра:
# apt-get install crash kernel-image-un-def-debuginfo
В -debuginfo пакете находится необходимое для анализа дампа ядро в несжатом виде — vmlinux (в отличии от vmlinuz используемого для загрузки).
Для запуска crash или просмотра dmesg можно воспользоваться kdumpctl. Например, запуск crash для последнего дампа:
# kdumpctl debug
Пример запуска утилиты crash вручную — допустим, у нас дамп для ядра версии 6.0.9-un-def-alt1 (версию ядра можно посмотреть в файле dmesg.* в каталоге с дампом):
# head -1 /var/crash/202211220350/dmesg.* [ 0.000000] Linux version 6.0.9-un-def-alt1 (... # crash /usr/lib/debug/lib/modules/6.0.9-un-def-alt1/vmlinux /var/crash/202211220350/dump.* crash> bt
Документация по утилите crash (англ.): https://crash-utility.github.io/crash_whitepaper.html
Ссылки
Настройка Kdump в других дистрибутивах:
- В Fedora используется расширенный пакет
kexec-toolshttps://fedoraproject.org/wiki/How_to_use_kdump_to_debug_kernel_crashes - В Arch самостоятельная конфигурация https://wiki.archlinux.org/title/Kdump
- В OpenSUSE https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-kexec.html
- В Ubuntu используется
kdump-toolsаналогичные нашим https://ubuntu.com/server/docs/kernel-crash-dump