Probleemoplossing

Bij het bouwen van bootdisks, zal het systeem bij de eerste pogingen waarschijnlijk niet booten. De algemene benadering bij het bouwen van een rootdisk is componenten vanuit je bestaande systeem te assembleren, en het op een diskette gebaseerd systeem te krijgen tot op het punt waar het berichten op de console weergeeft. Zodra het éénmaal met je begint te communiceren, is het halve leed geleden omdat je dan kunt zien waar het problemen mee heeft en kun je individuele problemen herstellen net zolang tot het systeem soepel werkt. Als het systeem zonder verklaring hangt, kan het uitzoeken van de oorzaak moeilijk zijn. Om een systeem geboot te krijgen tot die fase waarin het met je zal communiceren, is het vereist dat verscheidene componenten aanwezig zijn en dat deze correct zijn geconfigureerd. De aanbevolen procedure voor het onderzoeken van het probleem waar het systeem niet met je zal communiceren is als volgt:

Nu we deze algemene aspecten éénmaal hebben gehad, zijn hier nog een aantal specifieke bestanden te controleren:

  1. Zorg ervoor dat init is opgenomen als /sbin/init of /bin/init. Wees er zeker van dat het uitvoerbaar is.

  2. Voer ldd init uit om te controleren op de library's van init. Gewoonlijk is dit slechts libc.so, maar controleer het toch maar. Zorg ervoor dat je de benodigde library's en loaders hebt ingesloten.

  3. Verzeker je jezelf ervan dat je de juiste loader voor je library's hebt -- ld.so voor a.out of ld-linux.so voor ELF.

  4. Controleer /etc/inittab op het bestandssysteem van je bootdisk op aanroepen naar getty (of een op getty-lijkend programma, zoals agetty, mgetty of getty_ps). Controleer deze tweemaal met inittab op je harddisk. Controleer de manpages van het te gebruiken programma om er zeker van te zijn dat deze zin hebben. inittab is mogelijk het lastigste onderdeel omdat de syntax en inhoud ervan afhangen van het in gebruik zijnde init programma en de aard van het systeem. De enige manier om het aan te pakken is de manpages van init en inittab lezen en exact uit te werken wat je bestaande systeem doet wanneer het boot. Controleer voor de zekerheid of /etc/inittab een systeeminitialisatie-entry heeft. Hierin zou een opdracht moeten staan voor het uitvoeren van het systeem initialisatiescript, dat voor moet komen.

  5. Pas net als bij getty ldd toe op getty om te zien wat het nodig heeft, en zorg ervoor dat de benodigde library bestanden en loaders in je rootbestandssysteem zijn opgenomen.

  6. Wees er zeker van dat je een shell-programma hebt ingesloten (b.v., bash of ash) welke al je rc-scripts kan uitvoeren.

  7. Als je een /etc/ld.so.cache bestand op je rescue-disk hebt, maak het dan opnieuw aan.

Als init start, maar je een melding krijgt als:
        Id xxx respawning too fast: disabled for 5 minutes  
is dat afkomstig van init, waarmee gewoonlijk wordt aangegeven dat getty of login afsluit zodra het opstart. Controleer de uitvoerbare bestanden getty en login en de library's waar ze afhankelijk van zijn. Zorg dat de aanroepen in /etc/inittab juist zijn. Als je vreemde meldingen van getty krijgt, kan dit betekenen dat de aanroepende vorm in /etc/inittab niet goed is.

Als je een loginprompt krijgt en je een geldige loginnaam invoert, maar het systeem vraagt je onmiddellijk daarna om nog een andere loginnaam, kan het probleem te maken hebben met PAM of NSS. Zie paragraaf Voorziening voor PAM en NSS. Het probleem kan ook zijn dat je shadow passwords gebruikt en /etc/shadow niet naar je bootdisk kopieerde.

Als je één of ander uitvoerbaar bestand, zoals df probeert uit te voeren, wat zich op je rescue-disk bevindt, maar het levert je een bericht op als: df: not found, controleer dan op twee zaken: (1) Verzeker je ervan dat de directory met het binaire bestand zich in je PATH bevindt, en (2) zorg ervoor dat de library's (en loaders) die het programma nodig heeft er zijn.