EUR
european

EUR

usa

USD

Ex. VAT Ex. VAT 0%

Увімкнення Kdump у Linux: дамп ядра при kernel panic

Рівень: Середній / Старший
Орієнтовний час: ~30 хвилин
Мета: Налаштувати захоплення дампів пам'яті kdump для kernel panic, що дозволяє надійний пост-мортем аналіз збоїв на продакшені. Цей посібник пояснює, як увімкнути kdump у Linux, охоплюючи повне налаштування linux crash dump від резервування пам'яті до аналізу vmcore.

Вступ

Kernel panic зупиняє систему, і без crash dump ви не маєте жодних даних для роботи. Kdump — стандартний фреймворк дампів пам'яті (crash dump) ядра Linux — вирішує це: він попередньо завантажує ядро захоплення (capture kernel) у зарезервовану пам'ять, і коли основне ядро зазнає паніки, kexec завантажує це ядро захоплення для запису повного образу пам'яті (vmcore) на диск. У цьому посібнику ви дізнаєтесь, як увімкнути kdump у Linux для захоплення dump під час linux kernel panic на системах Ubuntu, Debian та RHEL. Ми покажемо вам точно, як увімкнути kdump на системах Linux, включаючи кроки пост-мортем аналізу vmcore в Linux.

Що таке Kdump?

Kdump — це механізм створення дампів пам'яті ядра під час збоїв, який використовує kexec для завантаження вторинного ядра захоплення із зарезервованої області пам'яті, коли основне ядро зазнає паніки. Ядро захоплення працює з обмеженою пам'яттю (встановленою параметром завантаження crashkernel) і записує образ пам'яті ядра, що зазнало збою, на диск як vmcore — повний файл дампу пам'яті, який можна проаналізувати за допомогою утиліти crash або gdb. Служба kdump (kdump.service на RHEL або kdump-tools.service на системах Debian) керує завантаженням ядра захоплення під час завантаження системи.

Основні компоненти:

  • Kexec — системний виклик та інструмент користувацького простору, який завантажує ядро захоплення в зарезервовану пам'ять.
  • Crashkernel — параметр завантаження, який повідомляє основному ядру, скільки оперативної пам'яті зарезервувати для роботи kdump (наприклад, crashkernel=256M).
  • Vmcore — вихідний файл, що містить повний дамп пам'яті, який за замовчуванням записується в /var/crash.
  • /var/crash — каталог за замовчуванням, де kdump зберігає файли vmcore після паніки ядра.

Вимоги

Перед початком переконайтеся, що виконані такі умови:

  • Операційна система: Ubuntu 22.04/24.04 LTS, Debian 12/13, або RHEL/CentOS/AlmaLinux 9/10 (Протестовано та перевірено на Ubuntu 24.04, Debian 13 та AlmaLinux 10).
  • Доступ: sudo або root доступ до сервера.
  • RAM: Мінімум 2 ГБ загальної пам'яті. Kdump резервує частину системної пам'яті (зазвичай 256 МБ) для ядра захоплення — системам з малим обсягом пам'яті може не вистачити запасу.
  • Дисковий простір: Щонайменше стільки ж вільного місця у /var/crash, скільки у вашій системі оперативної пам'яті (vmcore може бути розміром із фізичну пам'ять).
  • Необхідні знання: впевнене використання командного рядка Linux, базове редагування файлів та знайомство з параметрами завантаження GRUB.
  • Вікно для перезавантаження: Налаштування параметра crashkernel вимагає перезавантаження для набуття чинності.

Крок 1: Встановлення пакетів kdump та kexec

Kdump покладається на kexec-tools (компонент kexec kdump користувацького простору) та специфічні для дистрибутива допоміжні утиліти.

Ubuntu/Debian:

sudo apt update && sudo apt install kdump-tools kexec-tools crash -y

Під час інтерактивного встановлення на Ubuntu може з'явитися запит debconf з проханням автоматично налаштувати параметр crashkernel. Виберіть Так, якщо запитають. Якщо запит не з'являється (наприклад, у неінтерактивному режимі), crashkernel налаштовується автоматично через drop-in файл. Якщо вам потрібно пізніше налаштувати значення, Крок 2 охоплює ручне налаштування.

RHEL/CentOS/AlmaLinux:

sudo dnf install kexec-tools crash -y

На системах на базі RHEL пакет kexec-tools надає все необхідне: бінарний файл kexec, службу kdump та файли конфігурації за замовчуванням.

Info

На сучасних версіях, таких як AlmaLinux 9 і 10, kexec-tools зазвичай попередньо встановлено, а служба kdump.service вже активна за замовчуванням. Ви можете перевірити це, запустивши cat /sys/kernel/kexec_crash_loaded — якщо він повертає 1, Кроки 2 і 4 можна безпечно пропустити.

Info

Пакет crash є стандартним інструментом Linux для аналізу vmcore. Його встановлення зараз заощадить час, коли вам дійсно знадобиться перевірити дамп.

Крок 2: Налаштування параметра завантаження crashkernel

Параметр crashkernel повідомляє ядру, скільки пам'яті потрібно зарезервувати для kdump під час завантаження. Без цього резервування ядро захоплення не матиме де працювати. Розуміння того, як правильно налаштувати значення параметра crashkernel, є важливим — занадто мало, і ядро захоплення не завантажиться; занадто багато, і ви змарнуєте оперативну пам'ять продакшену.

2.1 Перевірка поточної конфігурації

Спочатку перевірте, чи вже встановлено crashkernel:

cat /proc/cmdline | grep crashkernel

Якщо вивід містить запис crashkernel=, параметр уже налаштовано. Ви можете перевірити зарезервований обсяг і перейти до Кроку 3, якщо він відповідає вашим потребам.

2.2 Налаштування параметра crashkernel на системах з GRUB

Ubuntu/Debian:

Перш ніж змінювати основну конфігурацію GRUB, перевірте, чи вже існує drop-in файл:

cat /etc/default/grub.d/kdump-tools.cfg

Якщо пакет вже налаштував crashkernel тут, змініть цей файл, щоб запобігти дублюванню записів у grub.cfg. В іншому випадку відкрийте основний файл за замовчуванням GRUB:

sudo nano /etc/default/grub

Знайдіть рядок GRUB_CMDLINE_LINUX_DEFAULT і додайте параметр crashkernel. Для більшості продакшен-серверів з 4 ГБ або більше оперативної пам'яті 256 МБ достатньо для резервування пам'яті для kdump у Linux:

GRUB_CMDLINE_LINUX_DEFAULT="quiet crashkernel=256M"

Info

Якщо в рядку вже є інші параметри, додайте crashkernel=256M після пробілу — не замінюйте існуючі значення.

Для серверів з менш ніж 4 ГБ оперативної пам'яті використовуйте crashkernel=128M. Для систем з 64 ГБ або більше розгляньте crashkernel=512M. Ви також можете використовувати синтаксис автоматичного масштабування crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M для динамічного налаштування значень параметра crashkernel на основі встановленої оперативної пам'яті.

Збережіть і закрийте файл, потім згенеруйте конфігурацію GRUB:

sudo update-grub

RHEL/CentOS/AlmaLinux:

Для RHEL/AlmaLinux 8+ параметр crashkernel знаходиться в GRUB_CMDLINE_LINUX (без _DEFAULT). Однак на сучасних системах, що використовують BLS (Boot Loader Specification), найбезпечнішим і рекомендованим способом оновлення командного рядка ядра є використання grubby замість прямого редагування /etc/default/grub:

sudo grubby --update-kernel=ALL --args="crashkernel=256M"

Якщо вам обов'язково потрібно змінити його вручну через конфігурації GRUB, відредагуйте /etc/default/grub і оновіть GRUB_CMDLINE_LINUX. Потім згенеруйте конфігурацію (шляхи відрізняються залежно від режиму завантаження):

# Для застарілих систем BIOS: sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Для систем UEFI (наприклад, AlmaLinux): sudo grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg

Warning

Неправильна конфігурація GRUB може зробити систему незавантажуваною. Двічі перевірте свої записи. Якщо у вас є доступ до консолі (IPMI/KVM), тримайте його готовим.

2.3 Перезавантаження для застосування резервування crashkernel

Резервування пам'яті crashkernel набуває чинності лише після перезавантаження:

sudo reboot

Після того, як система знову запрацює, переконайтеся, що резервування активне:

cat /proc/cmdline | grep crashkernel

Очікуваний вивід включає:

crashkernel=256M

Також підтвердіть, що пам'ять була дійсно зарезервована:

sudo dmesg | grep -i "crashkernel reserved"

Ви повинні побачити рядок на зразок:

crashkernel reserved: 0x... - 0x... (NNN MB)

Якщо резервування не вдалося (повідомлення говорить "crashkernel reservation failed"), вам може знадобитися збільшити або зменшити значення. Це поширений крок у вирішенні проблем (troubleshooting) паніки ядра Linux — ядро не змогло знайти безперервний блок запитаного розміру.

Крок 3: Налаштування служби kdump

Маючи зарезервовану пам'ять, налаштуйте, де і як kdump зберігає vmcore.

3.1 Конфігурація RHEL/CentOS/AlmaLinux

Основний файл конфігурації — /etc/kdump.conf. Відкрийте його:

sudo nano /etc/kdump.conf

Критичні директиви:

path /var/crash core_collector makedumpfile -l --message-level 7 -d 31

  • path /var/crash — встановлює цільовий каталог для vmcore. Всі дампи збоїв потрапляють сюди.
  • core_collector makedumpfile — стискає дамп і фільтрує непотрібні сторінки. Прапорець -d 31 виключає нульові сторінки, кеш, дані користувачів та вільні сторінки — зазвичай зменшуючи vmcore до 10-20% загальної оперативної пам'яті.

Info

Шлях за замовчуванням /var/crash є відносним до кореневої файлової системи. Якщо ваша коренева розділ мала, розгляньте можливість вказати це на виділений розділ або зовнішнє монтування з достатнім простором.

3.2 Конфігурація Ubuntu/Debian

На системах на базі Debian конфігурація kdump-tools знаходиться у /etc/default/kdump-tools. Відкрийте його:

sudo nano /etc/default/kdump-tools

Переконайтеся, що встановлені такі рядки:

USE_KDUMP=1 KDUMP_COREDIR="/var/crash" KDUMP_CORE_COLLECTOR="makedumpfile -l --message-level 7 -d 31"

USE_KDUMP=1 вмикає службу kdump. Без цього ядро захоплення не буде завантажено під час запуску системи.

Крок 4: Увімкнення та запуск служби kdump

Це останній крок у тому, як увімкнути kdump в Linux. Увімкніть службу kdump, щоб ядро захоплення завантажувалося автоматично під час кожного запуску, завершуючи налаштування kexec kdump у Linux.

Ubuntu/Debian:

sudo systemctl enable kdump-tools sudo systemctl start kdump-tools

RHEL/CentOS/AlmaLinux:

sudo systemctl enable kdump sudo systemctl start kdump

Перевірте, чи працює служба:

Ubuntu/Debian:

sudo systemctl status kdump-tools

RHEL/CentOS/AlmaLinux:

sudo systemctl status kdump

Очікуваний вивід включає:

Active: active (exited)

Стан "exited" є нормальним — служба kdump завантажує ядро захоплення в зарезервовану пам'ять і потім завершує роботу. Вона не працює як постійний демон.

Info

Якщо служба не запускається, запустіть journalctl -xeu kdump (або kdump-tools на системах на базі Debian), щоб дізнатися причину. Найпоширенішою причиною є відсутнє або недостатнє резервування crashkernel — поверніться до Кроку 2.

Крок 5: Перевірка та тестування

5.1 Перевірка готовності kdump

Переконайтеся, що ядро захоплення завантажено та готове спрацювати при kernel panic:

cat /sys/kernel/kexec_crash_loaded

Очікуваний вивід:

1

Значення 1 означає, що ядро захоплення завантажено. Значення 0 означає, що kdump не працює — поверніться і перевірте стан служби та резервування crashkernel.

Ви також можете перевірити, скільки пам'яті було виділено для резервування пам'яті для kdump у Linux:

cat /sys/kernel/kexec_crash_size

Це повертає резервування в байтах.

5.2 Виклик тестового збою

Warning

Наступна команда викликає миттєву паніку ядра. Система зруйнується, захопить vmcore і перезавантажиться. Ніколи не виконуйте це на продакшен-сервері під час робочих годин без вікна обслуговування. Переконайтеся, що всі критичні служби або виведені з ладу, або сервер виведено з ротації балансувальника навантаження.

Увімкніть тригери SysRq, потім викличте збій:

echo 1 | sudo tee /proc/sys/kernel/sysrq echo c | sudo tee /proc/sysrq-trigger

Система зазнає паніки. Якщо kdump налаштовано правильно, ядро захоплення завантажується, записує vmcore в /var/crash, і система автоматично перезавантажується.

Info

Ваша сесія SSH миттєво перерветься. Зачекайте 3–5 хвилин, поки дамп буде записано, а система повністю перезавантажиться, перш ніж намагатися підключитися знову.

5.3 Підтвердження захоплення vmcore

Після перезавантаження перевірте /var/crash на наявність дампу:

ls -lh /var/crash/

Очікуваний вивід (формат залежить від дистрибутива):

Сімейство RHEL (AlmaLinux/CentOS):

drwxr-xr-x 2 root root 4.0K May 23 14:00 127.0.0.1-2026-05-23-14:00:01/

Всередині цього каталогу з часовою міткою ви знайдете vmcore (дамп пам'яті) та vmcore-dmesg.txt (журнал ядра).

Сімейство Debian (Ubuntu/Debian):

drwxr-xr-x 2 root root 4.0K May 23 14:00 202605231400/

Всередині цього каталогу файли зазвичай називаються dump.<timestamp> та dmesg.<timestamp>.

Перевірте всередині каталогу:

ls -lh /var/crash/*/

Наявність цих файлів підтверджує, що ваш конвеєр дампів пам'яті ядра Linux повністю працездатний.

Крок 6: Аналіз файлу vmcore

Захоплення дампу збою корисне лише в тому випадку, якщо ви можете його прочитати. Утиліта crash — це стандартний інструмент для аналізу vmcore, на який покладаються адміністратори Linux для вирішення проблем (troubleshooting) паніки ядра Linux.

6.1 Встановлення debug ядра

Інструмент crash вимагає символів налагодження (debug symbols) для тієї самої версії ядра, яка зазнала паніки.

Ubuntu:

echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ddebs.list sudo apt install ubuntu-dbgsym-keyring sudo apt update sudo apt install linux-image-unsigned-$(uname -r)-dbgsym

Info

Для підписаних ядер символи налагодження знаходяться в пакеті unsigned.

Debian:

echo "deb http://deb.debian.org/debian-debug/ $(lsb_release -cs)-debug main" | sudo tee /etc/apt/sources.list.d/debian-debug.list sudo apt update sudo apt install linux-image-$(uname -r)-dbg

Info

Ви повинні встановити точну збірку символів налагодження. Якщо пакет не знайдено, оновіть ядро до останньої доступної версії та перезавантажте систему.

RHEL/CentOS/AlmaLinux:

sudo dnf --enablerepo='*-debuginfo' install -y kernel-debuginfo-$(uname -r)

Info

Альтернативно, ви можете використати sudo dnf debuginfo-install -y kernel-$(uname -r), якщо доступний плагін debuginfo-install.

6.2 Відкриття vmcore за допомогою crash

Перед запуском crash перевірте наявність файлу vmlinux, щоб не запускати команду наосліп і одразу бачити, чи збігаються символи:

# RHEL/Debian: ls -lh /usr/lib/debug/lib/modules/$(uname -r)/vmlinux # Ubuntu: ls -lh /usr/lib/debug/boot/vmlinux-$(uname -r)

Перейдіть до каталогу дампу збою та відкрийте vmcore (точна команда залежить від ОС):

RHEL/CentOS/AlmaLinux:

sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore

Debian:

sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/dump.*

Ubuntu:

sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/*/dump.*

Утиліта crash завантажується і переводить вас в інтерактивну оболонку. Основні команди для початкового сортування (triage):

bt # backtrace завдання, що спричинило паніку log # буфер журналу ядра (те саме, що dmesg на момент паніки) ps # список процесів на момент збою mod # завантажені модулі ядра sys # системна інформація

Введіть exit або quit, щоб вийти з оболонки crash.

Info

Почніть з bt, щоб побачити точний стек викликів, який спровокував паніку. У більшості випадків це одразу вказує на проблемний модуль або драйвер ядра — найпряміша доступна техніка вирішення проблем паніки ядра Linux.

Відкат змін

Щоб скасувати налаштування kdump та звільнити зарезервовану пам'ять:

1. Зупиніть та вимкніть службу kdump:

Ubuntu/Debian:

sudo systemctl disable --now kdump-tools

RHEL/CentOS/AlmaLinux:

sudo systemctl disable --now kdump

2. Видаліть параметр crashkernel:

Ubuntu/Debian:

Відкрийте drop-in конфігураційний файл:

sudo nano /etc/default/grub.d/kdump-tools.cfg

Видаліть параметр crashkernel (якщо ви додавали його до /etc/default/grub вручну, відредагуйте той файл).

RHEL/CentOS/AlmaLinux:

Відкрийте файл GRUB за замовчуванням:

sudo nano /etc/default/grub

Видаліть crashkernel=256M з рядка GRUB_CMDLINE_LINUX або GRUB_CMDLINE_LINUX_DEFAULT.

Згенеруйте GRUB:

Ubuntu/Debian:

sudo update-grub

RHEL/CentOS/AlmaLinux:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

3. Перезавантажте, щоб звільнити зарезервовану пам'ять:

sudo reboot

4. Видаліть пакети (необов'язково):

Ubuntu/Debian:

sudo apt remove --purge kdump-tools kexec-tools crash -y

RHEL/CentOS/AlmaLinux:

sudo dnf remove kexec-tools crash -y

Warning

Видалення kdump означає, що система більше не буде захоплювати дампи збоїв під час паніки ядра. Будь-які існуючі файли vmcore у /var/crash не видаляються — архівуйте або видаляйте їх вручну, якщо вам потрібен дисковий простір.

Вирішення проблем

Служба kdump не запускається

Перевірте журнал, щоб дізнатися причину:

journalctl -xeu kdump

Поширені причини:

  • Немає резервування crashkernel. Перевірте за допомогою cat /proc/cmdline | grep crashkernel. Якщо відсутнє, повторіть Крок 2.
  • Недостатньо зарезервованої пам'яті. Ядру захоплення потрібно достатньо оперативної пам'яті для ініціалізації та запису дампу. Спробуйте збільшити значення (наприклад, crashkernel=512M).
  • Конфлікт Secure Boot. Деякі конфігурації Secure Boot не дозволяють kexec завантажувати непідписані ядра. Або підпишіть ядро захоплення, або вимкніть Secure Boot в BIOS.

Vmcore не записується після паніки

  • Дисковий простір. Переконайтеся, що /var/crash має достатньо вільного місця. Vmcore може наближатися до розміру фізичної оперативної пам'яті (до стиснення makedumpfile).
  • Неправильний шлях. Переконайтеся, що path у /etc/kdump.conf (або KDUMP_COREDIR у /etc/default/kdump-tools) вказує на доступну для запису, змонтовану файлову систему.
  • Відмова SELinux. На системах RHEL перевірте ausearch -m avc -ts recent на наявність відмов, пов'язаних з kdump.

Система зависає замість захоплення дампу

Це зазвичай вказує на проблему з обладнанням або драйвером, яка запобігає переходу kexec kdump у Linux. Спробуйте додати irqpoll nr_cpus=1 reset_devices до командного рядка ядра kdump у /etc/sysconfig/kdump (RHEL) або /etc/default/kdump-tools (Debian) як KDUMP_CMDLINE_APPEND.

Висновок

Ось і все. Crashkernel резервує пам'ять, служба kdump завантажує ядро захоплення під час запуску системи, і під час дампу паніки ядра Linux vmcore опиняється в /var/crash — готовій до роботи конфігурації linux crash dump, якій ви можете довіряти. Тепер ви маєте робочу систему для автоматичного увімкнення захоплення дампів збоїв kdump у Linux; для глибшого вирішення проблем паніки ядра Linux передайте vmcore до crash і почніть з backtrace.

Версія документу: 1.0
Останнє оновлення: Травень 2026
Власник: Команда технічної документації

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • kingdom
  • germany
  • Español
  • French
  • Hrvatska
  • Italiano
  • Poland
  • Slovenski
  • ukraine
  • Türkçe
  • Русский
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA