Het LKCD (Linux Kernel Crash Dump) project bestaat uit een set kernelpatches en utility's om kernelgeheugen te kunnen kopiëren om het op te slaan in geval van een kernel panic. Het opgeslagen kernelimage maakt onderzoek op de kernelpanic mogelijk met utility's die in het package zijn opgenomen. De meeste commerciële Unix besturingssystemen worden met vergelijkbare crash utility's geleverd, maar dit package is tamelijk nieuw voor Linux en het moet handmatig worden toegevoegd. Het LKCD utility is niet ontworpen voor het verzamelen van behulpzame informatie in geval van een door de hardware veroorzaakte panic of een segment violation. Het volledige LKCD package is beschikbaar voor download vanaf http://lkcd.sourceforge.net/.
Dit document is auteursrechtelijk beschermd (c) 2002 door Norman Patten. Het is toegestaan dit document te kopiëren, distribueren en/of aan te passen onder de voorwaarden van de GNU Free Documentation Licence, versie 1.1 of enige latere versie gepubliceerd door de Free Software Foundation; zonder Invariant secties, zonder Front-Cover teksten, en zonder Back-Cover teksten. Een kopie van de licentie is beschikbaar op http://www.gnu.org/copyleft/fdl.html.
Linux is een geregistreerd handelsmerk van Linus Torvalds . lkcd is gedistribueerd onder het copyright van Silicon Graphics Inc.
Stuur feedback naar nepatten@us.ibm.com.
Wanneer een kernel bepaalde fouten tegenkomt, roept het de "panic" functie aan wat resulteert in een onherstelbare fout. Deze panic geeft als resultaat dat LKCD een kerneldump initieert waarbij kernelgeheugen wordt gekopieerd naar een vooraf toegekend dumpgebied. Het dump device wordt standaard als primair swap geconfigureerd. De kernel is nu niet volledig functioneel, maar er is voldoende functionaliteit over voor het kopiëren van het geheugen naar disk. Nadat dump het kopi¨ren van geheugen naar disk heeft voltooid, wordt het systeem opnieuw opgestart. Tijdens de nieuwe systeemstart controleert het op een nieuwe crash dump. Wanneer een nieuwe crash dump wordt aangetroffen, wordt het vanuit de dump lokatie gekopieerd naar het bestandssysteem standaard de "/var/log/dump" directory. Na het kopiëren van het image, gaat het systeem normaal verder met het bootproces en kan onderzoek op een later tijdstip plaatsvinden.
Het bestand lkcd-kernelxxx.diff voor het patchen van de kernel. De ondersteunde kernelversie zal volgens vaste regel wijzigen. lkcdutils-xx.src.rpm - dit is de broncode van de utility's en de scripts die je nodig hebt om een crash in te stellen en te lezen. Op moment van schrijven is een rpm binary voor de i386'r beschikbaar vanaf lkcd.sourceforge.net, maar je zult nog steeds de patches nodig hebben voor de opstartscripts vanuit de rpm broncode.
Haal het bestand lkcdutils-xxx.src.rpm op en installeer het met rpm -i kcdutils-xxx.src.rpm . Een bestand met de naam lkcdutils-xxx.tar.gz zal worden geplaatst in de directory /usr/src/redhat/SOURCES. Dit bestand is een gecomprimeerd tar image van de lkcd broncodestructuur. Pak de broncode uit in een directory naar keuzen zoals "/usr/src" met tar -zxvf kcdutils-xxx.src.rpm . Er zal nu een directory genaamd "kcdutils-xxx" worden aangemaakt met de broncode van de LKCD utility's.
LKCD gebruikte de standaard GCC compiler en make files. Voor het bouwen van de suite, cd je naar de LKCD src directory en start ./configure om de configuratiebestanden te configureren. De volgende stap bestaat uit de uitvoering van make om de utility's te compileren en tenslotten uit het opstarten van make install om de utility's en de manpages te installeren.
/etc/sysconfig/dump # Configuratiebestand voor dump /sbin/lcrash # Het crash utility /sbin/lkcd # Script om een crash te configureren en # op te slaan /sbin/lkcd_config # Configuratie-utility voor dump /sbin/lkcd_ksyms # Utility voor het reconstrueren van # kernel symbolen /usr/include/sial_api.h # Header file voor de SIAL API /usr/lib/libsial.a # Simple Image Access Language library /usr/man/man1/lcrash.1 # man page voor lcrash /usr/man/man1/lkcd_config.1 # man page voor lkcd_config /usr/man/man1/lkcd_ksyms.1 # man page voor lkcd_ksyms /usr/share/sial/lcrash/ps.sial # ps opdracht implementatie van SIAL |
Je kunt voorgecompileerde utility's van rpm installeren met rpm -i kcdutils-xxx.rpm . Je zult nog steeds de kernel moeten patchen en de patches voor de opstartscripts moeten installeren. Je kunt echter het compileren van de utility's overslaan.
De volgende stap bestaat uit het patchen en hercompileren van de kernel. Je zult de broncode van de kernel moeten patchen met het lkcd-xxx.diff bestand dat je downloadde vanaf http://lkcd.sourceforge.net/. Kopieer de patch naar dezelfde directory als je kernel en geef de opdracht patch -p0 < lkcd-kernelxxx.diff. Zorg dat de patch dezelfde versie heeft als de kernel die je gaat patchen. Vervolgens zul je de kernel moeten configureren om de crash dump ondersteuning te activeren. Standaard is de crash ondersteuning uitgezet na toepassing van de patch. Als je make menuconfig of make xconfig gebruikt, is de optie "LKCD support" te vinden onder kernel hacking. Wellicht dat je ook nog andere kernelfeatures moet activeren die je nodig hebt. Zie de Linux Kernel HOWTO voor meer details.
De volgende stap bestaat uit het compileren en installeren van de met crash geactiveerde kernel. Start in onderstaande volgorde de volgende opdrachten op vanuit de directory met kernel bronbestanden.
make depend make install make modules make modules_install |
Hiermee zal de nieuwe kernel worden gecompileerd en geïnstalleerd. Je moet ook het bestand Kerntypes vanuit de directory met kernbroncode kopiëren naar de /boot directory. Wellicht dat je ook nog het bestand lilo.conf moet wijzigen zodat er in wordt verwezen naar je nieuwe kernel. Zie http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html voor meer informatie over het compileren en installeren van een kernel.
Om een core image te kunnen bewaren dat naar swap is geschreven, moet het image worden opgeslagen voordat de swap tijden het booten wordt gemount. Hiervoor moet het opstartbestand sysinit worden gewijzigd. In de broncode van lkcd is een scripts directory opgenomen waarin de patches staan voor diverse sysinit opstartscripts. Deze patches voegen de lkcd config en lkcd save opdrachten toe om crash dumps te activeren en een eventuele bestaande crash dump bij het opstarten op te slaan.
Om een panic te forceren zodat je de nieuwe crash setup kunt testen, compileer je de volgende code met cc -c -I/usr/src/linux/include panic.c . Na het bouwen van de panic.o module geef je de opdracht insmod panic.o om een kernel panic te activeren.
### panic.c ########################### #define __KERNEL__ # MODULE # include init_module(void) int init_module (void) { panic(" panic has been called"); return 0; } |
Om je kernel core file te kunnen bekijken moet lcrash worden aangeroepen met een paar parameters:
lcrash [ System.map file ] [ dump image ] [ Kerntypes ] Voorbeeld: lcrash /boot/System.map ./dump.1 /boot/Kerntypes |
Het zal even duren eer het kernelimage in het geheugen is geladen en het je dropt in de crash shell. Achter de crash shellprompt kun je een ? intikken voor een overzicht met de beschikbare opdrachten.