Linux Crash HOGYAN Norman Patten
nepatten@us.ibm.com
2002.01.30 Ez a dokumentum az LKCD (Linux Kernel Crash Dump) csomag telepítését és használatát írja le. 1.0 2002.01.30 NM Első kiadás.
Bevezetés Az LKCD (Linux Kernel Crash Dump) projekt kernel foltok és alkalmazások együttese, mely lehetővé teszi a kernel memóriatartalmának elmentését kernel pánik esetén. A kernel állapotát tartalmazó állomány a mellékelt alkalmazásokkal együtt lehetővé teszi a kernel pánik utólagos hibakeresését. A legtöbb fizetős Unix operációs rendszert hasonló crash alkalmazásokkal szállítják, de ez a csomag meglehetősen új a Linuxban, és kézzel kell hozzáadni. Az LKCD alkalmazás nem alkalmas megfelelő információk összegyűjtésére hardver okozta pánik vagy szegmenshiba esetén. A teljes LKCD csomag letölthető a http://lkcd.sourceforge.net/ oldalról. Szerzői jog és licenc This document is copyrighted (c) 2002 by Norman Patten. Ezen dokumentum másolása, terjesztése és/vagy módosítása engedélyezett a GNU Free Documentation License 1.1 változata, vagy bármelyik későbbi, a Free Software Foundation által közzétett változat feltételei szerint; állandó fejezetek nélkül, előlapi és hátoldali szöveg nélkül. A licenc másolata elérhető a http://www.gnu.org/copyleft/fdl.html oldalon. A Linux védjegy Linus Torvalds tulajdona. Az lkcd a Silicon Graphics Inc. által meghatározott feltételek szerint terjeszthető. Visszajelzést a nepatten@us.ibm.com címre lehet küldeni. Magyar fordítás A magyar fordítást Furi Zoltán készítette (2003.04.15). A lektorálást Daczi László végezte el (2003.04.16). Bármilyen fordítással kapcsolatos észrevételt a linuxhowto@sch.bme.hu címre küldjetek. A dokumentum legfrissebb változata megtalálható a Magyar Linux Dokumentációs Projekt honlapján. Hogyan működik az LKCD Amikor a kernel olyan hibával találkozik amelyet nem tud lekezelni, meghívja a "panic" (pánik) függvényt. Ez a pánik az LKCD-ben egy ún. kernel dump-ot eredményez, ekkor a kernel memóriájának a tartalma egy előre kijelölt, ún. dump területre másolódik. Dump eszközként alapból az elsődleges swap terület van beállítva. A kernel nem teljes mértékben működőképes ekkor, de még elegendő mértékben ahhoz, hogy kimásolja a memória tartalmát a lemezre. Miután a dump befejezte a memória tartalmának másolását a lemezre, a rendszer újraindul. Amikor a rendszer újraindul, új crash dump fájlt keres. Ha talál, akkor átmásolja azt a dump helyéről egy másik partícióra, alapból a "/var/log/dump" könyvtárba. Az állomány másolása után a rendszer folytatja a normális indulási folyamatot. A vizsgálatokat egy későbbi időpontban el lehet végezni. Mire van szükséged? Az lkcd-kernelxxx.diff fájlra a kernel foltozásához. A támogatott kernelverzió folyamatosan változik. Az lkcdutils-xx.src.rpm tartalmazza az alkalmazás forráskódját és a beállításhoz, illetve a crash adatok olvasásához szükséges programokat. E szöveg írásának idején egy futtatható i386 rpm csomag elérhető az lkcd.sourceforge.net webhelyen, de így is szükséged lesz az indításhoz a szkriptekre a forrás rpm csomagból. Az lkcd telepítése Telepítés forráskódból Szerezd be az lkcdutils-xxx.src.rpm csomagot és telepítsd az rpm -i kcdutils-xxx.src.rpm paranccsal. Ez egy lkcdutils-xxx.tar.gz nevű fájlt helyez az /usr/src/redhat/SOURCES könyvtárba. Ez a fájl az lkcd források tömörített tar állománya. Csomagold ki a forrást egy tetszőleges könyvtárba (például "/usr/src" a tar -zxvf kcdutils-xxx.src.rpm paranccsal. Ez létre fogja hozni a "kcdutils-xxx" könyvtárat, amelyben az LKCD csomag részeinek forráskódja lesz. Az LKCD programok fordítása és telepítése Az LKCD a hagyományos GCC fordítót és make fájlokat használja. A programok fordításához lépj be LKCD forráskönyvtárába, és futtasd a ./configure szkriptet a konfigurációs állományok elkészítéséhez. A következő lépés a make futtatása az alkalmazás fordításához, és végül futtasd a make install parancsot a programok és kézikönyv oldalak telepítéséhez. Telepített állományok /etc/sysconfig/dump # A dump konfigurációs állománya /sbin/lcrash # A crash alkalmazás /sbin/lkcd # Szkript a crash konfigurálására és mentésére /sbin/lkcd_config # A dump konfigurációs programja /sbin/lkcd_ksyms # A kernel szimbólumok visszaállító programja /usr/include/sial_api.h # A SIAL API header állománya /usr/lib/libsial.a # Simple Image Access Language függvénykönyvtár /usr/man/man1/lcrash.1 # lcrash kézikönyv oldalak /usr/man/man1/lkcd_config.1 # lkcd_config kézikönyv oldalak /usr/man/man1/lkcd_ksyms.1 # lkcd_ksyms kézikönyv oldalak /usr/share/sial/lcrash/ps.sial # A SIAL ps parancsának implementációja Az LKCD telepítése RPM csomagból Telepítheted az előre lefordított programokat rpm csomagból az rpm -i kcdutils-xxx.rpm futtatásával. Azonban még foltozni kell a kernelt, és telepíteni az indító szkriptet. Egyébként kihagyhatod az alkalmazás fordításának lépéseit. A kernel foltozása A következő lépés a kernel foltozása és újrafordítása. Foltoznod kell a kernel forrást az a http://lkcd.sourceforge.net/ oldalról letöltött lkcd-xxx.diff fájlal. Másold a foltot ugyanabba a könyvtárba, ahol a kerneled forrása van, és futtasd a patch -p0 < lkcd-kernelxxx.diff parancsot. Győződj meg róla, hogy a folt verziója azonos a használt kernelével. A következő lépésben a kernel konfigurálásával engedélyezned kell a crash dump támogatást. Alapbeállításban a crash támogatás, miután alkalmaztad a foltot, ki van kapcsolva. Ha a make menuconfig vagy a make xconfig parancsot használod, az "LKCD support" opció a "kernel hacking" fejezet alatt található. Szükséged lehet még további opciók engedélyezésére. További részletekért olvasd el a The Linux Kernel HOWTO (Linux kernel HOGYAN) leírást . A kernel fordítása és telepítése A következő lépés a crash opcióval engedélyezett kernel fordítása és telepítése. A kernel forráskönyvtárban futtasd egymás után a következő parancsokat: make depend make install make modules make modules_install Ez lefordítja és telepíti az új kernelt, de neked kell átmásolnod a Kerntypes állományt a kernel forráskönyvtárból a /boot könyvtárba. Szükség lesz még a lilo.conf állomány szerkesztésére is, hogy legyen benne az új kerneledre mutató bejegyzés is. További információért olvasd el a http://www.tldp.org/HOWTO/Kernel-HOWTO.html leírást. A crash beállítása, tesztelése és futtatása A crash dump beállítása A swap partícióra írt core állomány elmentéséhez, azt (mármint a core fájlt – a lektor) az indulási folyamat során a swap partíció aktiválása előtt át kell másolni egy másik partícióra. Ennek végrehajtásához a sysinit indítóállományt meg kell változtatni. Az lkcd forrás tartalmaz egy scripts könyvtárat, amely foltokat tartalmaz különböző sysinit indító szkriptekhez. Ezek a foltok hozzáadják az indító szkripthez a lkcd config és az lkcd save parancsokat , ezek engedélyezik a crash dump szolgáltatást, illetve a létező crash dump fájl elmentéséről gondoskodnak. A crash tesztelése Az új crash beállítás tesztelése érdekében, pánik kieszközöléséért, fordítsd le a következő forrásprogramot a cc -c -I/usr/src/linux/include panic.c paranccsal. A panic.o modul lefordítása után pánik előidézéséhez csak töltsük be azt insmod panic.o paranccsal. ### panic.c ########################### #define __KERNEL__ # MODULE # include init_module(void) int init_module (void) { panic(" panic has been called"); return 0; } A crash futtatása A core állomány megtekintéséhez futtasd a lcrash parancsot a következő paraméterekkel: lcrash [ System.map fájl ] [ dump fájl ] [ Kerntypes ] Példa: lcrash /boot/System.map ./dump.1 /boot/Kerntypes Néhány percet igénybe fog venni a kernel állomány betöltése a memóriába, majd kidob a crash parancssorba. A crash parancssorba beírhatsz egy ? karaktert a használható parancsok megtekintéséhez.