Kernel/Kdump: различия между версиями
Vt (обсуждение | вклад) Нет описания правки |
Vt (обсуждение | вклад) |
||
(не показано 11 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
Kdump предоставляет возможность получить дамп ядра в случае kernel panic. В Альте используется интерфейс на базе дебиановского [https://manpages.debian.org/testing/kdump-tools/kdump-tools.5.en.html kdump-tools] с утилитой [https://manpages.debian.org/testing/kdump-tools/kdump-config.8.en.html kdump-config]. | Kdump предоставляет возможность получить дамп ядра в случае падения ядра (kernel panic) для последующего анализа разработчиками. | ||
В Альте используется интерфейс на базе дебиановского [https://manpages.debian.org/testing/kdump-tools/kdump-tools.5.en.html kdump-tools] с утилитой [https://manpages.debian.org/testing/kdump-tools/kdump-config.8.en.html kdump-config]. | |||
{{Note| В отличии от дебиановских утилит у нас нет генерации специального мини-<code>initrd</code> для kdump, а используется обычный <code>initrd</code> с обычным ядром. Так же не поддерживается дамп по ftp.}} | |||
Описание используемого механизма ядра: https://www.kernel.org/doc/html/latest/admin-guide/kdump/kdump.html (англ.) | Описание используемого механизма ядра: https://www.kernel.org/doc/html/latest/admin-guide/kdump/kdump.html (англ.) | ||
Строка 5: | Строка 9: | ||
= Пример конфигурации системы по шагам = | = Пример конфигурации системы по шагам = | ||
# apt-get | <span style="color:blue">#</span> '''apt-get update''' | ||
# apt-get install -y kdump-tools | <span style="color:blue">#</span> '''apt-get install''' -y kdump-tools | ||
Добавьте параметр <code>crashkernel=256M</code> в kernel command line, для этого (при использовании загрузчика grub2) редактируйте файл <code>/etc/sysconfig/grub2</code> строку <code>GRUB_CMDLINE_LINUX_DEFAULT=</code>, например: | Добавьте параметр <code>crashkernel=256M</code> (сколько памяти резервировать для Kdump ядра) в kernel command line, для этого (при использовании загрузчика grub2) редактируйте файл <code>/etc/sysconfig/grub2</code> строку <code>GRUB_CMDLINE_LINUX_DEFAULT=</code>, например: | ||
# vim /etc/sysconfig/grub2 | <span style="color:blue">#</span> '''vim''' /etc/sysconfig/grub2 | ||
GRUB_CMDLINE_LINUX_DEFAULT='panic=10 console=ttyS0 audit=0 '''crashkernel=256M'''' | GRUB_CMDLINE_LINUX_DEFAULT='panic=10 console=ttyS0 audit=0 '''crashkernel=256M'''' | ||
Затем нужно [перегенерировать grub.cfg], чтоб новый параметр применился при следующей загрузке системы: | Затем нужно [перегенерировать grub.cfg], чтоб новый параметр применился при следующей загрузке системы: | ||
# update-grub | <span style="color:blue">#</span> '''update-grub''' | ||
И включить сервис <code>kdump-tools</code>: | И включить сервис <code>kdump-tools</code>: | ||
# systemctl enable kdump-tools | <span style="color:blue">#</span> '''systemctl''' enable kdump-tools | ||
После этого можно (нужно) перезагрузить систему (reboot). | После этого можно (нужно) перезагрузить систему (reboot). | ||
Строка 25: | Строка 29: | ||
Результат работы сервиса можно будет посмотреть командами <code>kdump-config show</code> (выведет больше подробностей) или <code>kdump-config status</code> (кратко) — в их выводе должен быть текст <code>ready to kdump</code>: | Результат работы сервиса можно будет посмотреть командами <code>kdump-config show</code> (выведет больше подробностей) или <code>kdump-config status</code> (кратко) — в их выводе должен быть текст <code>ready to kdump</code>: | ||
# kdump-config status | <span style="color:blue">#</span> '''kdump-config''' status | ||
current state : ready to kdump | current state : ready to kdump | ||
= Проверка работоспособности Kdump = | = Проверка работоспособности Kdump = | ||
Системы разные и после первоначальной установки на всякий случай можно убедиться, что всё работает. Для этого после рубута (при наличии статуса "ready to kdump") искусственно вызовите крэш системы: | Системы разные, и после первоначальной установки на всякий случай можно убедиться, что всё работает. Для этого после рубута (при наличии статуса "ready to kdump") искусственно вызовите крэш системы: | ||
# sync | <span style="color:blue">#</span> '''sync''' | ||
# echo 1 > /proc/sys/kernel/sysrq | <span style="color:blue">#</span> '''echo''' 1 > /proc/sys/kernel/sysrq | ||
# echo c > /proc/sysrq-trigger | <span style="color:blue">#</span> '''echo''' c > /proc/sysrq-trigger | ||
Возникнет kernel panic после чего система должна | Возникнет kernel panic, после чего система должна загрузиться в dump-capture ядро, которое запишет дамп предыдущего ядра в подкаталог, названный по дате и времени в <code>/var/crash</code>. После этого система сама перезагрузится. Пример: | ||
# ls -l /var/crash/202211220350 | <span style="color:blue">#</span> '''ls''' -l /var/crash/202211220350 | ||
total 137928 | total 137928 | ||
-rw------- 1 root root 151909 Nov 22 03:50 dmesg.202211220350 | -rw------- 1 root root 151909 Nov 22 03:50 dmesg.202211220350 | ||
-rw-r--r-- 1 root root 141075304 Nov 22 03:50 dump.202211220350 | -rw-r--r-- 1 root root 141075304 Nov 22 03:50 dump.202211220350 | ||
(Файл <code>dump.202211220350</code> записывается по умолчанию во flattened формате.) | |||
= Анализ дампа ядра = | |||
Чтоб посмотреть список дампов можно воспользоваться утилитой <code>kdumpctl</code> (работает по аналогии <code>coredumpctl</code>): | |||
<span style="color:blue">#</span> '''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 | |||
Для анализа необходима утилита [https://crash-utility.github.io/ <code>crash</code>] и <code>-debuginfo</code> пакет для ядра соответствующий по версии упавшему ядру. ([[Debuginfo|Статья по установке <code>-debuginfo</code> пакетов]]. Учтите, что <code>-debuginfo</code> пакеты для ядра огромны). Например, для ''un-def'' ядра: | |||
<span style="color:blue">#</span> '''apt-get install''' crash kernel-image-un-def-debuginfo | |||
В <code>-debuginfo</code> пакете находится необходимое для анализа дампа ядро в ''несжатом'' виде — <code>vmlinux</code> (в отличии от <code>vmlinuz</code> используемого для загрузки). | |||
Для запуска <code>crash</code> или просмотра ''dmesg'' можно воспользоваться <code>kdumpctl</code>. Например, запуск <code>crash</code> для последнего дампа: | |||
<span style="color:blue">#</span> '''kdumpctl''' debug | |||
Пример запуска утилиты <code>crash</code> вручную — допустим, у нас дамп для ядра версии <code>6.0.9-un-def-alt1</code> (версию ядра можно посмотреть в файле <code>dmesg.*</code> в каталоге с дампом): | |||
<span style="color:blue">#</span> '''head''' -1 /var/crash/202211220350/dmesg.* | |||
[ 0.000000] Linux version 6.0.9-un-def-alt1 (... | |||
<span style="color:blue">#</span> '''crash''' /usr/lib/debug/lib/modules/6.0.9-un-def-alt1/vmlinux /var/crash/202211220350/dump.* | |||
<span style="color:green">crash></span> bt | |||
Документация по утилите '''crash''' (англ.): https://crash-utility.github.io/crash_whitepaper.html | |||
= Ссылки = | = Ссылки = | ||
Настройка '''Kdump''' в других дистрибутивах: | Настройка '''Kdump''' в других дистрибутивах: | ||
* В | * В Fedora используется расширенный пакет <code>kexec-tools</code> https://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 используется <code>kdump-tools</code> аналогичные нашим https://ubuntu.com/server/docs/kernel-crash-dump |
Текущая версия от 06:17, 26 ноября 2022
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-tools
https://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