home   artikelen   forum   colofon  
Gepubliceerd op 12.10.2001
Auteur: Jens Benecke
Vertaald door: Guus Snijders
Languages: en de
Help Ons!
 

Het boot proces

Info Wat gebeurd er tijdens het booten van je Linux Systeem? DOS gebruikt de bestanden CONFIG.SYS en AUTOEXEC.BAT, onder Linux is het veel interessanter.
Auteur: Jens Benecke

The basic steps

  1. Uiteraard is de eerste stap de weergave van de BIOS info, maar ook dit kan veranderd worden.
    In plaats van het Energy Star logo, kun je hier een leuk pinguïn logo plaatsen.
    Meer informatie over het veranderen van het BIOS logo kan hier gevonden worden.
  2. Vervolgens wordt de kernel in het geheugen en geladen en uitgevoerd. Dit kan met verschillende programma's. Een daarvan is LOADLIN, deze leest het kernel bestand in, welke je hebt opgegeven, schrijft deze in het geheugen en overschrijft daarbij de in het geheugen geladen DOS.
    Een andere manier is met LILO, de LInux LOader. Deze laadt de kernel direct vanaf de fysieke sector op een harde schijf. Daarvoor schrijft LILO zichzelf in het Master Boot Record (MBR), samen met de sectoren waarin de kernels worden geplaatst. Na het kiezen van de juiste kernel, schrijft het deze in het geheugen en voert deze uit.
  3. De kernel is verantwoordelijk voor het herkennen en aansturen van alle hardware in het systeem. Iedere ontdekte (en niet ontdekte) component verschijnt op het scherm. Als je sommige van de scrollende regels wat langer wilt lezen, komen de toetsen PAUSE, Scroll Back of Roll van pas. Natuurlijk is de scroll back buffer al geactiveerd door Linux (Ctrl+PgUp of Ctrl+PgDn).
  4. De laatste taak van de kernel is het mounten van de root partitie. De root partitie kan in LILO- of LOADLIN- worden opgegeven als parameter. Daarna wordt het eerste proces gestart, deze wordt meestal INIT genoemd (het programma is te vinden in /sbin/init).
    De kernel is dan klaar met zijn werk en het complete systeem en alle ontdekte en geactiveerde hardware is beschikbaar.
    De berichten die het punt aangeven waar de kernel eindigt en de programma's beginnen, zien er uit als:
         VFS: mounted root (ext2fs) filesystem read-only.  (still Kernel)
         INIT: Version X.XX booting  (Reeds INIT)       
      
  5. INIT controleert verschillende items. Eerst zoekt het naar het bestand /etc/inittab, waar het te starten runlevel wordt gevonden (id:X:initdefault:, waarbij X het nummer van het runlevel is).
    Dan bekijkt INIT welk programma vervolgens gestart moet worden, omdat er nog geen server of shell is gestart, er nog geen netwerk verbinding is gemaakt en nog geen partitie beschikbaar is gemaakt. Dit alles geschiedt in de regel si:I:wait:PROGRAM.
    Meestal staat PROGRAM voor /etc/rc.d/init.boot of /sbin/init.d/boot en wordt deze nu uitgevoerd.
  6. Het BOOT script doet meestal het volgende (vanaf dit punt kan alles worden geconfigureerd en aangepast aan jouw wensen):
    • Schakel swap in
    • controleer de root partitie en remount deze read/write (schrijfbaar)
    • controleer op andere partities en mount deze
      en als een partitie een probleem heeft, wordt het proces onderbroken en vereist een root login
    • start de module manager die verantwoordelijk is voor het "automatisch laden" van de nodige modules
    • indien nodig, worden basis netwerk programma's gestart (bijv. het loopback device)
    Merk op: Ieder systeem kan anders zijn.
    Vaak is het bestand boot.local in dezelfde directory te vinden als waarin boot aan het eind wordt uitgevoerd. Hierin kun je bijkomende commando's plaatsen.
    Natuurlijk kun je deze commando's in het boot script plaatsen, maar pas op! Het is verstandig niets te veranderen als je niet zeker weet waar je mee bezig bent.
  7. Dan controleert INIT welk runlevel is opgegeven als de volgende (/etc/inittab) en nu zijn alle scripts voor dit runlevel /etc/inittab: lN:N:wait:SCRIPT (N=runlevel). Meestal betekend dit dat alle scripts zich die zich bevinden in /etc/init.d/rcN.d (of vergelijkbaar) worden gestart (waarbij N gelijk is aan het runlevel).
    Hier woden alle services en daemons in de achtergrond gestart. Op hetzelfde moment worden tijd, lock- en log-bestanden gecreëerd, indien nodig.
  8. Vervolgens start INIT een getty voor alle terminals. Deze wordt gebruikt om de terminals te beheren en /bin/login te starten.
    Ook dit is opgegeven in /etc/inittab.
    "respawn" betekend hier dat het programma opnieuw wordt gestart als het wordt beëindigd. Zonder deze optie zou je maar een keer op een terminal kunnen inloggen...
  9. Als je een grafische login kiest (bij SuSE is dit runlevel 3, bij RedHat runlevel 5), wordt 'xdm' of 'kdm' gestart en krijg je een grafisch login scherm.
    Ook dit kan net als zoveel andere dingen over een netwerk functioneren. Een eenvoudige startx --query een_andere_computer:0 geeft je het login scherm van een andere computer op het netwerk op jouw computer.
  10. Nadat je bent ingelogd, wordt het script /etc/profile (identiek voor alle gebruikers) aangeroepen en vervolgens worden de bestanden ~/.profile, ~/.login, of, voor de bash shell, ~/.bashrc, ~/.bash_login en ~/.bash_profile "uitgevoerd" als ze bestaan. Na het inloggen wordt de shell gestart en kun je het systeem gebruiken.
Het voordeel van dit boot proces is de mogelijkheid om alles naar jouw wensen aan te kunnen passen.

Definitie van Runlevel

Eerst het dure procuct:
M$ Windows kent 6 runlevels die niet worden veranderd:

  • 1. Normaal
  • 2. Logged
  • 3. Safe mode
  • 4. Step-by-step with confirmation
  • 5. Command prompt only
  • 6. Safe mode - command prompt only
Nu zou iedereen moeten weten wat er wordt bedoelt met de term "run level".

Linux kan theoretisch een ongelimiteerd aantal runlevels bevatten, maar de volgende zijn standaard opgenomen:

0:
Halted system. Het systeem sluit af, de kernel wordt gestopt en de PC wordt uitgeschakeld als je een ATX moederbord hebt.
6:
Reboot system. Alles afgesloten en het systeem wordt geherstart.
S:
Single User Mode. Er wordt slechts een terminal gestart en allen root mag inloggen; er is geen netwerk ondersteuning. Een handige modus om dingen te repareren.
1:
Multiuser zonder netwerk. (meestal, maar in RedHat is runlevel 1 het single user runlevel)

Vanaf hier is alles afhankelijk van de gekozen distributie - zie ook /etc/inittab

2:
Multiuser met netwerk.
3:
Multiuser met netwerk en grafische login.
4:
Gebruiker gedefinieerd.
5:
Gebruiker gedefinieerd (RedHat: zelfde als runlevel 3)
Wat er precies wordt gestart of gestopt in ieder runlevel wordt gedefinieerd met de scripts in de /etc/rcN.d of /etc/rc.d/rcN.d of /sbin/init.d/rcN.d (waarbij N=runlevel).

Voor meer informatie, zie
  >> man 8 init. 
  


De Duitse tekst is onderdeel van de Linux USER FAQ en was ons genereus gestuurd door Jens Benecke, een van de auteurs van de Linux USER FAQ.

Links
   Homepage van de auteur (Jens Benecke): http://www.linuxfaq.de