5 Alglaadimine ja süsteemi sulgemine
See peatükk selgitab, mis toimub süsteemi Linux käivitamisel ja sulgemisel ning kuidas seda korralikult teha. Kui õigeid protseduure ei järgita, võivad failid kaduda või rikneda.
5.1 Ülevaade alglaadimisest ja süsteemi sulgemistest
Arvuti käivitamist ja operatsioonisüsteemi automaatset laadimist nimetatakse alglaadimiseks. Vanematel arvutitel ei piisanud tema sisselülitamisest ja lisaks tuli käsitsi laadida operatsioonisüsteem.
Alglaadimise ajal loeb arvuti kõigepealt mällu väikese koodi nimega alglaaduri laadija, mis omakorda laadib ja käivitab operatsioonisüsteemi. Alglaaduri laadija on tavaliselt salvestatud fikseeritud kohas kõvakettal või disketil. Protsessi kaheastmelisuse tingib operatsioonisüsteemi suurus ja keerukus, aga koodi esimene osa peab olema väga väike (mõnisada baiti) vältimaks püsivara liigset keerukust.
Eri arvutid teostavad alglaaduri laadimise erinevalt. PC-del loeb arvuti (tema BIOS) esimese sektori (alglaadesektori) disketilt või kõvakettalt. Selles sektoris paikneb alglaaduri laadija. Viimane omakorda laadib ülejäänud operatsioonisüsteemi kettalt.
Pärast Linuxi laadimist aktiveeritakse riistvara ja seadmedraiverid ning käivitub init. Programm init käivitab teised protsessid, mis võimaldavad kasutajal end sisse logida ja sooritada vajalikke toiminguid. Selle osa üksikasju vaadeldakse edaspidi.
Süsteemi Linux sulgemiseks kästakse kõigepealt kõigil protsessidel tegevus lõpetada (mis tähendab failide sulgemist ning muude ettenähtud haldusoperatsioonide teostamist), siis ühendatakse lahti failisüsteemid ja saalealad ning lõpuks väljastatakse puldil teade, et voolu võib välja lülitada. Kui õiget protseduuri mitte järgida, võivad tekkida ebameeldivused. Kõige tähtsam, failisüsteemi puhvermälu võib jääda tühjendamata. See tähendab puhvri kõigi andmete kaotsiminekut, mistõttu failisüsteem kettal võib muutuda vastuoluliseks ning kasutuskõlbmatuks.
5.2 Alglaadeprotsess lähipilguga
Linuxi alglaadimist (buutimist) saab teostada nii disketilt kui kõvakettalt. PC alglaadimisel teeb BIOS erinevaid kontrollteste ja alles siis käivitab tegeliku alglaadimise. Seejärel valitakse kettadraiv (reeglina esimene disketidraiv, kui sinna on diskett sisse pandud; muidu esimene kõvaketas, kui see on arvutisse installeeritud; järjekord on ka muudetav) ja loetakse esimene sektor. Viimast nimetatakse alglaadesektoriks, kõvakettal aga ülem-alglaadekirjeks, kuna kõvaketas võib sisaldada mitmeid eraldi alglaadesektoriga sektsioone.
Alglaadesektor sisaldab väikese programmi (piisavalt väikese mahtumaks ühte sektorisse), mille ülesandeks on lugeda tegelik operatsioonisüsteem kettalt ja käivitada ta. Disketilt laadimisel sisaldab alglaadesektor koodi, mis loeb lihtsalt esimesed paarsada plokki (loomulikult sõltuvalt tuuma tegelikust suurusest) eelmääratletud kohta mälus. Linuxi alglaadedisketil pole failisüsteemi, tuum on lihtsalt salvestatud järjestikustesse sektoritesse, kuna see lihtsustab alglaadeprotsessi. On võimalik buutida ka failisüsteemiga disketilt, kasutades programmi LILO (LInux LOader).
Kõvakettalt buutimisel uurib registris MBR asuv kood jaotustabelit (paikneb samuti MBR-is), tuvastab aktiivse sektsiooni (alglaetavana tähistatud sektsiooni), loeb selle sektsiooni alglaadesektori ja käivitab seal asjakohase koodi. Viimane sooritab disketi alglaadesektori toimingud: loeb sektsioonist tuuma ning käivitab selle. Detailid varieeruvad, aga kuna üldiselt pole kasulik omada eraldi sektsiooni ainult tuuma kujutise jaoks, siis sektsiooni alglaadesektoris asuv kood ei saa lugeda ketast järjest, vaid peab leidma failisüsteemi määratletud sektorid. Probleemi saab lahendada mitmeti, aga kõige loomulikum on kasutada LILO-t.
LILO-ga buutimisel läheb programm harilikult edasi ning loeb ja taaskäivitab vaiketuuma. LILO saab konfigureerida buutima ühte mitmest võimalikust tuumast või isegi mõnda teist operatsioonisüsteemi, mis lubab kasutajal valida, millist tuuma või operatsioonisüsteemi alglaadimisel võtta. LILO kasutamisel võib hoida alglaadimise ajal all klahvi alt, shift või ctrl (kui LILO on juba laaditud): sel juhul küsib LILO, mida buuditakse, ja ei laadi vaikimisi kohe edasi. Alternatiivselt saab LILO konfigureerida nii, et alati esitatakse valikulise ajalõpuga küsimus ning mittevastamine põhjustab vaikimisi valitud tuuma laadimise.
Alglaadimine disketilt ja kõvakettalt omavad mõlemad plusse ja miinuseid, aga üldiselt on kõvakettalt buutimine mugavam, kuna väldib diskettidega õiendamise. Ta on ka kiirem.
Pärast Linuxi tuuma mällulugemist suvaliste vahenditega ja tema õiget käivitamist kulgeb edasine protsess üldjoontes järgmiselt:
LILO boot:
Loading linux.
Console: colour EGA+ 80x25, 8 virtual consoles
Serial driver version 3.94 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
lp_init: lp1 exists (0), using polling driver
Memory: 7332k/8192k available (300k kernel code, 384k reserved, 176k data)
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M
Loopback device init
Warning WD8013 board not found at i/o = 280.
Math coprocessor using irq13 error reporting.
Partition check:
hda: hda1 hda2 hda3
VFS: Mounted root (ext filesystem).
Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20
Täpsed tekstid on eri süsteemidel erinevad ning sõltuvad riistvarast, kasutatavast Linuxi versioonist ja konfiguratsioonist.
5.3 Süsteemi sulgemisest
Süsteemi Linux sulgemisel tuleb järgida õigeid protseduure. Kui see ei õnnestu, muutub failisüsteem tõenäoliselt kasutuks rämpsuks ja paljud failid kasutuskõlbmatuteks. Põhjuseks on Linuxi kettavahemälu, millest ei kirjutata andmeid kettale kohe, vaid teatud ajalise intervalliga. See parandab küll tublisti jõudlust, aga samas tähendab, et kui lihtsalt arvutist vool välja lülitada, võib mälus olla palju andmeid ja ketta sisu ei pruugi moodustada terviklikku töötavat failisüsteemi (sest ainult osa on kettale kirjutatud).
Teine põhjus toitelülitist vältimiseks on see, et multitegumtöö puhul leidub taustal mitmeid töötavaid protsesse ja voolu väljalülitamine võib osutuda hävitavaks. Õige sulgemisjärjestuse kasutamisel kindlustatakse ka kõigi taustprotsesside andmete salvestamine.
Süsteemi Linux õigeks sulgemiseks on ette nähtud käsk shutdown. Tavaliselt kasutatakse seda käsku ühel viisil kahest.
Ainukasutaja korral rakendatakse käsku shutdown reeglina järgmiselt: väljuda kõigist programmidest, logida välja kõigist virtuaalpultidest, logida juurena sisse ühte virtuaalpulti (või jääda juurena sisse, kui olete seda juba varem teinud; tuleb aga minna juurkataloogi vältimaks probleeme failisüsteemide lahutamisega) ja seejärel anda käsk shutdown -h now (kui soovite viivitada, siis now asemel plussmärk minutite arvuga, kuigi ainukasutaja süsteemis pole see vajalik).
Alternatiivselt, kui süsteemil on palju kasutajaid, andke käsk shutdown -h +aeg teade, kus aeg on aeg minutites süsteemi seiskumiseni ja teade on lühike selgitus süsteemi sulgemise põhjuste kohta.
# shutdown -h +10 Me installeerime uue ketta. Süsteem peaks
> uuesti töös olema kolme tunni pärast.
#
See hoiatab kõiki, et süsteem suletakse 10 minuti pärast ja ohutum on töö lõpetada või muidu riskite andmete kaotsiminekuga. Hoiatus saadetakse igasse terminali, kust keegi on sisse loginud, kaasa arvatud kõik xterm'id:
Broadcast message from root (ttyp0) Wed Aug 2 01:03:25 1995...
Me installeerime uue ketta. Süsteem peaks
uuesti töös olema kolme tunni pärast.
The system is going DOWN for system halt in 10 minutes !!
Kui aeg hakkab lõpule jõudma, korratakse hoiatust automaatselt mõned korrad järjest lühemate intervallidega.
Pärast kõiki viivitusi algab tegelik sulgemine: lahutatakse kõik failisüsteemid (välja arvatud juur), kõrvaldatakse kasutajate protsessid (kui keegi on veel sisse loginud) ja suletakse deemonid. Kui see on tehtud, väljastab init teate, et võite arvuti toite välja lülitada. Toitelülitit tohib kasutada siis ja ainult siis.
Mõnikord (ehkki soliidse süsteemi puhul harva) on võimatu süsteemi korrektselt sulgeda. Näiteks kui tuum satub paanikasse ja käitub üldiselt halvasti, ei pruugi ta lihtsalt uusi käske kuulata. Järelikult on süsteemi korrektne sulgemine raskendatud ning võib vaid loota, et midagi pole tõsiselt riknenud ja heausklikult voolu välja lülitada. Kui probleemid on veidi kergemad ja tuum ning programm update töötavad normaalselt, tasub arvatavasti paar minutit oodata. See annab programmile update võimaluse tühjendada puhver vahemällu ja siis võib toite välja lülitada.
Mõnele meeldib süsteemi sulgeda kolme järjestikuse käsuga sync, oodates seejärel ära kettaseadme seiskumise ja lülitades siis voolu välja. Nimetatud moodus on ekvivalentne programmi shutdown kasutamisega, kui pole töötavaid programme. Siiski ei lahutata sel juhul ühtki failisüsteemi ja võivad tekkida probleemid puhta failisüsteemi lipuga ext2fs. Kolme sync'i meetod pole järelikult soovitav.
5.4 Taaskäivitamine
Taaskäivitamine tähendab süsteemi uuesti alglaadimist. Seda võib saavutada näiteks nii: sulgege süsteem täielikult, lülitage vool välja ja siis taas sisse. Lihtsam viis on paluda programmil shutdown süsteem sulgemise asemel taaskäivitada. Selleks kasutage sulgemisel suvandit -r, andes näiteks käsu shutdown -r now.
Enamik Linux-süsteeme teostavad käsu shutdown -r now, kui vajutate klaviatuuril kombinatsiooni ctrl-alt-del . Klahvikombinatsiooni ctrl-alt-del toimingu saab konfigureerida failis /etc/initab, kusjuures mitme kasutajaga masinas võiks jätta mingi viivituse enne taaskäivitust. Füüsiliselt hõlpsa juurdepääsuga süsteemi puhul on võib-olla isegi mõistlik konfigureerida klahvikombinatsioonile ctrl-alt-del vastavaks tühitoiming.
5.5 Ainukasutaja režiim
Sulgemiskäsuga võib viia süsteemi ainukasutaja režiimi, kus keegi ei saa end sisse logida, aga juurel on võimalik pulti kasutada. See on kasulik süsteemihaldusega seotud ülesannete lahendamiseks, mida ei saa normaalse töö ajal teha.
5.6 Alglaadimise varudisketid
Alati pole võimalik buutida arvutit kõvakettalt. Näiteks kui teete LILO konfigureerimisel vea, võib süsteemi alglaadimine võimatuks osutuda. Selliste olukordade jaoks vajate alternatiivset alglaadimisvõimalust, mis alati toimiks (vähemalt seni, kuni riistvara töötab). Tüüpilise PC puhul tähendab see alglaadimist disketidraivilt.
Enamus Linuxi versioone lubab alglaadimise varudiskette luua installeerimise käigus või kasutada konfigureerimisdiskette ka alglaadediskettidena. See on küll soodne variant, kuid sellised alglaadedisketid sisaldavad ainult tuuma ja eeldavad, et kasutate kõigi probleemide korrigeerimiseks kindlat tüüpi programme ja installeerimisdiskette. Mõnikord neist programmidest ei piisa näiteks kui on vaja taastada mõningaid faile varukoopiatelt, mille valmistamisel kasutatud tarkvara installeerimisdiskettidel pole.
Seetõttu võib olla kasulik teha ka kohandatud juurdiskett. Loomulikult ei tohi unustada, et alglaade- ja juurdisketti tuleb pidevalt värskendada.
Juurdisketile ettenähtud draivi pole võimalik kasutada millegi muu jaoks. See asjaolu võib põhjustada ebamugavusi, kui arvutil on ainult üks disketidraiv. Piisava mälumahu korral saab aga konfigureerida alglaadedisketi nii, et ta laadib oma juurdisketi virtuaalkettale (alglaadedisketi tuum nõuab selleks spetsiaalset konfigureerimist). Kui juurdiskett on laaditud virtuaalkettale, vabaneb disketidraiv teiste diskettide kasutamiseks.