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

Siirry navigaatioon Siirry hakuun
848 merkkiä lisätty ,  18. elokuuta 2008
(lisäwikitystä)
(6 välissä olevaa versiota 6 käyttäjän tekeminä ei näytetä)
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 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.
[[Kuva:Bootchart.png|right|thumb|200px|[[Bootchart]]-diagrammi [[Ubuntu]]n käynnistymisestä.]]
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 painalluksen 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==
Rivi 6: Rivi 7:
==Käynnistyslatain==
==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/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]]. 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.
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 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 [[ydin]]tä, 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.
 
Linux-asennusten mukana tulevissa käynnistyslataimissa voidaan myös mm valita usean eri käynnistettävän ytimen tai käyttöjärjestelmän väliltä, antaa ytimelle sen toimintaan vaikuttavia [[ytimen käynnistysparametrit|parametreja]] sekä asettaa käynnistyslataimelle salasana.


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.
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.
Rivi 13: Rivi 16:
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 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 [[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. Syy GRUBin kehittämiseen oli, ettei LILO osaa käynnistää Hurdin kaltaista mikrokerneliarkitehtuuria-->


===GRUBin lähestymistapa===
===GRUBin lähestymistapa===
Rivi 26: Rivi 29:
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 [[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.
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 ajetaan skripti tai ohjelma /linuxrc, jos sellainen on initrd:llä. Tämän jälkeen liitetään root-osio tiedostojärjestelmän juureksi initrd:n tilalle. Nyt valmistelut on tehty ja  käynnistetään ohjelma /sbin/init (tai sen sijaan muu ohjelma, jos ytimen komentorivillä on init=/jokin/ohjelma).


==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 [[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ä.  
[[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===
===Ajotasot===
Rivi 77: Rivi 80:


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ä.
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ä.
Yleisimmät [[Init-skriptit]] selityksineen.


==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 [[graafinen kirjautumisohjelma|graafisen kirjautumisohjelman]] (display manager) 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.


[[Luokka:Ohjeet]]
[[Luokka:Ohjeet]]
[[Luokka:Järjestelmä]]
[[Luokka:Järjestelmä]]
4 316

muokkausta

Navigointivalikko