Kernel panic

Krytyczny błąd jądra, po którym system zatrzymuje pracę, bo nie potrafi bezpiecznie kontynuować. Odpowiednik 'niebieskiego ekranu śmierci’ z Windowsa.

Kernel panic to krytyczny błąd jądra Linuksa (oraz innych systemów uniksowych, np. macOS), po którym system zatrzymuje całą pracę, bo doszedł do stanu, z którego nie potrafi bezpiecznie wyjść. Jądro stwierdza wtedy: „nie wiem, co robić dalej, a jeśli zgadnę źle, mogę uszkodzić Twoje dane” — i zamiast kombinować, po prostu staje. To uniksowy odpowiednik windowsowego niebieskiego ekranu śmierci (BSOD), tyle że zamiast niebieskiego tła zwykle zobaczysz ścianę białego tekstu na czarnym.

Co się właściwie dzieje

Jądro (kernel) to najniższa, najbardziej uprzywilejowana warstwa systemu — zarządza pamięcią, procesorem i sprzętem. Kiedy w tej warstwie wydarzy się coś, czego nie da się obsłużyć (np. odwołanie do nieprawidłowego adresu pamięci, uszkodzony moduł, padający kontroler dysku), jądro wywołuje funkcję panic(). Ta zatrzymuje wszystkie procesory, wypisuje komunikat diagnostyczny i czeka. Nie ma tu „zamknij program i kontynuuj” jak przy zwykłej aplikacji — gdy pada jądro, pada wszystko nad nim.

Domyślnie po panice system stoi w miejscu, żebyś mógł odczytać komunikat. Na serwerach zwykle ustawia się automatyczny restart po określonym czasie przez parametr kernel.panic — wartość w sekundach (np. kernel.panic = 10), gdzie 0 oznacza „nie restartuj, czekaj w nieskończoność”.

Przykład z praktyki

Załóżmy, że Twój serwer zrestartował się sam w nocy i nie wiesz dlaczego. Po komunikacie typu Kernel panic - not syncing: Fatal exception jądro może zrzucić obraz pamięci (crash dump) przez mechanizm kdump. Po restarcie zaglądasz do /var/crash/ i analizujesz zrzut narzędziem crash, a wcześniejsze logi sprawdzisz przez journalctl -k -b -1 (komunikaty jądra z poprzedniego rozruchu). Auto-restart włączysz tymczasowo komendą:

echo 10 > /proc/sys/kernel/panic

Na stałe wpiszesz to do /etc/sysctl.conf lub pliku w /etc/sysctl.d/.

Mity i pułapki

  • „Panic to wina systemu operacyjnego” — najczęściej nie. Zdecydowana większość panik to wadliwy sprzęt (padająca pamięć RAM, dysk), buggy sterownik albo nieszczęśliwie zbudowany moduł jądra, a nie sam Linux.
  • Nie myl kernel panic z kernel oops. Oops to „mniejszy” błąd — jądro loguje problem i często leci dalej. Panic to twardy stop. Możesz wymusić panikę przy każdym oopsie przez kernel.panic_on_oops = 1.
  • Ślepy auto-restart bez zbierania crash dumpów to droga donikąd — serwer wstaje, problem wraca, a Ty nadal nie wiesz dlaczego.

Pojęcia powiązane: BSOD (Windows), kernel oops, kdump, dmesg, journalctl, segmentation fault, watchdog, init.