Ero sivun ”Käynnistysprosessi” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(lisäwikitystä)
Rivi 1: Rivi 1:
Yleensä käyttäjän ei tarvitse huolehtia siitä, mitä tapahtuu sillä välin kun tietokoneeseen kytketään virta ja ruudulle pamahtaa [[X Window System|graafinen ympäristö]], jossa pyydetään kauniisti kirjautumaan sisään järjestelmään. Kuitenkin jossain vaiheessa saattaa tavankin käyttäjälle tulla halu säätää käynnistysaikaa tai vaikka käynnistyviä palveluita. Tällöin olisi hyvä tuntea kuinka järjestelmä itseasiassa käynnistyykään. Tässä artikkelissa pyritään selvittämään väliä virtanapin ja järjestelmään kirjautumisen välissä. Ikävä kyllä artikkeli ei voi tarjota kaikille jakelupaketeille "suoraa lähestymistä", mutta kirjoittaessa on pyritty tästä tekemään mahdollisimman jakelupakettiriippumaton.
Yleensä käyttäjän ei tarvitse huolehtia siitä, mitä tapahtuu sillä välin kun tietokoneeseen kytketään virta ja ruudulle ilmestyy [[X Window System|graafinen ympäristö]], jossa pyydetään kauniisti kirjautumaan sisään järjestelmään. Kuitenkin jossain vaiheessa saattaa tavankin käyttäjälle tulla halu säätää käynnistysaikaa tai vaikka käynnistyviä palveluita. Tällöin olisi hyvä tuntea kuinka järjestelmä itseasiassa käynnistyykään. Tässä artikkelissa pyritään selvittämään tapahtumia virtanapin ja järjestelmään kirjautumisen välissä. Ikävä kyllä artikkeli ei voi tarjota kaikille [[jakelu]]ille "suoraa lähestymistä", mutta kirjoittaessa on pyritty tästä tekemään mahdollisimman jakeluriippumaton.


==Virtanapista eteenpäin==
==Virtanapista eteenpäin==
Niin, mitkä oikeastaan ovat ensimmäiset vaiheet? Tämä on yksi niitä elämän mysteerejä, eikä oikeastaan millään tavalla vielä liity käyttöjärjestelmään. Yleensä virran kytkemisen jälkeen tietokone lataa [[BIOS]]:n, joka on pieni ohjelma emolevyn erillisellä muistipiirillä. Tämä pieni ohjelma, joka pyörii pienellä piisirulla tekee ensimmäisenä käynnistyttyään [[POST|POST-testin]] (''Power-On-Self-Test''), joka tarkastaa, että tiettyjä laitteita (kuten muistit, emolevy ja prosessori) on paikalla, ja että ne ovat toimintakunnossa. Sen jälkeen BIOS alustaa joitakin järjestelmäkomponentteja (kuten kiintolevyt), jakaa niille keskeytyksiä sekä tulostaa niistä taulukon ruudulle. Kaiken muun tehtävän seassa voitaisiin sanoa, että BIOS:illa on päätehtävä, jonka tarkoitus on etsiä käynnistettävän median aivan alkupäästä ohjelma, joka kykenee lataamaan käyttöjärjestelmän. Voitaisiinkin sanoa, että BIOS ei ole olemassakaan mitään muuta varten kuin sitä, että se osaa ladata ohjelman nimeltä [[käynnistyslatain]]. Käynnistyslatain sijaitsee yleensä käynnistyssektorilla ([[Master Boot  Record]], MBR), joka sijaitsee yleensä käynnistettävän median alkupäässä. Kiintolevyistä puhuttaessa alkupää on ensimmäinen sektori, ensimmäinen sylinteri sekä ensimmäinen lukupää. Menikö hieman ohi? Ei hätää, emme ole vielä päässeet käyttöjärjestelmän käynnistämiseen :)
Käynnistymisen ensimmäiset vaiheet eivät juuri mitenkään liity itse käyttöjärjestelmään. Yleensä virran kytkemisen jälkeen tietokone lataa [[BIOS]]:n, joka on pieni ohjelma [[wikipedia:fi:emolevy|emolevyn]] erillisellä muistipiirillä. Tämä pieni ohjelma, joka pyörii pienellä piisirulla tekee ensimmäisenä käynnistyttyään [[POST|POST-testin]] (''Power-On-Self-Test''), joka tarkastaa, että tiettyjä laitteita (kuten muistit, emolevy ja prosessori) on paikalla, ja että ne ovat toimintakunnossa. Sen jälkeen BIOS alustaa joitakin järjestelmäkomponentteja (kuten kiintolevyt), jakaa niille keskeytyksiä sekä tulostaa niistä taulukon ruudulle. Kaiken muun tehtävän seassa voitaisiin sanoa, että BIOS:illa on päätehtävä, jonka tarkoitus on etsiä käynnistettävän median aivan alkupäästä ohjelma, joka kykenee lataamaan käyttöjärjestelmän. Voitaisiinkin sanoa, että BIOS ei ole olemassakaan mitään muuta varten kuin sitä, että se osaa ladata ohjelman nimeltä [[käynnistyslatain]]. Käynnistyslatain sijaitsee yleensä pääkäynnistyssektorilla ([[Master Boot  Record]], MBR), joka sijaitsee yleensä käynnistettävän median alkupäässä. Kiintolevyistä puhuttaessa alkupää on ensimmäinen sektori, ensimmäinen sylinteri sekä ensimmäinen lukupää.


Käynnistyslatain on siis ohjelma, joka kykenee lataamaan käyttöjärjestelmän. Tämä onkin oikeastaan ensimmäinen vaihe, jossa pystytään puhumaan [[GNU/Linux]]in käynnistysprosessista. Käynnistyslatain kuulostaa varmaan tutulta ja monelle se tulee vielä tutummaksi kun mainitaan, että kaksi suosituinta käynnistyslatainta ovat [[Grub|GRUB]] (Grand Unified Bootloader) sekä [[Lilo|LILO]] (Linux Loader). Käynnistyslataimen tehtävä on tarjota tietokoneelle keino päästä käynnistämään käyttöjärjestelmän ydintä, eli [[kernel]]iä. Miksi BIOS ei voi suoraan käynnistää ydintä, niinhän windowskin tekee? Itseasiassa näin ei Windowskaan tee. Vaikka ruudulle ei tulekaan mitään tekstiä, joka kehottaa valitsemaan käyttöjärjestelmää, vaatii myöskin Windows käynnistyslataimen.
==Käynnistyslatain==


No takaisin asiaan. Nyt tiedämme, että BIOS lataa käynnistyslataimen ja käynnistyslataimen tehtävä on ladata käyttöjärjestelmän ydin. Mitä eroa sitten LILO:lla ja GRUB:lla on? Vaikka LILO ja GRUB vaikuttavat hyvinkin samanlaisilta ohjelmilta, ne molemmat tarjoavat käynnistysvalikon, mistä saa valittua ladattavan käyttöjärjestelmän ja ne molemmat myös lataavat sen käyttöjärjestelmän. Ero piileekin lähinnä siinä, kuinka nämä käynnistyslataimet sen tekevät.
Käynnistyslatain on siis ohjelma, joka kykenee lataamaan käyttöjärjestelmän. Tämä onkin oikeastaan ensimmäinen vaihe, jossa pystytään puhumaan [[GNU/Linux]]in käynnistysprosessista. Termi on käynnistyslatain on useimmille tuttu, ja monelle se tulee vielä tutummaksi kun mainitaan, että kaksi suosituinta käynnistyslatainta ovat [[Grub|GRUB]] (Grand Unified Bootloader) sekä [[Lilo|LILO]] (Linux Loader). Käynnistyslataimen tehtävä on tarjota tietokoneelle keino päästä käynnistämään käyttöjärjestelmän ydintä, eli [[kernel]]iä. Miksi BIOS ei sitten voi suoraan käynnistää ydintä, niinhän Windowskin kai tekee? Itseasiassa näin ei Windowskaan tee. Vaikka ruudulle ei tulekaan mitään tekstiä, joka kehottaa valitsemaan käyttöjärjestelmää, vaatii myöskin Windows käynnistyslataimen.
 
Nyt tiedämme, että BIOS lataa käynnistyslataimen ja käynnistyslataimen tehtävä on ladata käyttöjärjestelmän ydin. Mitä eroa sitten LILO:lla ja GRUB:lla on? Vaikka LILO ja GRUB vaikuttavat hyvinkin samanlaisilta ohjelmilta, ne molemmat tarjoavat käynnistysvalikon, mistä saa valittua ladattavan käyttöjärjestelmän ja ne molemmat myös lataavat itse käyttöjärjestelmän. Ero piileekin lähinnä siinä, kuinka nämä käynnistyslataimet sen tekevät.


===LILOn lähestymistapa===
===LILOn lähestymistapa===
Voisi kuvitella, että kaikki tiedostot ovat käynnistyssektorilla vain odottamassa lataamista. Näin ei kuitenkaan ole, sillä käynnistyssektori on aivan liian pieni ytimelle tai edes kokonaiselle [[LILO]]lle. Tästä syystä LILO onkin käytännössä pilkottu eri "vaiheisiin". Ensimmäisenä kun BIOS lataa käynnistyslataimen (tässä tilanteessa LILOn), se lataa tosiasiassa vain pienen osan koodia, joka osaa käynnistää toisen vaiheen suoraan kiintolevyltä. Ensimmäisen vaiheen jälkeen LILO tulostaa ruudulle kirjaimen L. Kun toinen vaihe on ladattu, LILO tulostaa ruudulle I-kirjaimen ja käynnistää toisen vaiheen. Toisen vaiheen käynnistämisen jälkeen LILO tulostaa ruudulle L-kirjaimen ja yrittää lukea kiintolevyltä karttatiedoston, joka kertoo LILOlle mm. mitä käyttöjärjestelmiä levyllä on ja missä ne sijaitsevat. Jos tämän karttatiedoston lataaminen onnistuu, printtaa LILO ruudulle O-kirjaimen. Nämä tulostetut kirjaimet mahdollistavat myös LILO:n virhetilanteiden korjaamisen, ja ne ovat dokumentoitu varsin hyvin, joten hakukoneen pitäisi auttaa ongelmatilanteissa.


Voisi kuvitella, että kaikki tiedostot ovat käynnistyssektorilla vain odottamassa lataamista. Näin ei kuitenkaan ole, sillä käynnistyssektori on aivan liian pieni ytimelle tai edes kokonaiselle LILO:lle. Tästä syystä LILO onkin käytännössä pilkottu eri "vaiheisiin". Ensimmäisenä kun BIOS lataa käynnistyslataimen (tässä tilanteessa LILO:n), se lataa tosiasiassa vain pienen osan koodia, joka osaa käynnistää toisen vaiheen suoraan kiintolevyltä. Ensimmäisen vaiheen jälkeen LILO tulostaa ruudulle kirjaimen "L". Kun toinen vaihe on ladattu, LILO tulostaa ruudulle"I"-kirjaimen ja käynnistää toisen vaiheen. Toisen vaiheen käynnistämisen jälkeen LILO tulostaa ruudulle "L"-kirjaimen ja yrittää lukea kiintolevyltä karttatiedoston, joka kertoo LILO:lle mm. sen, mitä käyttöjärjestelmiä levyllä on ja missä ne sijaitsevat. Jos tämän karttatiedoston lataaminen onnistuu, printtaa LILO ruudulle "O"-kirjaimen. Nämä tulostetut kirjaimet mahdollistavat myös LILO:n virhetilanteiden korjaamisen, ja ne ovat dokumentoitu varsin hyvin joten googlen pitäisi auttaa ongelmatilanteissa. Mutta ettemme karkaisi asiasta liikaa, niin LILOn ongelma on karttatiedoston tarve, jos jostain syystä levyn geometria muuttuu tai karttatiedosto on väärä tai viallinen, ei lilo osaa enää käynnistää ydintä. Tämä on periaatteessa korjattavissa rescue-cd:llä, sillä LILO sisältää komennon nimeltä "lilo", joka kirjoittaa oikeellisen karttatiedoston. Tämä aiheuttaa myös sen, että komento "lilo" tulee ajaa aina kun [[Kernelin kääntäminen|käännetään uusi ydin]] tai muutetaan LILO:n asetuksia. Tämän karttatiedoston tarpeen poistamiseen onkin kehitetty toinen käynnistyslatain nimeltään GRUB.
LILOn suurin ongelma on karttatiedoston tarve. Eli jos jostain syystä levyn geometria muuttuu tai karttatiedosto on väärä tai viallinen, ei LILO osaa enää käynnistää ydintä. Tämä on periaatteessa korjattavissa rescue-cd:llä, sillä LILO sisältää komennon nimeltä "lilo", joka kirjoittaa oikeellisen karttatiedoston. Tämä aiheuttaa myös sen, että komento "lilo" tulee ajaa aina kun [[kernelin kääntäminen|käännetään uusi ydin]] tai muutetaan LILO:n asetuksia. Tämän karttatiedoston tarpeen poistamiseen onkin kehitetty toinen käynnistyslatain nimeltään GRUB.


===GRUB:n lähestymistapa===
===GRUBin lähestymistapa===
 
Aivan kuten LILO, myöskään [[GRUB]] ei pysty käynnistymään suoraan käynnistyssektorilta, vaan sekin jakautuu eri vaiheisiin. Käynnistyssektorille mahtuu itseasiassa vain yksi ja puoli vaihetta, joten ensimmäisen vaiheen jälkeen GRUB siirtyy oikeastaan vaiheeseen 1,5. Vaiheessa 1,5 GRUB lataa tiedostojärjestelmän sille osiolle, millä toinen vaihe sijaitsee. Riippuen käytettävästä tiedostojärjestelmästä, ladataan aina eri tiedostojärjestelmälle eri 1,5 vaihe. Koska GRUB lataa tiedostojärjestelmän karttatiedoston sijaan, voi se myös siis käynnistää ytimen josta sille ei ole aiemmin [[asetustiedosto]]ssa kerrottu. Vaiheessa 2 GRUB lataa käytännössä valikon sekä pienen komentokehotteen, jolla voidaan ladata ytimiä jotka eivät valikoihin kuulu. Tämä poistaa myös tarpeen ajaa mitään erillistä karttatiedostoa luovaa ohjelmaa GRUB:n konfiguroinnin jälkeen. Periaatteessa asetustiedosto voi olla vaikka kuinka väärin, sillä se on aina muokattavissa käynnistyksen yhteydessä (ellei sitä ole suojattu salasanalla ja salasana on hukassa).
Aivan kuten LILO, myöskään GRUB ei pysty käynnistymään suoraan boottisektorilta, vaan sekin jakautuu eri vaiheisiin. Boottisektorille mahtuu itseasiassa vain yksi+reilu vaihetta, joten ensimmäisen vaiheen jälkeen GRUB siirtyy oikeastaan vaiheeseen 1,5. Vaiheessa 1,5 GRUB lataa tiedostojärjestelmän sille osiolle, millä toinen vaihe sijaitsee. Riippuen käytettävästä tiedostojärjestelmästä, ladataan aina eri tiedostojärjestelmälle eri 1,5 vaihe. Koska GRUB lataa tiedostojärjestelmän karttatiedoston sijaan, voi se myös siis käynnistää ytimen josta sille ei ole aiemmin asetustiedostossa kerrottu. Vaiheessa 2 GRUB lataa käytännössä valikon sekä pienen komentokehotteen, jolla voidaan ladata ytimiä jotka eivät valikoihin kuulu. Tämä poistaa myös tarpeen ajaa mitään erillistä karttatiedostoa luovaa ohjelmaa GRUB:n konfiguroinnin jälkeen. Periaatteessa asetustiedosto voi olla vaikka kuinka väärin, sillä se on aina muokattavissa käynnistyksen yhteydessä (ellei sitä ole suojattu salasanalla ja salasana on hukassa).


==Initrd==
==Initrd==
Nykyiset GNU/Linux-jakelupaketit tarjoavat tuen hyvinkin monelle erityyppiselle laitteelle, toiset tarjoavat jopa mahdollisuuden täyteen toiminnallisuuteen pelkältä levykkeeltä käynnistämisen avulla. Ydin alkaakin jo olemaan olennaisessa osassa tässä vaiheessa käynnistystä. Linuxin ydin (siis se kernel) on suunniteltu niin sanotusti ''modulaariseksi'', eli eri tarpeisiin voidaan ladata eri moduuleita aina tarpeen mukaan, eikä kaikki ole käännetty sisään yhteen tiedostoon. Tällä saadaan mukavasti itse ytimen kokoa pieneksi ja se osittain mahdollistaa myös levykkeeltä käynnistämisen. Joissain tapauksissa kuitenkin modulaarisuus aiheuttaa ongelmia, hyvänä esimerkkinä toiminee tiedostojärjestelmä. Jos meidän pitää ladata tiedostojärjestelmän moduuli päästäksemme käsiksi levyosioon jossa tämä moduuli sijaitsee, olemme luonnollisesti ongelmissa. Tätä varten GNU/Linuxin käynnistykseen onkin keksitty sellainen järjestelmä kuin initrd.
Nykyiset GNU/Linux-jakelupaketit tarjoavat tuen hyvinkin monelle erityyppiselle laitteelle, toiset tarjoavat jopa mahdollisuuden täyteen toiminnallisuuteen pelkältä levykkeeltä käynnistämisen avulla. Ydin alkaakin jo olemaan olennaisessa osassa tässä vaiheessa käynnistystä. Linuxin ydin (siis se kernel) on suunniteltu niin sanotusti ''modulaariseksi'', eli eri tarpeisiin voidaan ladata eri moduuleita aina tarpeen mukaan, eikä kaikki ole käännetty sisään yhteen tiedostoon. Tällä saadaan mukavasti itse ytimen kokoa pieneksi ja se osittain mahdollistaa myös levykkeeltä käynnistämisen. Joissain tapauksissa kuitenkin modulaarisuus aiheuttaa ongelmia, hyvänä esimerkkinä toiminee tiedostojärjestelmä. Jos meidän pitää ladata tiedostojärjestelmän moduuli päästäksemme käsiksi levyosioon jossa tämä moduuli sijaitsee, olemme luonnollisesti ongelmissa. Tätä varten GNU/Linuxin käynnistykseen onkin keksitty sellainen järjestelmä kuin initrd.


[[Initrd]] (''Initial RAM Disk Image'') on pieni "kuva" RAM-muistiin sijoitettavasta paketista, joka sisältää erinäisiä pakattuja ja käynnistyksen kannalta tarpeellisia moduuleita (kuten SCSI-ohjaimia ja verkkokäynnistysmoduuleita ). Initrd ei ole aina tarpeellinen, kuten käytettäessä itse käännettyä ydintä, jonka sisään on kaikki käynnistyksen kannalta tarpeelliset ajurit käännetty eikä useampaa laitetta tarvitse käynnistyksen yhteydessä tukea. Kuitenkin monien jakelupakettien kanssa, joiden pitäis itoimia useilla tuhansilla (ellei jopa miljoonilla) erilaisilla laitekokoonpanoilla, on initrd lähes välttämätön, jottei itse ydin paisu mahdottoman suureksi. Käytännössä initrd on siis pakattu juuritiedostojärjestelmä jonka sisään on pakattu erilaiset käynnistettävät moduulit. Tämä mahdollistaa jopa 8Mt:n jakelupaketin pakkaamisen yhdelle yksittäiselle levykkeelle.
[[Initrd]] (''Initial RAM Disk Image'') on pieni "kuva" RAM-muistiin sijoitettavasta paketista, joka sisältää erinäisiä pakattuja ja käynnistyksen kannalta tarpeellisia moduuleita (kuten [[wikipedia:fi:SCSI|SCSI]]-ohjaimia ja verkkokäynnistysmoduuleita ). Initrd ei ole aina tarpeellinen, kuten käytettäessä itse käännettyä ydintä, jonka sisään on kaikki käynnistyksen kannalta tarpeelliset ajurit käännetty eikä useampaa laitetta tarvitse käynnistyksen yhteydessä tukea. Kuitenkin monien jakelupakettien kanssa, joiden pitäisi toimia useilla tuhansilla (ellei jopa miljoonilla) erilaisilla laitekokoonpanoilla, on initrd lähes välttämätön, jottei itse ydin paisu mahdottoman suureksi. Käytännössä initrd on siis pakattu juuritiedostojärjestelmä jonka sisään on pakattu erilaiset käynnistettävät moduulit. Tämä mahdollistaa jopa 8Mt:n jakelupaketin pakkaamisen yhdelle yksittäiselle levykkeelle.


==Ytimen lataaminen==
==Ytimen lataaminen==
Pieni välikatsaus tässä vaiheessa lienee paikallaan. Tähän mennessä siis olemme painaneet virtanappia, BIOS on ladannut käynnistyslataimen, joka on mahdollisesti ladannut initrd:n fyysiseen muistiin ja kohta ydin jo latautuukin ja suorittaa koodia. Tässä vaiheessa, riippumatta siitä että onko initrd:tä käytetty vai ei, voimme valmistautua itse ytimen latautumiseen.
Pieni välikatsaus tässä vaiheessa lienee paikallaan. Tähän mennessä siis olemme painaneet virtanappia, BIOS on ladannut käynnistyslataimen, joka on mahdollisesti ladannut initrd:n fyysiseen muistiin ja kohta ydin jo latautuukin ja suorittaa koodia. Tässä vaiheessa, riippumatta siitä että onko initrd:tä käytetty vai ei, voimme valmistautua itse ytimen latautumiseen.


Ensimmäisenä käynnistyslatain lataa ytimen muistiin ja kontrolli siirtyy käynnistyslataimelta ytimelle. Ydin sisältää ytimen levykuvan purkuun tarvittavat järjestelmät ja kyseinen levykuva puretaan. Purkamisen jälkeen järjestelmälaitteet alustetaan - myös ne, jotka BIOS on jo aiemmin alustanut. Tämä mahdollistaa BIOS:ista riippumattoman järjestelmän käynnistämisen. Nyt purettu ydin ottaa koneen kunnolla valtaansa ja rupeaa alustamaan keskeytyksiä, [[scheduler]]eita, konsoleita sekä erinäisiä rautapuolen laitteita. Kun alustukset on tehty, kutsutaan ohjelmaa nimeltä [[init]]. Init on ohjelma, joka määrää linuxin käynnistysjärjestyksen sekä sen, mitä käynnistetään. Init-järjestelmiä voi olla kahdenlaisia. Toinen on skriptityylinen Init, joka määrää kaiken yhden skriptitiedoston perusteella ja toinen (käytössä lähes poikkeuksetta nykyisissä jakelupaketeissa) on System V Init, joka lataa yhden tiedoston perusteella tarvittavat palvelut modulaarisesti.  
Ensimmäisenä käynnistyslatain lataa ytimen muistiin ja kontrolli siirtyy käynnistyslataimelta ytimelle. Ydin sisältää ytimen [[levykuva]]n purkuun tarvittavat järjestelmät ja kyseinen levykuva puretaan. Purkamisen jälkeen järjestelmälaitteet alustetaan - myös ne, jotka BIOS on jo aiemmin alustanut. Tämä mahdollistaa BIOS:ista riippumattoman järjestelmän käynnistämisen. Nyt purettu ydin ottaa koneen kunnolla valtaansa ja rupeaa alustamaan keskeytyksiä, [[scheduler]]eita, konsoleita sekä erinäisiä rautapuolen laitteita. Kun alustukset on tehty, kutsutaan ohjelmaa nimeltä init.


===System V Init===
==Init==
Initin käynnistyttyä alkaakin järjestelmän muokkaaminenkin olemaan mahdollista ilman suurempaa työtä. Init toimii siten, että ensimmäisenä se lukee konfiguraation <tt>inittab</tt>-tiedostosta (yleensä <tt>/etc</tt>-hakemistossa). Tiedosto näyttää jotakuinkin tältä:
[[Init]] on ohjelma, joka määrää Linuxin käynnistysjärjestyksen sekä sen, mitä käynnistetään. Init-järjestelmiä on useammanlaisia. Yleisin on [[wikipedia:UNIX System V|System V]] -tyylinen init, jossa skripti lataa halutut palvelut omiin hakemistoihinsa sijoitettujen [[symbolinen linkki|symbolisten linkkien]] perusteella. Toinen yleinen on [[BSD]]-tyylinen init, jossa eri tiloja varten on omat skriptinsä ja käynnistettävät palvelut määritetään asetustiedostossa. Initin ei välttämättä kuitenkaan tarvitse pohjautua skripteihin, vaan esimerkiksi sulautetuissa järjestelmissä se on usein korvattu puhtaalla [[C]]-kielisellä ohjelmalla, joka huolehtii tarvittavien palvelujen käynnistyksestä.
 
===Ajotasot===
 
Initin käynnistyttyä alkaakin järjestelmän muokkaaminenkin olemaan mahdollista ilman suurempaa työtä. Init toimii siten, että ensimmäisenä se lukee konfiguraation <tt>inittab</tt>-asetustiedostosta (yleensä <tt>/etc</tt>-hakemistossa). Tiedosto näyttää jotakuinkin tältä:
<pre>
<pre>
  # Oletusajotaso
  # Oletusajotaso
Rivi 59: Rivi 65:
</pre>
</pre>


<tt>Inittab</tt>-tiedostossa tulee olla [[ajotaso|oletusajotaso]] (näistä lisää myöhemmin), jolle käynnistytään GNU/Linuxin käynnistyessä, terminaalit joita käytetään (virtuaalikonsolit/virtuaaliterminaalit, yleensä kuusi kappaletta), sekä skriptit, joita pitää ajaa aina tietyn ajotason yhteydessä. <tt>Inittab</tt> mahdollistaakin siis räätälöidyn käynnistysjärjestelyn tekemisen hyvinkin pienellä vaivalla. Monessa skriptissä on myös määritelty ''respawn''-parametri, joka tarkoittaa prosessin uudelleenkäynnistämistä heti sen sammumisen jälkeen. Kuten esimerkiksi kun järjestelmästä kirjaudutaan ulos, niin käynnistetään uusi sisäänkirjautumiskehote. Tiedostossa on myös määritelty se, mitä tehdään kun ctrl+alt+del-näppäinyhdistelmää painetaan. <tt>Inittabin</tt> rakenne sekä tiedostojen sijainnit vaihtelevat hyvinkin paljon jakelukohtaisesti, joten niiden säätämistä emme tässä vaiheessa sen enempää käsittele. Esimerkiksi [[RedHat|RedHatilla]] ja [[Debian]]illa on jokaiselle ajotasolle määrätty oma hakemisto, jossa on [[symbolinen linkki|symbolisia linkkejä]] ajettaviin ohjelmiin ja ne on numeroitu erikoisen näköisellä koodilla käynnistysjärjestyksen takaamiseksi. Toiset [[UNIX]]-variantit käyttävät pelkkiä tiedostoja joissa määrätään, mitä järjestelmiä ladataan ja mitä sammutetaan missäkin vaiheessa. Yleispätevänä ohjelmana [[KDE]]:n käyttäjille [[ksysv]] tarjoaa kohtuullisen hyvät mahdollisuudet muokata eri ajotasoja jakelupakettiriippumattomasti.
<tt>Inittab</tt>-tiedostossa tulee olla [[ajotaso|oletusajotaso]] (näistä lisää myöhemmin), jolle käynnistytään GNU/Linuxin käynnistyessä, terminaalit joita käytetään (virtuaalikonsolit/virtuaaliterminaalit, yleensä kuusi kappaletta), sekä skriptit, joita pitää ajaa aina tietyn ajotason yhteydessä. <tt>Inittab</tt> mahdollistaakin siis räätälöidyn käynnistysjärjestelyn tekemisen hyvinkin pienellä vaivalla. Monessa skriptissä on myös määritelty ''respawn''-parametri, joka tarkoittaa prosessin uudelleenkäynnistämistä heti sen sammumisen jälkeen. Kuten esimerkiksi kun järjestelmästä kirjaudutaan ulos, niin käynnistetään uusi sisäänkirjautumiskehote. Tiedostossa on myös määritelty se, mitä tehdään kun ctrl+alt+del-näppäinyhdistelmää painetaan. <tt>Inittabin</tt> rakenne sekä tiedostojen sijainnit vaihtelevat hyvinkin paljon jakelukohtaisesti, joten niiden säätämistä emme tässä vaiheessa sen enempää käsittele. Esimerkiksi [[Red Hat|Red Hatilla]] ja [[Debian]]illa on jokaiselle ajotasolle määrätty oma hakemisto, jossa on [[symbolinen linkki|symbolisia linkkejä]] ajettaviin ohjelmiin ja ne on numeroitu erikoisen näköisellä koodilla käynnistysjärjestyksen takaamiseksi. Toiset [[UNIX]]-variantit käyttävät pelkkiä tiedostoja joissa määrätään, mitä järjestelmiä ladataan ja mitä sammutetaan missäkin vaiheessa. Yleispätevänä ohjelmana [[KDE]]:n käyttäjille [[ksysv]] tarjoaa kohtuullisen hyvät mahdollisuudet muokata eri ajotasoja jakelupakettiriippumattomasti.


Ajotasoista kerrotaan tarkemmin artikkelissa [[Ajotaso]].
Ajotasoista kerrotaan tarkemmin artikkelissa '''[[Ajotaso]]'''.


Nyt kursitaankin sitten kaikki tietomme kokoon, ettei harhauduta reitiltä. BIOS lataa käynnistyslataimen, käynnistyslatain kernelin ja kernel käynnistää init:n. Kun [[init]] käynnistyy, se tekee ensimmäisen init-skriptin vaatimat tehtävät, kuten mounttaa /etc/[[fstab]]-tiedostossa luetellut osiot, asettaa järjestelmän kellon, käynnistää satunnaislukugeneraattorin jne. Tämän jälkeen init lukee konfiguraatiotiedostosta oletusrunlevelin numeron ja hyppää suorittamaan oletusrunlevelin käynnistysskriptiä. Nyt otamme mielikuvituksen käyttöön ja kuvitellaan, että runlevelit olisivat hakemistoja, joten kun init lukee oletusrunlevelin 5, se käynnistää kaikki runlevelin 5 hakemistossa olevat skriptit listatussa järjestyksessä. Jos oletusrunlevel olisi 2, init siis käynnistäisi runlevelin 2 hakemiston sisällön. Käytännössä asia ei aivan näin toimi, mutta periaate räätälöidyistä käynnistysprofiileista tullee selväksi.
Nyt kursitaankin sitten kaikki tietomme kokoon, ettei harhauduta reitiltä. BIOS lataa käynnistyslataimen, käynnistyslatain ytimen ja ydin käynnistää initin. Kun [[init]] käynnistyy, se tekee ensimmäisen init-skriptin vaatimat tehtävät, kuten [[mount|liittää]] /etc/[[fstab]]-tiedostossa luetellut osiot, asettaa järjestelmän kellon, käynnistää satunnaislukugeneraattorin jne. Tämän jälkeen init lukee [[asetustiedosto]]staan oletusajotason numeron ja hyppää suorittamaan oletusajotason käynnistysskriptiä. Nyt otamme mielikuvituksen käyttöön ja kuvitellaan, että ajotasot olisivat hakemistoja, joten kun init lukee oletusajotason 5, se käynnistää kaikki ajotason 5 hakemistossa olevat skriptit listatussa järjestyksessä. Jos oletusajotaso olisi 2, init siis käynnistäisi ajotason 2 hakemiston sisällön. Käytännössä asia ei aivan näin toimi, mutta periaate räätälöidyistä käynnistysprofiileista tullee selväksi.


===Pikkuisen init-skripteistä===
===Pikkuisen init-skripteistä===
Ne pienet ohjelmat, joita käynnistetään eri ajotasoilla sijaitsevat usein hakemistossa /etc/init.d (joskus myös /etc/rc.d/), josta ne sitten on mahdollisesti linkattu eri ajotasojen yhteyteen käynnistettäväksi bootin aikana. Init-skriptit ovat pieniä [[komentotulkki]]ohjelmia, joilla voidaan sammuttaa, käynnistää sekä uudelleenkäynnistää palveluita ja ohjelmia. Joskus on erittäin käytännöllistä käynnistää tai sammuttaa järjestelmän käynnissäollessa ohjelmia näillä pienillä init-skripteillä. Käytännössä init-skriptit ottavat vastaan komentoja ''start'' (käynnistys), ''stop'' (sammutus) sekä ''restart'' (uudelleenkäynnistys). Kuvitellaan että haluamme esimerkiksi sammuttaa [[Apache]]-http-palvelimen ilman [[killall]]-komentoa. Tämä onnistuu komennolla


Ne pienet ohjelmat, joita käynnistetään eri runleveleillä sijaitsevat usein hakemistossa <tt>/etc/init.d</tt>, josta ne sitten on mahdollisesti [[symbolinen linkki|linkitetty]] eri ajotasojen yhteyteen käynnistettäväksi käynnistysprosessin aikana. Init-skriptit ovat pieniä [[shell]]-ohjelmia, joilla voidaan sammuttaa, käynnistää sekä uudelleenkäynnistää palveluita ja ohjelmia. Joskus on erittäin käytännöllistä käynnistää tai sammuttaa järjestelmän käynnissä ollessa ohjelmia näillä pienillä init-skripteillä. Käytännössä init-skriptit ottavat vastaan komentoja ''start'' (käynnistys), ''stop'' (sammutus) ja ''restart'' (uudelleenkäynnistys). Kuvitellaan että haluamme esimerkiksi sammuttaa [[Apache]] http-palvelimen ilman [[killall]]-komentoa. Tämä onnistuu niinkin helposti, kuin
  /etc/init.d/apache stop
  /etc/init.d/apache stop


Rivi 73: Rivi 79:


==Entä initin jälkeen==
==Entä initin jälkeen==
Init käytännössä hoitaa lopun järjestelmän käynnistymisestä, kuten [[display manager]]in (graafinen kirjautumisohjelma) lataamisen sekä mahdollisesti graafisen käyttöympäristön käynnistämisen. Sama init hoitaa myös järjestelmän sammuttamisen ja uudelleenkäynnistämisen. Init-järjestelmä on oikeastaan lähes koko UNIX-tyylisten käyttöjärjestelmien selkäranka mukautettavan käynnistämisen kannalta ja siihen perehtyminen ei koskaan ole liian myöhäistä, ennemmin tai myöhemmin sitä tarvitaan.


Init käytännössä hoitaa lopun järjestelmän käynnistymisestä, kuten [[ikkunamanageri]]n lataamisen sekä mahdollisesti graafisen käyttöympäristön käynnistämisen. Sama init hoitaa myös järjestelmän sammuttamisen ja uudelleenkäynnistämisen. Init-järjestelmä on oikeastaan lähes koko UNIX-tyylisten käyttöjärjestelmien selkäranka muokattavan käynnistämisen kannalta ja siihen perehtyminen ei koskaan ole liian myöhäistä, ennemmin tai myöhemmin sitä tarvitaan.
[[Luokka:Ohjeet]]
 
[[Luokka:Perustietoa]]
[[Luokka:Järjestelmä]]
[[Luokka:Järjestelmä]]

Versio 18. elokuuta 2007 kello 19.22

Yleensä käyttäjän ei tarvitse huolehtia siitä, mitä tapahtuu sillä välin kun tietokoneeseen kytketään virta ja ruudulle ilmestyy graafinen ympäristö, jossa pyydetään kauniisti kirjautumaan sisään järjestelmään. Kuitenkin jossain vaiheessa saattaa tavankin käyttäjälle tulla halu säätää käynnistysaikaa tai vaikka käynnistyviä palveluita. Tällöin olisi hyvä tuntea kuinka järjestelmä itseasiassa käynnistyykään. Tässä artikkelissa pyritään selvittämään tapahtumia virtanapin ja järjestelmään kirjautumisen välissä. Ikävä kyllä artikkeli ei voi tarjota kaikille jakeluille "suoraa lähestymistä", mutta kirjoittaessa on pyritty tästä tekemään mahdollisimman jakeluriippumaton.

Virtanapista eteenpäin

Käynnistymisen ensimmäiset vaiheet eivät juuri mitenkään liity itse käyttöjärjestelmään. Yleensä virran kytkemisen jälkeen tietokone lataa BIOS:n, joka on pieni ohjelma emolevyn erillisellä muistipiirillä. Tämä pieni ohjelma, joka pyörii pienellä piisirulla tekee ensimmäisenä käynnistyttyään POST-testin (Power-On-Self-Test), joka tarkastaa, että tiettyjä laitteita (kuten muistit, emolevy ja prosessori) on paikalla, ja että ne ovat toimintakunnossa. Sen jälkeen BIOS alustaa joitakin järjestelmäkomponentteja (kuten kiintolevyt), jakaa niille keskeytyksiä sekä tulostaa niistä taulukon ruudulle. Kaiken muun tehtävän seassa voitaisiin sanoa, että BIOS:illa on päätehtävä, jonka tarkoitus on etsiä käynnistettävän median aivan alkupäästä ohjelma, joka kykenee lataamaan käyttöjärjestelmän. Voitaisiinkin sanoa, että BIOS ei ole olemassakaan mitään muuta varten kuin sitä, että se osaa ladata ohjelman nimeltä käynnistyslatain. Käynnistyslatain sijaitsee yleensä pääkäynnistyssektorilla (Master Boot Record, MBR), joka sijaitsee yleensä käynnistettävän median alkupäässä. Kiintolevyistä puhuttaessa alkupää on ensimmäinen sektori, ensimmäinen sylinteri sekä ensimmäinen lukupää.

Käynnistyslatain

Käynnistyslatain on siis ohjelma, joka kykenee lataamaan käyttöjärjestelmän. Tämä onkin oikeastaan ensimmäinen vaihe, jossa pystytään puhumaan GNU/Linuxin käynnistysprosessista. Termi on käynnistyslatain on useimmille tuttu, ja monelle se tulee vielä tutummaksi kun mainitaan, että kaksi suosituinta käynnistyslatainta ovat GRUB (Grand Unified Bootloader) sekä LILO (Linux Loader). Käynnistyslataimen tehtävä on tarjota tietokoneelle keino päästä käynnistämään käyttöjärjestelmän ydintä, eli kerneliä. Miksi BIOS ei sitten voi suoraan käynnistää ydintä, niinhän Windowskin kai tekee? Itseasiassa näin ei Windowskaan tee. Vaikka ruudulle ei tulekaan mitään tekstiä, joka kehottaa valitsemaan käyttöjärjestelmää, vaatii myöskin Windows käynnistyslataimen.

Nyt tiedämme, että BIOS lataa käynnistyslataimen ja käynnistyslataimen tehtävä on ladata käyttöjärjestelmän ydin. Mitä eroa sitten LILO:lla ja GRUB:lla on? Vaikka LILO ja GRUB vaikuttavat hyvinkin samanlaisilta ohjelmilta, ne molemmat tarjoavat käynnistysvalikon, mistä saa valittua ladattavan käyttöjärjestelmän ja ne molemmat myös lataavat itse käyttöjärjestelmän. Ero piileekin lähinnä siinä, kuinka nämä käynnistyslataimet sen tekevät.

LILOn lähestymistapa

Voisi kuvitella, että kaikki tiedostot ovat käynnistyssektorilla vain odottamassa lataamista. Näin ei kuitenkaan ole, sillä käynnistyssektori on aivan liian pieni ytimelle tai edes kokonaiselle LILOlle. Tästä syystä LILO onkin käytännössä pilkottu eri "vaiheisiin". Ensimmäisenä kun BIOS lataa käynnistyslataimen (tässä tilanteessa LILOn), se lataa tosiasiassa vain pienen osan koodia, joka osaa käynnistää toisen vaiheen suoraan kiintolevyltä. Ensimmäisen vaiheen jälkeen LILO tulostaa ruudulle kirjaimen L. Kun toinen vaihe on ladattu, LILO tulostaa ruudulle I-kirjaimen ja käynnistää toisen vaiheen. Toisen vaiheen käynnistämisen jälkeen LILO tulostaa ruudulle L-kirjaimen ja yrittää lukea kiintolevyltä karttatiedoston, joka kertoo LILOlle mm. mitä käyttöjärjestelmiä levyllä on ja missä ne sijaitsevat. Jos tämän karttatiedoston lataaminen onnistuu, printtaa LILO ruudulle O-kirjaimen. Nämä tulostetut kirjaimet mahdollistavat myös LILO:n virhetilanteiden korjaamisen, ja ne ovat dokumentoitu varsin hyvin, joten hakukoneen pitäisi auttaa ongelmatilanteissa.

LILOn suurin ongelma on karttatiedoston tarve. Eli jos jostain syystä levyn geometria muuttuu tai karttatiedosto on väärä tai viallinen, ei LILO osaa enää käynnistää ydintä. Tämä on periaatteessa korjattavissa rescue-cd:llä, sillä LILO sisältää komennon nimeltä "lilo", joka kirjoittaa oikeellisen karttatiedoston. Tämä aiheuttaa myös sen, että komento "lilo" tulee ajaa aina kun käännetään uusi ydin tai muutetaan LILO:n asetuksia. Tämän karttatiedoston tarpeen poistamiseen onkin kehitetty toinen käynnistyslatain nimeltään GRUB.

GRUBin lähestymistapa

Aivan kuten LILO, myöskään GRUB ei pysty käynnistymään suoraan käynnistyssektorilta, vaan sekin jakautuu eri vaiheisiin. Käynnistyssektorille mahtuu itseasiassa vain yksi ja puoli vaihetta, joten ensimmäisen vaiheen jälkeen GRUB siirtyy oikeastaan vaiheeseen 1,5. Vaiheessa 1,5 GRUB lataa tiedostojärjestelmän sille osiolle, millä toinen vaihe sijaitsee. Riippuen käytettävästä tiedostojärjestelmästä, ladataan aina eri tiedostojärjestelmälle eri 1,5 vaihe. Koska GRUB lataa tiedostojärjestelmän karttatiedoston sijaan, voi se myös siis käynnistää ytimen josta sille ei ole aiemmin asetustiedostossa kerrottu. Vaiheessa 2 GRUB lataa käytännössä valikon sekä pienen komentokehotteen, jolla voidaan ladata ytimiä jotka eivät valikoihin kuulu. Tämä poistaa myös tarpeen ajaa mitään erillistä karttatiedostoa luovaa ohjelmaa GRUB:n konfiguroinnin jälkeen. Periaatteessa asetustiedosto voi olla vaikka kuinka väärin, sillä se on aina muokattavissa käynnistyksen yhteydessä (ellei sitä ole suojattu salasanalla ja salasana on hukassa).

Initrd

Nykyiset GNU/Linux-jakelupaketit tarjoavat tuen hyvinkin monelle erityyppiselle laitteelle, toiset tarjoavat jopa mahdollisuuden täyteen toiminnallisuuteen pelkältä levykkeeltä käynnistämisen avulla. Ydin alkaakin jo olemaan olennaisessa osassa tässä vaiheessa käynnistystä. Linuxin ydin (siis se kernel) on suunniteltu niin sanotusti modulaariseksi, eli eri tarpeisiin voidaan ladata eri moduuleita aina tarpeen mukaan, eikä kaikki ole käännetty sisään yhteen tiedostoon. Tällä saadaan mukavasti itse ytimen kokoa pieneksi ja se osittain mahdollistaa myös levykkeeltä käynnistämisen. Joissain tapauksissa kuitenkin modulaarisuus aiheuttaa ongelmia, hyvänä esimerkkinä toiminee tiedostojärjestelmä. Jos meidän pitää ladata tiedostojärjestelmän moduuli päästäksemme käsiksi levyosioon jossa tämä moduuli sijaitsee, olemme luonnollisesti ongelmissa. Tätä varten GNU/Linuxin käynnistykseen onkin keksitty sellainen järjestelmä kuin initrd.

Initrd (Initial RAM Disk Image) on pieni "kuva" RAM-muistiin sijoitettavasta paketista, joka sisältää erinäisiä pakattuja ja käynnistyksen kannalta tarpeellisia moduuleita (kuten SCSI-ohjaimia ja verkkokäynnistysmoduuleita ). Initrd ei ole aina tarpeellinen, kuten käytettäessä itse käännettyä ydintä, jonka sisään on kaikki käynnistyksen kannalta tarpeelliset ajurit käännetty eikä useampaa laitetta tarvitse käynnistyksen yhteydessä tukea. Kuitenkin monien jakelupakettien kanssa, joiden pitäisi toimia useilla tuhansilla (ellei jopa miljoonilla) erilaisilla laitekokoonpanoilla, on initrd lähes välttämätön, jottei itse ydin paisu mahdottoman suureksi. Käytännössä initrd on siis pakattu juuritiedostojärjestelmä jonka sisään on pakattu erilaiset käynnistettävät moduulit. Tämä mahdollistaa jopa 8Mt:n jakelupaketin pakkaamisen yhdelle yksittäiselle levykkeelle.

Ytimen lataaminen

Pieni välikatsaus tässä vaiheessa lienee paikallaan. Tähän mennessä siis olemme painaneet virtanappia, BIOS on ladannut käynnistyslataimen, joka on mahdollisesti ladannut initrd:n fyysiseen muistiin ja kohta ydin jo latautuukin ja suorittaa koodia. Tässä vaiheessa, riippumatta siitä että onko initrd:tä käytetty vai ei, voimme valmistautua itse ytimen latautumiseen.

Ensimmäisenä käynnistyslatain lataa ytimen muistiin ja kontrolli siirtyy käynnistyslataimelta ytimelle. Ydin sisältää ytimen levykuvan purkuun tarvittavat järjestelmät ja kyseinen levykuva puretaan. Purkamisen jälkeen järjestelmälaitteet alustetaan - myös ne, jotka BIOS on jo aiemmin alustanut. Tämä mahdollistaa BIOS:ista riippumattoman järjestelmän käynnistämisen. Nyt purettu ydin ottaa koneen kunnolla valtaansa ja rupeaa alustamaan keskeytyksiä, schedulereita, konsoleita sekä erinäisiä rautapuolen laitteita. Kun alustukset on tehty, kutsutaan ohjelmaa nimeltä init.

Init

Init on ohjelma, joka määrää Linuxin käynnistysjärjestyksen sekä sen, mitä käynnistetään. Init-järjestelmiä on useammanlaisia. Yleisin on System V -tyylinen init, jossa skripti lataa halutut palvelut omiin hakemistoihinsa sijoitettujen symbolisten linkkien perusteella. Toinen yleinen on BSD-tyylinen init, jossa eri tiloja varten on omat skriptinsä ja käynnistettävät palvelut määritetään asetustiedostossa. Initin ei välttämättä kuitenkaan tarvitse pohjautua skripteihin, vaan esimerkiksi sulautetuissa järjestelmissä se on usein korvattu puhtaalla C-kielisellä ohjelmalla, joka huolehtii tarvittavien palvelujen käynnistyksestä.

Ajotasot

Initin käynnistyttyä alkaakin järjestelmän muokkaaminenkin olemaan mahdollista ilman suurempaa työtä. Init toimii siten, että ensimmäisenä se lukee konfiguraation inittab-asetustiedostosta (yleensä /etc-hakemistossa). Tiedosto näyttää jotakuinkin tältä:

 # Oletusajotaso
 id:3:initdefault:
 
 # Järjestelmän alustus, paikallisten levyjen liittäminen ym.
 si::sysinit:/sbin/rc sysinit
 
 # Myöhempi alustus, aloittaa ajotasot
 rc::bootwait:/sbin/rc boot
 
 l0:0:wait:/sbin/rc shutdown
 l1:S1:wait:/sbin/rc single
 l2:2:wait:/sbin/rc nonetwork
 l3:3:wait:/sbin/rc default
 l4:4:wait:/sbin/rc default
 l5:5:wait:/sbin/rc default
 l6:6:wait:/sbin/rc reboot
 #z6:6:respawn:/sbin/sulogin
 
 # Terminaalit
 c1:12345:respawn:/sbin/agetty 38400 tty1 linux
 c2:12345:respawn:/sbin/agetty 38400 tty2 linux
 c3:12345:respawn:/sbin/agetty 38400 tty3 linux
 c4:12345:respawn:/sbin/agetty 38400 tty4 linux
 c5:12345:respawn:/sbin/agetty 38400 tty5 linux
 c6:12345:respawn:/sbin/agetty 38400 tty6 linux
 
 # Mitä tehdään, kun painetaan ctrl+alt+del.
 ca:12345:ctrlaltdel:/sbin/shutdown -r now

Inittab-tiedostossa tulee olla oletusajotaso (näistä lisää myöhemmin), jolle käynnistytään GNU/Linuxin käynnistyessä, terminaalit joita käytetään (virtuaalikonsolit/virtuaaliterminaalit, yleensä kuusi kappaletta), sekä skriptit, joita pitää ajaa aina tietyn ajotason yhteydessä. Inittab mahdollistaakin siis räätälöidyn käynnistysjärjestelyn tekemisen hyvinkin pienellä vaivalla. Monessa skriptissä on myös määritelty respawn-parametri, joka tarkoittaa prosessin uudelleenkäynnistämistä heti sen sammumisen jälkeen. Kuten esimerkiksi kun järjestelmästä kirjaudutaan ulos, niin käynnistetään uusi sisäänkirjautumiskehote. Tiedostossa on myös määritelty se, mitä tehdään kun ctrl+alt+del-näppäinyhdistelmää painetaan. Inittabin rakenne sekä tiedostojen sijainnit vaihtelevat hyvinkin paljon jakelukohtaisesti, joten niiden säätämistä emme tässä vaiheessa sen enempää käsittele. Esimerkiksi Red Hatilla ja Debianilla on jokaiselle ajotasolle määrätty oma hakemisto, jossa on symbolisia linkkejä ajettaviin ohjelmiin ja ne on numeroitu erikoisen näköisellä koodilla käynnistysjärjestyksen takaamiseksi. Toiset UNIX-variantit käyttävät pelkkiä tiedostoja joissa määrätään, mitä järjestelmiä ladataan ja mitä sammutetaan missäkin vaiheessa. Yleispätevänä ohjelmana KDE:n käyttäjille ksysv tarjoaa kohtuullisen hyvät mahdollisuudet muokata eri ajotasoja jakelupakettiriippumattomasti.

Ajotasoista kerrotaan tarkemmin artikkelissa Ajotaso.

Nyt kursitaankin sitten kaikki tietomme kokoon, ettei harhauduta reitiltä. BIOS lataa käynnistyslataimen, käynnistyslatain ytimen ja ydin käynnistää initin. Kun init käynnistyy, se tekee ensimmäisen init-skriptin vaatimat tehtävät, kuten liittää /etc/fstab-tiedostossa luetellut osiot, asettaa järjestelmän kellon, käynnistää satunnaislukugeneraattorin jne. Tämän jälkeen init lukee asetustiedostostaan oletusajotason numeron ja hyppää suorittamaan oletusajotason käynnistysskriptiä. Nyt otamme mielikuvituksen käyttöön ja kuvitellaan, että ajotasot olisivat hakemistoja, joten kun init lukee oletusajotason 5, se käynnistää kaikki ajotason 5 hakemistossa olevat skriptit listatussa järjestyksessä. Jos oletusajotaso olisi 2, init siis käynnistäisi ajotason 2 hakemiston sisällön. Käytännössä asia ei aivan näin toimi, mutta periaate räätälöidyistä käynnistysprofiileista tullee selväksi.

Pikkuisen init-skripteistä

Ne pienet ohjelmat, joita käynnistetään eri ajotasoilla sijaitsevat usein hakemistossa /etc/init.d (joskus myös /etc/rc.d/), josta ne sitten on mahdollisesti linkattu eri ajotasojen yhteyteen käynnistettäväksi bootin aikana. Init-skriptit ovat pieniä komentotulkkiohjelmia, joilla voidaan sammuttaa, käynnistää sekä uudelleenkäynnistää palveluita ja ohjelmia. Joskus on erittäin käytännöllistä käynnistää tai sammuttaa järjestelmän käynnissäollessa ohjelmia näillä pienillä init-skripteillä. Käytännössä init-skriptit ottavat vastaan komentoja start (käynnistys), stop (sammutus) sekä restart (uudelleenkäynnistys). Kuvitellaan että haluamme esimerkiksi sammuttaa Apache-http-palvelimen ilman killall-komentoa. Tämä onnistuu komennolla

/etc/init.d/apache stop

Pitää kuitenkin muistaa, että hakemisto ei välttämättä ole jokaisessa jakelupaketissa sama, mutta teoriassa näin voimme kätevästi hallita ohjelmia ihan järjestelmän käydessä.

Entä initin jälkeen

Init käytännössä hoitaa lopun järjestelmän käynnistymisestä, kuten display managerin (graafinen kirjautumisohjelma) lataamisen sekä mahdollisesti graafisen käyttöympäristön käynnistämisen. Sama init hoitaa myös järjestelmän sammuttamisen ja uudelleenkäynnistämisen. Init-järjestelmä on oikeastaan lähes koko UNIX-tyylisten käyttöjärjestelmien selkäranka mukautettavan käynnistämisen kannalta ja siihen perehtyminen ei koskaan ole liian myöhäistä, ennemmin tai myöhemmin sitä tarvitaan.