Linux Crash HOWTO
Norman
Patten
nepatten@us.ibm.com
Vertaald door: Ellen Bokhorst
Bokhorst
bokkie@nl.linux.org
30-01-2002
In dit document wordt de installatie en het gebruik
van het LKCD (Linux Kernel Crash Dump) package beschreven.
1.0
30-01-2002
NM
Initiële release.
Introductie
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/.
Copyright en licentie
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.
Hoe LKCD werkt
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.
Wat je nodig hebt
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.
Installatie van lkcd
Installeren vanuit 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.
Bouwen en installeren 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.
Wat wordt er geïnstalleerd
/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
Installeren van de LKCD utility's vanuit een RPM
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.
Patchen van de kernel
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.
Compileer en installeer de kernel
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.
Setup, test, en het uitvoeren van crash
Instellen van crash dump
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.
Testen van crash
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;
}
Uitvoeren van crash
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.