Kernel/Kdump: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 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]. (В отличии от дебиановких утилит у нас нет генерации специального мини-initrd для kdump, а используется обычный initrd с обычным ядром.)
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 uodate
   <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 после чего система должна загрузится в dump-capture ядро, которое запишет дамп предыдущего ядра в подкаталог названый по дате и времени в <code>/var/crash</code>. Пример:
Возникнет 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''' в других дистрибутивах:
* В Федоре используется расширенный пакет <code>kexec-tools</code> https://fedoraproject.org/wiki/How_to_use_kdump_to_debug_kernel_crashes
* В Fedora используется расширенный пакет <code>kexec-tools</code> https://fedoraproject.org/wiki/How_to_use_kdump_to_debug_kernel_crashes
* В Арче самостоятельная конфигурация https://wiki.archlinux.org/title/Kdump
* В 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 в других дистрибутивах: