Kdump: Jak analizować Kernel Panic w Linuksie
Wprowadzenie do Kdump
W poprzednim artykule omówiliśmy, jak skonfigurować system, aby automatycznie restartował się po Kernel Panic za pomocą parametru kernel.panic. Ale co, jeśli chcemy zrozumieć, dlaczego panika wystąpiła? Samo ponowne uruchomienie systemu rozwiązuje problem dostępności, ale nie pomaga w diagnozie przyczyny. Tutaj z pomocą przychodzi kdump.
kdump to zaawansowany mechanizm w jądrze Linuksa, który pozwala na przechwycenie zawartości pamięci systemowej (zrzutu pamięci, ang. memory dump lub crash dump) w momencie wystąpienia Kernel Panic. Ten zrzut można następnie przeanalizować za pomocą specjalistycznych narzędzi, takich jak crash, aby zidentyfikować wadliwy sterownik, błąd w kodzie jądra lub inną przyczynę awarii.
Jak działa Kdump?
Działanie kdump opiera się na koncepcji dwóch jąder:
- Jądro systemowe (System Kernel): To jest główne jądro, na którym pracuje Twój system operacyjny.
- Jądro przechwytujące (Capture Kernel): To drugie, minimalistyczne jądro, które jest ładowane do specjalnie zarezerwowanego obszaru pamięci RAM podczas startu systemu. Jest ono nieaktywne podczas normalnej pracy.
Gdy w jądrze systemowym wystąpi Kernel Panic, kontrolę przejmuje mechanizm kexec. kexec to funkcja jądra, która pozwala na załadowanie i uruchomienie nowego jądra bezpośrednio z pamięci, z pominięciem etapu BIOS/UEFI. W przypadku kdump, kexec uruchamia jądro przechwytujące.
To drugie jądro ma jedno zadanie: zebrać zawartość pamięci RAM (w której znajdują się informacje o stanie systemu w momencie awarii) i zapisać ją jako plik zrzutu (zazwyczaj w /var/crash/). Ponieważ jądro systemowe już nie działa, potrzebujemy drugiego, niezależnego środowiska, aby bezpiecznie zapisać dane.
Podstawowa konfiguracja
Konfiguracja kdump różni się w zależności od dystrybucji, ale ogólne kroki są podobne.
-
Instalacja narzędzi: Na systemach bazujących na Red Hat (CentOS, Fedora, RHEL):
sudo dnf install kexec-toolsNa systemach bazujących na Debianie (Ubuntu):
sudo apt-get install kdump-tools -
Rezerwacja pamięci dla jądra przechwytującego: Należy zarezerwować stały obszar pamięci RAM, który będzie niedostępny dla głównego jądra. Robi się to, dodając parametr
crashkerneldo linii poleceń jądra w konfiguracji bootloadera (np. GRUB).Przykład w
/etc/default/grub:GRUB_CMDLINE_LINUX="... crashkernel=256M"Wartość
256Mto typowa wielkość, ale może wymagać dostosowania w zależności od ilości RAM w systemie. Po zmianie należy zaktualizować konfigurację GRUB-a:sudo grub2-mkconfig -o /boot/grub2/grub.cfg -
Włączenie i uruchomienie usługi kdump:
sudo systemctl enable kdump.service sudo systemctl start kdump.service -
Testowanie konfiguracji: Aby upewnić się, że
kdumpdziała, można celowo wywołać Kernel Panic:# UWAGA: To polecenie natychmiast zawiesi Twój system! # Używaj go tylko w środowisku testowym. echo c | sudo tee /proc/sysrq-triggerPo restarcie systemu, w katalogu
/var/crash/powinien pojawić się nowy folder z plikiemvmcore– to jest właśnie zrzut pamięci.
Analiza zrzutu
Do analizy pliku vmcore używa się najczęściej narzędzia crash. Wymaga ono również dostępu do symboli debugowania jądra, które należy doinstalować. Nazwy pakietów z symbolami różnią się między dystrybucjami.
- Dla systemów bazujących na Red Hat (np. Fedora):
sudo dnf install crash kernel-debuginfo - Dla systemów bazujących na Debianie (np. Ubuntu):
Nazwy pakietów mogą się różnić, często jest to
linux-image-$(uname -r)-dbgsymlub podobny. Należy go poszukać w repozytoriach.
Po zainstalowaniu odpowiednich pakietów, analizę można uruchomić, podając jako argumenty ścieżkę do pliku vmcore oraz do pliku vmlinux z symbolami debugowania:
# Przykład uruchomienia analizy
sudo crash /var/crash/127.0.0.1-2025-12-21-21:30:00/vmcore /usr/lib/debug/lib/modules/$(uname -r)/vmlinux
Narzędzie crash udostępnia interaktywną powłokę, w której można wykonywać polecenia takie jak bt (backtrace, aby zobaczyć stos wywołań), log (aby przejrzeć logi jądra) czy ps (aby zobaczyć procesy działające w momencie awarii).
Podsumowanie
kdump jest niezbędnym narzędziem do zaawansowanej diagnostyki problemów z jądrem Linuksa. Chociaż jego konfiguracja wymaga nieco wysiłku, możliwość analizy stanu systemu po awarii jest bezcenna w rozwiązywaniu złożonych i trudnych do odtworzenia problemów. W połączeniu z kernel.panic, kdump tworzy solidny fundament dla stabilnego i niezawodnego środowiska serwerowego.