Spuštění VPN klienta je pohodlný časový údaj, nikoli příčina, a tento rozdíl rozhoduje o tom, co se stane dál. Když se v tu chvíli objeví kernel Oops, volba je mezi sběrem použitelné zprávy o poruše a vyvoláním stejného pádu ještě pětkrát na produkčním stroji. Před restartem uložte čtyři věci: přesné sestavení jádra, první stopu poruchy, stav taint a krátký popis všeho ostatního, co se ve stejné minutě změnilo. Zbytek je interpretace a ta může počkat, dokud důkazy nejsou na bezpečném místě.

Zachyťte první poruchu, ne poslední řádek

První Oops v logu je ten, na kterém záleží, protože každá další porucha může být vedlejší škodou jádra, které už není zdravé. Zkopírujte hlavičku spolu s trasováním volání, protože hlavička nese instrukci, která poruchu způsobila, a stav registrů, který určuje cestu kódu. Zpráva, která začíná posledním řádkem, má pro toho, kdo ji přečte za týden, velmi malou hodnotu.

Pokud se stroj už restartoval, vyrovnávací paměť jádra z předchozího startu často zůstává v žurnálu, pokud v té době bylo zapnuté trvalé úložiště. Čtěte ji z uloženého souboru, místo abyste znovu vytvářeli zátěž, protože druhá reprodukce může přepsat to, co potřebujete. Tam, kde stroj nedokáže uchovat žurnál mezi restarty, je sériová konzole nebo netconsole jediný způsob, jak porucha vůbec bude viditelná.

Zafixujte sestavení, než přečtete jakýkoli symbol

Názvy funkcí a offsety mají význam jen vůči binárce, která je vytvořila, proto zaznamenejte řetězec verze jádra a identifikátor sestavení distribuce společně. Soubor symbolů z jiného sestavení ukazuje s naprostou jistotou na špatný řádek, což je horší než nemít žádný symbol. Uchovávejte verzi balíčku jádra, ne jen upstream číslo, protože distribuce hodně backportují.

Moduly mimo strom si zaslouží vlastní řádek v záznamu, protože označené jádro omezuje, co smí správce uzavřít. Čtěte hodnotu taint, místo abyste ji odvozovali ze seznamu modulů.

Nenulový taint není obvinění a nečiní zprávu bezcennou. Říká čtenáři, které komponenty byly při poruše načteny, a některé příznaky způsobují, že zpráva je snížena na prioritě podle politiky, nikoli podle úsudku. Zaznamenejte hodnotu, názvy modulů a zda stejný hardware a zátěž někdy běžely na jádru bez nich. Právě toto poslední srovnání odděluje novou regresi od dlouholeté chyby.

Oddělte spouštěč od vady

Spuštění tunelu obvykle procvičuje cestu, která už existovala: síťový ovladač, disciplínu fronty, funkci offloadu nebo energetický stav. Spouštěč vysvětluje, kdy se porucha objeví, ne který kód je špatný, a zacházení se spouštěčem jako s příčinou vede k řadě změn konfigurace, které nic neopraví.

Funkční dřívější obraz je důkaz, ne průkaz. Při srovnávání měňte jeden komponent na start a výsledky uchovávejte někde, kde přežijí stroj.

Ověřte, co správce skutečně může použít

Přečtěte si zprávu tak, jak by ji četl cizí člověk, než ji odešlete. Pokud je přítomna konfigurace, přesná posloupnost a identita sestavení a přihlašovací údaje jsou odstraněny, je zpráva použitelná. Pokud je to screenshot trasování zásobníku, vrátí se s žádostí o stejné informace. Průvodce hledáním chyb v jádru popisuje, jak vypadá užitečné trasování a odpovídající symboly.

uname -r
cat /proc/sys/kernel/tainted
journalctl -k -b -1 --no-pager | sed -n '/BUG:/,/Call Trace/p'
dmesg -T | grep -A 40 'RIP:'

Každý příkaz výše pouze čte stav a první dva by se měly spustit před dalším restartem, pokud na ně stroj ještě dokáže odpovědět. Tam, kde žurnál nepřetrvává, jsou to právě tyto dva, které někdy znovu budou fungovat.

Zredigujte klíče, hesla a nesouvisející provoz, ale ponechte názvy funkcí a offsety, které někdo potřebuje ke čtení trasování. Materiál posílejte cestou hlášení, která se vztahuje k distribuci nebo jádru, ne veřejným vložením s přiloženým jménem hostitele. Pak čekejte na otázku, místo abyste sklízeli další pády, protože lokalizovaná porucha vůči odpovídajícímu sestavení je jediný výsledek, který zprávu posune vpřed. Pokud se nic nevrátí, záložní možností je kontrolovaná reprodukce na náhradním hardwaru, nikdy na stroji, na kterém závisí jiní lidé.

Související články