3 Ketaste ja muude salvestuskandjate kasutamine
Süsteemi installeerimisel või värskendamisel on vaja ketastega veidi tööd teha. Tuleb luua failisüsteemid nii, et sinna saaks salvestada faile, ning varuda ruumi süsteemi eri osade jaoks.
Käesolev peatükk selgitabki kõiki neid ettevalmistusi. Kui süsteem on juba korra häälestatud, pole vaja seda tööd reeglina enam uuesti läbi teha (välja arvatud diskettide kasutamiseks). Selle peatüki juurde on tarvis tagasi pöörduda vaid juhul, kui lisate oma süsteemile uue ketta või soovite ketta kasutamist muuta.
Põhilised ülesanded ketaste haldamisel on järgmised:
Peatükk 4 sisaldab informatsiooni virtuaalmällu ja ketta vahemällu salvestamise kohta, mida tuleb ketaste kasutamisel samuti teada.
Käesolev peatükk selgitab, mida on vaja teada kõvaketaste, diskettide, CD-ROM-ide ning magnetlintsalvestite kohta.
3.1 Kaht liiki seadmed
Unix ja seetõttu ka Linux tunnevad ära kahte eri liiki seadmeid: suvapöördusega seadmed (nagu kettad) ja märgiseadmed (nagu lindid), millest mõned võivad olla jada- ning mõned suvapöördusega. Iga kasutatav seade on failisüsteemis esindatud seadmefailiga. Kui te loete või kirjutate seadmefaili, siis andmed tulevad vastavast seadmest ja lähevad vastavasse seadmesse. Nii pole seadmete poole pöördumiseks vaja mingeid eriprogramme ega ka erilisi rakendusprogrammeerimismetoodeid nagu katkestuste püüdmine ja jadapordi pollimine. Näiteks faili saatmiseks printerile tuleb lihtsalt kirjutada:
$ cat filename > /dev/lp1
$
Faili sisu prinditakse (faili vorming peab loomulikult olema selline, et printer sellest aru saaks). Ent pole hea, kui mitu inimest saadavad oma failid printerile samaaegselt. Seepärast kasutatakse failide printimiseks spetsiaalset programmi (harilikult lpr). See programm jälgib, et korraga prinditaks ainult ühte faili, ning saadab automaatselt printerile uue faili siis, kui on lõpetatud eelmise faili print. Midagi sarnast läheb vaja peaaegu kõigile seadmetele. Tegelikult on seadmefailide pärast vaja harva muretseda.
Kuna seadmed esitatakse failisüsteemis (kataloogis /dev) failidena, saab käsu ls või mõne muu sobiva käsu abil hõlpsasti järele vaadata, millised seadmefailid olemas on. Käsu ls -l väljundi esimene tulp sisaldab faili tüüpi ja pääsulube. Näiteks jadaseadme uurimine võib anda järgmise tulemuse:
$ ls -l /dev/cua0 crw-rw-rw- 1 root uucp 5, 64 Nov 30 1993 /dev/cua0 $
Esimene sümbol esimeses veerus (st c ) ütleb informeeritud kasutajale faili tüübi käesoleval juhul on tegemist märgiseadmega. Tavalistel failidel on esimene sümbol - , kataloogidel d, salvestusseadmetel b jne.
Pange tähele, et harilikult eksisteerivad seadmefailid ka siis, kui seade ise pole installeeritud. Niisiis kui avastate faili /dev/sda, ei tähenda see veel, et SCSI-kõvaketas ka tegelikult olemas on. Seadmefailide olemasolu teeb installeerimisprogrammid lihtsamaks ja hõlbustab uue riistvara lisamist (ei ole vaja otsida õigeid parameetreid ja luua seadmefaile uute seadmete jaoks).
3.2 Kõvakettad
Käesolev jaotis tutvustab kõvaketastega seotud terminoloogiat. Kui olete juba nende terminite ja mõistetega tuttav, siis võite selle osa vahele jätta.
Skeemil (vt Joonis 3.1) on näidatud kõvaketta tähtsamad osad. Kõvaketas koosneb ühest või mitmest ümmargusest magnetkettast. Magnetkettad on valmistatud kõvast materjalist (näiteks alumiiniumist), siit ka nimi kõvaketas. Kettad on kas ühelt või mõlemalt poolt kaetud magnetilise ainega, mida kasutatakse andmete salvestamiseks. Iga sellise pinna jaoks on lugemis-kirjutuspea, mis loeb või kirjutab soovitud andmeid. Magnetkettad pöörlevad ühisel teljel. Tüüpiline pöörlemiskiirus on 3600 pööret minutis, kuigi kõrge jõudlusega kõvaketastel kasutatakse ka suuremaid kiirusi. Pead liiguvad piki magnetketaste raadiust. See liikumine kombineeritult magnetketaste pöörlemisega võimaldab peal pääseda pinna kõigi osadeni.
Protsessor (CPU) ja ketas suhtlevad läbi kettakontrolleri. Arvutil pole tarvis täpselt teada, kuidas ketast kasutada, kuna erinevate kettatüüpide kontrollereid saab panna kasutama arvuti suhtes sama liidest. Seetõttu võib arvuti pikkade ja keerukate elektriliste signaalijadade asemel (mis liigutaks pea õigele kohale, ootaks õige positsiooni saabumist pea alla ja teeks kogu ülejäänud ebameeldiva kuid vajaliku töö) lihtsalt öelda: Hei, ketas, anna, mida mul vaja on. Kontroller võib teha ka muud nagu näiteks salvestada vahemällu või asendada automaatselt vigase sektori.
Ülaltoodu on harilikult kõik, mida peaks teadma riistvarast. Seal on ka hulk muud kraami mootor, mis pööritab magnetkettaid ja liigutab päid, elektroonika, mis juhib mehaaniliste osade tööd jne, aga see pole üldiselt kõvaketta tööpõhimõtte mõistmiseks oluline.
Pinnad on harilikult jagatud kontsentrilisteks ringideks (radadeks) ja need omakorda sektoriteks. See jaotus võimaldab täpsustada asukohta kõvakettal ja määrata kettaruumi failide jaoks. Asukoha leidmiseks kõvakettal võib öelda pind 3, rada 5, sektor 7. Tavaliselt on kõigil radadel sektorite arv sama, aga mõne kõvakettatüübi välisrajad sisaldavad rohkem sektoreid (kõik sektorid on samade füüsiliste mõõtmetega, seetõttu mahub neid välimistele pikematele radadele rohkem). Tüüpiliselt mahub sektorisse 512 baiti andmeid. Ketas ise ei saa töödelda väiksemaid andmekoguseid kui üks sektor.

Joonis 3.1 Kõvaketta skeem
Iga pind on jaotatud radadeks (ja sektoriteks) samamoodi. See tähendab, et kui ühe pinna pea on mingil rajal, siis paiknevad ka teiste pindade pead samadel radadel. Kõiki radu koos kutsutakse silindriks. Peade liigutamine ühelt rajalt (silindrilt) teisele võtab aega, seetõttu tuleks tihtikasutatavad andmed (näiteks fail) paigutada ühte silindrisse siis ei ole vaja päid terviku lugemiseks liigutada. See suurendab jõudlust. Alati pole võimalik faile niimoodi paigutada. Ketta eri kohtadesse salvestatud faile kutsutakse killustunuks.
Pindade (ehk peade), silindrite ja sektorite arv varieerub suurtes piirides. Ketta eelmainitud arvude konkreetset spetsifikatsiooni nimetatakse kõvaketta geomeetriaks. Geomeetria on harilikult salvestatud spetsiaalses akutoitega mälupesas nimega CMOS RAM, kust operatsioonisüsteem saab selle võtta alglaadimise või draiveri installeerimise ajal.
Kahjuks ei võimalda BIOS (BIOS ehk baasvahetussüsteem on püsimälus asuv programm, mis hoolitseb muuseas ka alglaadimise esimeste staadiumide eest) spetsifitseerida CMOS RAM-is suuremat raja numbrit kui 1024, mis on aga liiga väike suure kõvaketta jaoks. Nimetatud piirangu ületamiseks esitab kõvaketta kontroller väärad geomeetriaparameetrid, teisendades arvuti antud aadressid millekski muuks. Näiteks võib kõvakettal olla 8 pead, 2048 rada ja 35 sektorit rajal (need arvud on täiesti reaalsed). Ketta kontroller suudab arvutile valetada ja väita, et tal on 16 pead, 1024 rada ja 35 sektorit rajal. Nõnda ei ületata radade limiiti, kusjuures peade arv hiljem poolitatakse ning radade arv kahekordistatakse. Tegelikkuses võib see matemaatika keerukam olla, sest arvude väärtused ei pruugi nii hästi sobida. Taoline teisendamine moonutab operatsioonisüsteemi nägemust ketta struktuuri kohta, muutes sellega tarbetuks idee tõsta jõudlust meetodil kõik-andmed-ühes-silindris.
Kirjeldatud probleem esineb ainult IDE-ketastel. SCSI-kettad kasutavad järjestikust sektorinumbrit (st kontroller teisendab järjestikused sektorinumbrid kolmikuks pea-silinder-sektor) ning täiesti erinevat meetodit CPU ja kontrolleri omavaheliseks suhtlemiseks, mistõttu nad on sellest probleemist vabad. Ometi võib arvuti mitte teada ka SCSI-ketta tegelikku geomeetriat.
Kuna Linuxil pole sageli aimu ketta tegelikust geomeetriast, siis tema failisüsteemid ei üritagi hoida faile ühes silindris. Selle asemel proovib Linux kinnistada failile järjestikuseid sektoreid, mis peaaegu alati annab samasuguse jõudluse. Keerukust suurendab veelgi kontrolleri vahemälu ja automaatne etteeraldus.
Iga kõvaketast esindab eraldi seadmefail. Tavaliselt saab olla ainult kaks või neli IDE-ketast (vastavalt siis /dev/hda, /dev/hdb, /dev/hdc ja /dev/hdd). SCSI-kettad on /dev/sda, /dev/sdb jne. Analoogilisi nimesid kasutatakse ka teiste kõvakettatüüpide puhul. Pange tähele, et seadmefailid annavad juurdepääsu tervele kettale olenemata jaotusest (mida selgitatakse allpool) ning piisava ettevaatuse puudumisel võib kergesti tekkida segadus nii jaotuse kui ka salvestatud andmetega. Ketta seadmefaile kasutatakse harilikult ainult juurdepääsuks alglaadimiskirjetele ja sellest tuleb samuti juttu edaspidi.
3.3 Disketiseadmed
Diskett koosneb painduvast membraanist, mis on ühelt või mõlemalt poolt kaetud samasuguse magnetilise ainega nagu kõvaketas. Disketil endal ei ole lugemis-kirjutuspead, see sisaldub disketidraivis. Diskett on nagu ühe teisaldatava magnetkettaga kõvaketas, kusjuures üht seadet saab kasutada juurdepääsuks erinevatele diskettidele, kuna aga kõvaketas on tavaliselt arvutist eraldamatu üksus.
Analoogiliselt kõvakettale on ka diskett jaotatud radadeks ning sektoriteks (ja kaks vastavat rada kummalgi pool disketti moodustavad silindri), aga neid on palju vähem kui kõvakettal.
Disketidraiv võib harilikult kasutada mitut eri tüüpi diskette; näiteks 3½-tolline seade võib töötada nii 720 KB kui ka 1,44 MB diskettidega. Kuna draivi töö pole täpselt samasugune ja operatsioonisüsteem peab teadma disketi suurust, on disketidraivil mitu seadmefaili üks iga draivi- ja disketitüübi kombinatsiooni kohta. Seetõttu /dev/fd0H1440 on esimene 3½-tolline disketidraiv (fd0), mis kasutab 3½-tolliseid kõrgtihedaid diskette (H) suurusega 1440 kB (st tavalisi 3½ HD-diskette).
Disketiseadmete keerukate nimede tõttu on Linuxil spetsiaalne disketiseadme tüüp, mis automaatselt määrab draivis oleva disketi tüübi. Ta töötab nii, et proovib lugeda värskelt sissepistetud disketi esimest sektorit erinevate disketitüüpide abil, kuni leiab õige. Selline moodus toimib loomulikult vaid siis, kui diskett on eelnevalt vormindatud. Automaatseadmed kannavad nimesid /dev/fd0, /dev/fd1 jne.
Parameetreid, mida automaatseade kasutab juurdepääsuks disketile, saab seada programmi setfdprm abil. See võib osutuda kasulikuks mittestandardsete diskettide puhul, näiteks kui neil on ebatavaline sektorite arv või automaatne määramine mingil põhjusel ebaõnnestub ja sobiv seadmefail puudub.
Linux suudab lisaks kõigile standardsetele käsitleda paljusid mittestandardseid disketivorminguid. Mõned neist vajavad spetsiaalsete vormindusprogrammide kasutamist.
Operatsioonisüsteem peab teadma, millal diskett on disketidraivis vahetatud, näiteks hoidmaks ära eelmiselt disketilt vahemällu salvestatud andmete kasutamist. Kahjuks on kasutatav signaalliin vahetevahel rivist väljas ja mis veel halvem, MS-DOS-is ei tarvitse tõrge alati silma paista. Kui teil tekib diskettide kasutamisel veidraid probleeme, siis võib olla tegemist eelnimetatud põhjusega. Ainus parandusviis on oma disketidraiv korda teha.
3.4 CD-ROM-id
Laserkettadraiv kasutab optiliselt loetavat plastkattega ketast. Informatsioon salvestatakse ketta pinnale (metallkettal plastkesta sees) väikeste aukudena, mis on reastatud piki keskelt äärele kulgevat spiraali. Kettalt lugemiseks juhib draiv mööda spiraali laserkiirt. Kui laser tabab auku, peegeldub kiir teises suunas. See muudab bittide kodeerimise (ja järelikult ka informatsiooni lugemise) lihtsaks. Ülejäänu teostab juba elementaarne mehaanika.
Laserkettadraivid on kõvaketastega võrreldes aeglased. Kui tüüpilisel kõvakettal on keskmine raja otsiaeg alla 15 millisekundi, siis kiirel laserkettadraivil kulub otsinguks sekundikümnendikke. Ent tegelik andmeedastuskiirus tuleb siiski üsna suur, sadades kilobaitides sekundis. Aeglus tähendab, et laserkettadraive pole nii mugav kasutada kui kõvakettaid, kuid siiski võimalik (mõned Linuxi tarnijad pakuvad laserketastel olulisi failisüsteeme, tehes seega tarbetuks failide kopeerimise kõvakettale, hõlbustades installeerimist ja võimaldades säästa palju kõvakettaruumi). Uue tarkvara installeerimiseks on laserkettad väga head, kuna installeerimise ajal pole maksimumkiirus oluline.
Andmeid võib laserkettale paigutada mitmel eri viisil. Kõige populaarsem moodus on üksikasjaliselt esitatud rahvusvahelises standardis ISO 9660. See standard kirjeldab minimaalset failisüsteemi, mis tundub üldiselt veel tahumatum kui MS-DOS-i oma. Teisest küljest tagab minimaalsus, et iga operatsioonisüsteem peaks suutma temaga töötada.
Tavalises Unixis pole failisüsteem ISO 9660 kasutatav, seetõttu on standardi jaoks välja töötatud laiend Rock Ridge. Rock Ridge lubab pikemaid failinimesid, sümboolseid linke ja palju teisi häid omadusi, tehes laserketta sarnasemaks kaasaegse Unixi failisüsteemiga. Veelgi enam, Rock Ridge on ikkagi standardile ISO 9660 vastav failisüsteem, mis võimaldab teda kasutada ka väljaspool Unix-süsteeme. Linux toetab mõlemat, nii standardit ISO 9660 kui ka laiendit Rock Ridge. Laiendid tuvastatakse automaatselt.
Failisüsteem on ainult pool võitu. Enamik laserkettaid sisaldab andmeid, mis vajavad juurdepääsuks spetsiaalseid programme ja enamik neist Linuxi all ei tööta (välja arvatud võib-olla dosemu all, mis on Linuxi MS-DOS emulaator).
Laserkettadraiv on kasutatav vastava seadmefaili abil. Laserkettadraivi saab arvutiga ühendada mitmel moel: läbi SCSI, läbi helikaardi või läbi EIDE.
3.5 Magnetlindid
Magnetlinsalvesti töötab magnetlindiga, mis sarnaneb muusikakassettides kasutatavaga (aga loomulikult täiesti erineva tööpõhimõttega). Magnetlint on oma iseloomult järjestikune, st mingi kohani jõudmiseks peab läbima kõik vahepealsed osad. Kettale juurdepääs on seevastu juhuslik võib hüpata otse suvalisele kohale kettal. Järjestikune juurdepääs muudab magnetlindid aeglaseks.
Teisest küljest on magnetlindid suhteliselt odavad. Neid võib teha ka väga pikaks ja salvestada suuri andmehulki. Seetõttu sobivad magnetlindid arhiveerimiseks ja varukoopiate tegemiseks, mis ei nõua suuri kiirusi, aga annavad kokkuhoidu madalate kulude ja suurte salvestusmahtude läbi.
3.6 Vormindus
Vormindus on magnetkandjale märgiste kirjutamise protsess, mida kasutatakse radade ja sektorite tähistamiseks. Enne ketta vormindamist on tema magnetilisel pinnal täielik magnetiliste signaalide kaos. Vorminduse käigus luuakse sellesse segadusse mõningane kord, tõmmates radade ja sektorite piirjooned. Oluline on teada, et enne vormindamist ei saa ketast kasutada.
Terminoloogia on siin veidi segadusttekitav: MS-DOS-is hõlmab sõna vormindus ka failisüsteemi loomisprotsessi. Selles operatsioonisüsteemis on need kaks protsessi tihti ühendatud, eriti diskettide vormindamise korral. Kui tekib eristamisvajadus, siis nimetatakse tegelikku vormindamist madala taseme vorminduseks ja failisüsteemi loomist kõrgema taseme vorminduseks. Unixi ringkondades kasutatakse nende kahe protsessi puhul termineid vormindamine ja failisüsteemi loomine, millest lähtume ka käesolevas raamatus.
IDE- ja mõnedel SCSI-ketastel on vormindamine tehtud tehases ning pole tarvidust seda korrata; järelikult ei pea enamik inimesi sellega oma pead vaevama. Õigupoolest võib kõvaketta vormindamine põhjustada isegi tema talitluse halvenemist näiteks seetõttu, et seda tüüpi ketas võib vajada väga erilist vormindusviisi (mis võimaldab vigaste sektorite automaatasendaja tööd).
Vormindust vajavad kettad nõuavad eriprogrammi, sest vormindusloogika draivisisene liides on eri draividel erinev. Vormindusprogramm asub sageli BIOS-e kontrolleris või siis pakutakse sobivat MS-DOS-i programmi, ent kumbagi neist pole Linuxis kuigi hõlbus kasutada.
Vormindamise käigus võib kettal leiduda halbu (mittekasutatavaid) kohti, mida kutsutakse vigasteks sektoriteks või vigasteks plokkideks. Harilikult suudab ketas nendega toime tulla, ent kui vigaseid sektoreid avastatakse piisavalt palju, tuleb midagi ette võtta ja ketta vastavaid osi mitte kasutada. Selleks on failisüsteemi sisse ehitatud asjakohane loogika. Teine võimalus on tekitada ise jaotus, mis katab ketta vigase osa. Viimane lähenemine osutub kasulikuks väga suure vigase ala korral, kuna failisüsteemidel võib suurte tõrkealade korrigeerimisega mõnikord raskusi tekkida.
Diskette vormindatakse käsuga fdformat. Disketti kasutatav seadmefail antakse parameetrina. Näiteks järgnev käsk vormindab esimeses disketidraivis kõrgtihedusega 3 ½-tollise disketi:
$ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting . . . done
Verifying . . . done
$
Pange tähele, et seadme automaatavastamise kasutamiseks (näiteks /dev/fd0) peab eelnevalt käsuga setfdprm seadme parameetrid kindlaks määrama. Ülaltoodud tulemuse saavutamiseks tuleb teha järgmist:
$setfdprm /dev/fd0 1440/1440
$ fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting . . . done
Verifying . . . done
$
Harilikult on mugavam valida sobiv seadmefail, mis vastab disketitüübile. Ei ole soovitav vormindada diskette suurema infomahu jaoks, kui tootja on kavandanud.
Fdformat kontrollib ka disketi õigsust, st kontrollib vigaste plokkide olemasolu. Ta proovib vigast plokki mitu korda lugeda (seda on tavaliselt kuulda, sest draivi hääl muutub dramaatiliseks). Disketi tühise tõrke korral (nt lugemis-kirjutuspea on must) fdformat ei kaeba (mõned veateated võivad osutuda ka valehäireks), aga tõsise vea puhul katkestab ta õigsuskontrolli. Tuum trükib logiteateid iga avastatud sisend-väljund-vea kohta. Veateated lähevad pulti või syslog'i kasutamisel faili /var/log/messages. Fdformat ei ütle tavaliselt vea asukohta, sest disketid on piisavalt odavad ja vigase võib kohe ära visata.
$ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting . . . done
Verifying . . . read: Unknown error
$
Käsku badblocks saab kasutada vigaste plokkide otsimiseks suvalise kettajaotuse korral (kaasaarvatud diskett). Käsk ei vorminda ketast, seega saab teda kasutada kontrollimaks isegi olemasolevaid failisüsteeme. Alltoodud näites kontrollitakse 3 ½-tollist disketti ja leitakse kaks vigast plokki.
$badblocks /dev/fd0H1440 1440
718
719
$
Käsk badblocks väljastab leitud vigaste plokkide numbrid. Enamik failisüsteeme on võimelised selliseid vigaseid plokke vältima. Nad peavad arvet teadaolevate vigaste plokkide kohta. Vastav loend koostatakse failisüsteemi loomise käigus ja teda saab hiljem muuta. Vigaste plokkide esialgse otsingu võib teostada käsuga mkfs (mis loob failisüsteemi alghäälestuse), ent edasised kontrollid tuleb teha käsuga badblocks ning uued plokid lisada käsuga fsck.
Paljud kaasaegsed kettaseadmed avastavad automaatselt vigaseid plokke ja üritavad neid asendada spetsiaalsete korrasolevate varuplokkidega. See toimub operatsioonisüsteemile märkamatult. Kuid isegi taolised kettad võivad üles öelda, kui vigaste plokkide arv kasvab liiga suureks.
3.7 Sektsioonid
Kõvaketta võib jagada mitmeks sektsiooniks. Iga sektsioon töötab nagu iseseisev ketas. Idee seisneb selles, et kui teil on ainult üks kõvaketas ja soovite sellele näiteks paigutada kaks operatsioonisüsteemi, saate jaotada ketta kaheks sektsiooniks. Kumbki operatsioonisüsteem kasutab oma osa nagu ise soovib ja ei puuduta teist osa. Niiviisi võivad kaks operatsioonisüsteemi rahulikult samal kõvakettal koos töötada. Kui ei oleks sektsioone, tuleks osta eraldi kõvaketas kummagi operatsioonisüsteemi jaoks.
Diskette ei jaotata sektsioonideks. Ükski tehniline põhjus seda ei takista, ent väiksuse tõttu osutuvad sektsioonid haruharva kasulikeks. Laserkettad jäävad tavaliselt samuti jaotamata, kuna neid on lihtsam kasutada ühe suure kettana ning vaevalt tekib tarvidust mitme operatsioonisüsteemi paigutamiseks ühele kettale.
3.7.1 MBR, alglaadesektor ja jaotustabel
Informatsiooni kõvaketta jaotuse kohta hoitakse ketta esimeses sektoris (esimese raja esimesel pinnal). Esimene sektor on ketta põhi-alglaadekirje (ka MBR). MBR (Memory Buffer Register, mälupuhverregister) on see sektor, mida BIOS loeb ja käivitab masina alglaadimisel. MBR sisaldab väikese programmi, mis loeb jaotustabelit, leiab aktiivse jaotuse (see on märgitud alglaaditavaks) ja loeb vastava sektsiooni esimese sektori (sektsiooni alglaadesektori). MBR on samuti alglaadesektor, aga eristaatusega ja seetõttu ka erilise nimega. Mainitud alglaadesektor sisaldab teise väikese programmi, mis loeb selles sektsioonis salvestatud operatsioonisüsteemi esimese osa (oletades, et see on taaskäivitatav) ja seejärel käivitab ta.
Jaotusskeem ei ole riistvarasse ega ka BIOS-süsteemi sisse ehitatud. See on ainult kokkulepe, mida paljud operatsioonisüsteemid järgivad (välja arvatud mõned erandlikud). Mõningad operatsioonisüsteemid toetavad jaotusi, aga hõivavad ühe sektsiooni kõvakettast ja kasutavad selles sektsioonis oma sisemisi jaotusmeetodeid. Viimane tüüp eksisteerib rahulikult koos teiste operatsioonisüsteemidega (sh Linuxiga) ning ei vaja mingeid erimeetmeid. Selline kettajaotust mittetoetav operatsioonisüsteem ei saa siiski eksisteerida samal kettal koos teise operatsioonisüsteemiga.
Ettevaatusabinõuna on hea kirjutada jaotustabel paberile, et kettarikke korral ei läheks kõik failid kaotsi. Vigast jaotustabelit saab parandada käsuga fdisk, asjakohast teavet annab käsk fdisk -l :
$ fdisk -l /dev/hda Disk /dev/hda: 15 heads, 57 sectors, 790 cylinders Units = cylinders of 855 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 1 1 24 10231+ 82 Linux swap /dev/hda2 25 25 48 10260 83 Linux native /dev/hda3 49 49 408 153900 83 Linux native /dev/hda4 409 409 790 163305 5 Extended /dev/hda5 409 409 744 143611+ 83 Linux native /dev/hda6 745 745 790 19636+ 83 Linux native $
3.7.2 Laiendatud ja loogilised sektsioonid
PC kõvaketaste esialgses jaotusskeemis oli lubatud ainult neli sektsiooni. Varsti selgus, et seda on liiga vähe: osaliselt seetõttu, et mõned inimesed soovisid korraga kasutada üle nelja operatsioonisüsteemi (Linux, MS-DOS, OS/2, Minix, FreeBSD, NetBSD või Windows/NT, kui mõnda nimetada), aga peamiselt seetõttu, et teinekord on hea omada ühe operatsioonisüsteemi jaoks mitu sektsiooni. Näiteks võiks saaleala kiiruslikel põhjustel panna Linuxi põhisektsiooni asemel omaette sektsiooni.
Konstruktsioonivigade ületamiseks võeti kasutusele laiendatud sektsioonid. See trikk lubab jaotada põhisektsioonid alamsektsioonideks. Sellist alamjaotusega põhisektsiooni nimetataksegi laiendatud sektsiooniks, alamsektsioonid on aga loogilised sektsioonid. Nad käituvad nagu põhisektsioonid, aga on moodustatud teisiti. Kiiruslikke erinevusi nende vahel pole.Sektsioonide struktuur kõvakettal võib välja näha näiteks järgmiselt (vt Joonis 3.2, lk *). Kettal on kolm põhisektsiooni, teine neist on jaotatud kaheks loogiliseks sektsiooniks. Osa kettast on hoopis ilma jaotuseta. Ketas tervikuna ja iga põhisektsioon omab alglaadesektorit.

Joonis 3.2 Kõvaketta jaotuse näide
3.7.3 Sektsioonitüübid
Jaotustabelid (MBR-is ja laiendatud sektsioonides) sisaldavad ühe baidi sektsiooni kohta, mis identifitseerib vastava sektsiooni tüübi. Tüübiga püütakse kirjeldada antud sektsioonis kasutavat operatsioonisüsteemi või selle otstarvet. Eesmärgiks on ära hoida olukorda, mil kaks operatsioonisüsteemi kasutavad kogemata sama sektsiooni. Tegelikkuses operatsioonisüsteemid siiski ei hooli sektsiooni tüübibaidist ja ka Linuxi jaoks pole tal erilist tähtsust. Veel hullem, tüübibaiti kasutatakse ebaõigesti: näiteks vähemalt mõned DR-DOS-i versioonid ignoreerivad kõige olulisemat bitti baidist.
Baidi väärtused pole standardselt spetsifitseeritud, ent mõned kokkulepped esitatakse alljärgnevas tabelis (vt Tabel 3.1). Sama nimekiri on saadaval ka Linuxi programmis fdisk.
| 0 | Empty | 40 | Venix 80286 | 94 | Amoeba BBT |
| 1 | DOS 12_bit FAT | 51 | Novell? | a5 | BSD/386 |
| 2 | XENIX root | 52 | Microport | b7 | BSDI fs |
| 3 | XENIX usr | 63 | GNU HURD | b8 | BSDI swap |
| 4 | DOS 16-bit <32M | 64 | Novell | c7 | Syrinx |
| 5 | Extended | 75 | PC/XT | db | CP/M |
| 6 | DOS 16-bit ³ 32M | 80 | Old MINIX | e1 | DOS access |
| 7 | OS/2 HPFS | 81 | Linux/MINIX | e3 | DOS R/O |
| 8 | AIX | 82 | Linux swap | f2 | DOS secondary |
| 9 | AIX bootable | 83 | Linux native | ff | BBT |
| a | OS/2 Boot Manag | 93 | Amoeba |
Tabel 3.1 Sektsioonitüüpe (Linuxi programmist fdisk)
3.7.4 Kõvaketta jaotamine
Sektsioonide loomiseks kõvakettal ja ka nende eemaldamiseks on mitmeid programme. Enamik operatsioonisüsteeme omab selleks tegevuseks eriprogramme ning on soovitav kasutada iga operatsioonisüsteemi all just tema enda vastavat programmi (mõne ebahariliku kuid samas vajaliku ülesande täitmiseks, mida teised võib-olla ei tee). Paljud niisugused programmid kannavad nime fdisk (või midagi analoogilist), kaasa arvatud Linuxi oma. Programm cfdisk on fdisk'iga sarnane, kuid kenama kasutajaliidesega (ikkagi üle terve ekraani).
IDE-ketaste kasutamisel peab alglaadesektsioon (sektsioon taaskäivitatava tuuma kujutisfailidega) olema täielikult esimese 1024 silindri sees, kuna ketast kasutatakse taaskäivitusel läbi BIOS-e (enne kaitserežiimi siirdumist) ja BIOS ei suuda käsitleda üle 1024 silindri. Mõnikord saab kasutada alglaadesektsiooni, mis asub ainult osaliselt esimeses 1024-s silindris. See toimib korrektselt juhul, kui kõik BIOS-e loetavad failid paiknevad esimese 1024 silindri sees. Kuna mainitud tingimuse tagamine on raske, kaasneb sellega suur risk. Pole teada, millal tuuma värskendus või ketta killustus põhjustab taaskäivitusvõimetu süsteemi tekke ja taolisest kavaldamisest on parem hoiduda (kui te just seiklusi ei otsi). Seetõttu tuleks ikkagi tagada, et alglaadesektsioon paikneks täielikult esimeses 1024-s silindris.
Mõned uuemad BIOS-e ja IDE-ketaste versioonid suudavad käsitleda ka rohkem kui 1024 silindrit. Kui teil on selline süsteem, võite järelikult probleemi unustada.
Igal sektsioonil peaks soovitavalt olema paarisarv sektoreid, kuna Linuxi failisüsteemid kasutavad ploki suurust 1 KB (st kahte sektorit). Sektorite paaritu arvu korral jääb viimane sektor kasutamata. See ei tekita küll probleeme, kuid pole ilus ja mõned fdiski versioonid hoiatavad selle eest.
Enne sektsiooni suuruse muutmist tehke esmalt turvakoopia kõigest, mida sellest sektsioonist soovite kindlasti säilitada (igaks juhuks oleks parem tervest kettast). Seejärel võite sektsiooni kustutada, tekitada uue ja taastada kõik andmed. Kui sektsioon kasvab, võib vaja minna ka külgnevate sektsioonide suuruste korrigeerimist.
Kuna sektsioonisuuruste muutmine toimub valuliselt, on soovitav kohe alguses sektsioonid võimalikult õigesti häälestada (vastasel korral peate omama efektiivset ja hõlpsastikasutatavat varundussüsteemi). Kui installeerite pidevat sekkumist mittevajavalt andmekandjalt (näiteks laserkettalt jääb ära tülikas ketaste vahetamine nagu diskettide puhul), võite alguses, varundamist vajavate väärtuslike andmete puudumisel, katsetada mitmeid erinevaid sektsioonisuurusi.
MS-DOS-is on programm nimega fips, mis muudab MS-DOS-i sektori suurust varundamist ja taastamist vajamata (kuigi see on soovitatav), ent teistes failisüsteemides ei saa ilma läbi.
3.7.5 Seadmefailid ja sektsioonid
Iga sektsioon ja laiendatud sektsioon omab seadmefaili. Seadmefailide nimede suhtes on kokku lepitud, et pärast terve ketta nime järgneb sektsiooni number, kusjuures 1 - 4 tähistab alati põhisektsiooni (hoolimata nende tegelikust arvust) ja 5 - 8 loogilist sektsiooni (vaatamata sellele, millises põhisektsiooni nad on). Näiteks /dev/hda1 on esimene põhisektsioon esimesel IDE-kettal ja /dev/sdb7 on kolmas laiendatud sektsioon teisel SCSI-kettal.
3.8 Failisüsteemid
3.8.1 Mis on failisüsteem?
Failisüsteem on meetodite ja andmestruktuuride kogum, mida operatsioonisüsteem kasutab failide jälgimiseks kettal või sektsioonis; see on failide organiseerimise viis kettal. Selle sõnaga tähistatakse ka sektsiooni või ketast, mida kasutatakse failide või failisüsteemi tüüpide säilitamiseks.
Ketta või sektsiooni ja temal paikneva failisüsteemi vahel on oluline erinevus. Mõned programmid (sealhulgas programmid, mis loovad failisüsteeme) töötavad vahetult ketta või sektsiooni sektoritel ning kui seal eksisteerib failisüsteem, siis võib see hävida või tõsiselt rikneda. Enamik programme kasutab failisüsteemi ja seetõttu ei saa nad töötada sektsioonis, kus failisüsteem puudub või on väära tüübiga.
Enne sektsiooni või ketta failisüsteemina kasutamist on vaja teha alghäälestus ja kirjutada kettale süsteemihalduse andmestruktuurid. Seda protsessi kutsutakse failisüsteemi loomiseks.
Enamik Unixi failisüsteeme omavad sarnast üldstruktuuri, kuigi detailid erinevad üsna palju. Kesksed üldmõisted on superblock (liitplokk), inode (infosõlm), data block (andmeplokk), directory block (kataloogiplokk) ja indirection block (otsestusplokk). Superblock sisaldab teavet failisüsteemi kui terviku kohta nagu näiteks tema suurus (täpne väärtus sõltub failisüsteemist). Inode sisaldab kogu informatsiooni faili kohta (välja arvatud nimi, mis on salvestatud kataloogis koos inode'i numbriga). Kataloogi kirje koosneb failinimest ja faili esindava inode'i numbrist. Inode sisaldab mitme andmeploki numbreid, mida kasutatakse andmete salvestamiseks faili. Inode'is on ruumi ainult vähestele andmeplokinumbritele ja vajaduse korral eraldatakse andmeplokkide viitadele dünaamiliselt rohkem ruumi. Need dünaamiliselt määratletud plokid kannavad nime indirect blocks (kaudsed plokid), mille tähendus viitab sellele, et andmeploki leidmiseks tuleb kõigepealt võtta tema number kaudses plokis.
Unixi failisüsteemid lubavad tavaliselt luua faili sisse avasid (seda tehakse käsuga lseek). Sisuliselt teeskleb failisüsteem, et faili konkreetses kohas on null baiti ning tegelikke kettasektoreid pole faili selle koha jaoks reserveeritud (seega kasutab fail veidi vähem kettaruumi). Eriti sageli kasutatakse avasid seoses väikeste kahendfailide, Linuxi ühiskasutusteekide, mõningate andmebaaside ja muude erijuhtudega. Avade loomiseks salvestatakse indirect block'is või inode'is andmeploki aadressina eriväärtus. Selline eriaadress tähendab, et vastava failiosa jaoks pole määratud ühtegi andmeplokki ja tekibki olukord, nagu oleks failis auk.
3.8.2 Failisüsteemide küllus
Linux toetab mitut tüüpi failisüsteeme. Kõige tähtsamad neist on:
| minix | Vanim, oletatavasti kõige usaldusväärsem, aga üsna piiratud (maksimaalselt 30-märgised failinimed jne) ning vähese mahuga (maksimaalselt 64 MB failisüsteemi kohta). |
| xia | Failisüsteemi minix modifitseeritud versioon, failinimede ja failisüsteemi suuruse piirangud on väiksemad, aga muid uusi omadusi ei lisandu. Ei ole populaarne, kuid töötab korralikult. |
| ext2 | Linuxi failisüsteemidest kõige võimalusterikkam, praegu ka kõige populaarsem. Kergesti ühilduv varasematega, et uued versioonid ei nõuaks olemasolevate failisüsteemide ümbertegemist. |
| ext | ext2 vanem versioon, mis pole varasematega ühilduv. Praegu peaaegu ei kasutata ja enamik inimesi on üle läinud ext2 uuele versioonile. |
Lisaks on olemas mitmete välisfailisüsteemide tugi, mis kergendab failivahetust teiste operatsioonisüsteemidega. Nimetatud välisfailisüsteemid töötavad nagu sisemisedki, välja arvatud mõnede tavaliste Unixi iseärasuste puudumine, veidrate piirangute lisandumine või muu omapära.
| msdos | Ühildub MS-DOS-i failipaigutustabelit omavate failisüsteemidega (OS/2 ja Windows NT). |
| umsdos | Laiendab Linuxi all msdos-failisüsteemi draiverit, mis lubab kasutada pikki failinimesid, tuvastada failide omanikke, juurdepääsulubasid, linke ja seadmefaile. Võimaldab töötada tavalise msdos-failisüsteemiga nagu Linuxi oma, kõrvaldades seega vajaduse eraldi sektsiooni järele. |
| iso9660 | Standardne CD-ROM-failisüsteem. Toetab automaatselt populaarset CD-ROM-standardi laiendit Rock Ridge, mis lubab pikemaid failinimesid. |
| nfs | Võrgufailisüsteem, mis võimaldab failisüsteemi ühiselt kasutada mitmel arvutil, tagades hõlpsa juurdepääsu failidele kõigis neis arvutites. |
| hpfs | Failisüsteem OS/2. |
| sysv | Failisüsteemid System V / 386, Coherent ja Xenix. |
Valik, millist failisüsteemi kasutada, sõltub olukorrast. Kui ühilduvus ja teised põhjused teevad vältimatuks välisfailisüsteemi kasutamise, siis tuleb teda ka rakendada. Valikuvõimaluse korral oleks arvatavasti kõige parem kasutada failisüsteemi ext2, millel on palju vahendeid ja seejuures hea jõudlus.
Lisaks võib nimetada failisüsteemi proc (tavaliselt kui kataloog /proc), mis tegelikult vaid näib failisüsteemina. Süsteem proc lihtsustab juurdepääsu tuuma teatud andmestruktuuridele nagu näiteks protsesside loend (siit ka nimi). Need andmestruktuurid esitatakse failisüsteemi kujul, mida saab käsitleda kõigi tavaliste failide töövahenditega. Näiteks kõigi protsesside loendi saamiseks võib kasutada järgmist käsku:
$ ls -l /proc total 0 dr-xr-xr-x 4 root root 0 Jan 31 20:37 1 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 63 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 94 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 95 dr-xr-xr-x 4 root users 0 Jan 31 20:37 98 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 99 -r--r--r-- 1 root root 0 Jan 31 20:37 devices -r--r--r-- 1 root root 0 Jan 31 20:37 dma -r--r--r-- 1 root root 0 Jan 31 20:37 filesystems -r--r--r-- 1 root root 0 Jan 31 20:37 interrupts -r-------- 1 root root 8654848 Jan 31 20:37 kcore -r--r--r-- 1 root root 0 Jan 31 11:50 kmsg -r--r--r-- 1 root root 0 Jan 31 20:37 ksyms -r--r--r-- 1 root root 0 Jan 31 11:51 loadavg -r--r--r-- 1 root root 0 Jan 31 20:37 meminfo -r--r--r-- 1 root root 0 Jan 31 20:37 modules dr-xr-xr-x 2 root root 0 Jan 31 20:37 net dr-xr-xr-x 4 root root 0 Jan 31 20:37 self -r--r--r-- 1 root root 0 Jan 31 20:37 stat -r--r--r-- 1 root root 0 Jan 31 20:37 uptime -r--r--r-- 1 root root 0 Jan 31 20:37 version $
(Seal leiduvad ka mõned lisafailid, mis ei vasta protsessidele. Ülaltoodud näide on lühendatud.)
Pange tähele, et kuigi nime poolest failisüsteem, ei puutu ükski failisüsteemi proc osa ühessegi kettasse ning ta eksisteerib ainult tuuma kujutluses. Kui keegi üritab vaadata failisüsteemi proc suvalist osa, muudab tuum vastava osa nähtavaks ning tekib mulje, nagu eksisteeriks see osa kusagil. Seega ei võta isegi mitme megabaidine fail /proc/kcore kettal üldse ruumi.
3.8.3 Millist failisüsteemi kasutada?
Harilikult tekib failisüsteemi valiku küsimus tulevast kasutamist silmas pidades. Praegu on kõige populaarsem ja arvatavasti ka kõige õigem valik ext2fs. Olenevalt süsteemihaldusstruktuuride mahust, kiirusest, töökindlusest, ühilduvusest ja mitmetest muudest põhjustest võib kõne alla tulla siiski ka mõni teine failisüsteem. Otsustage iga konkreetse juhu korral eraldi.
3.8.4 Failisüsteemi loomine
Failisüsteemid luuakse ehk häälestatakse käsuga mkfs. Tegelikult eksisteerib eraldi programm iga failisüsteemi tüübi jaoks. Mkfs on ainult fassaad, mis sõltuvalt soovitud failisüsteemi tüübist käivitab sobiva programmi. Tüüp valitakse suvandiga -t fstype.
Programmi mkfs aktiveerivate moodulite käsurealiidesed erinevad pisut üksteisest. Allpool on toodud kõige tavalisemad ja olulisemad suvandid.
| -t fstype | Failisüsteemi tüübi valik. |
| -c | Vigaste plokkide otsing ja loend. |
| -l filename | Vigaste plokkide esialgse loendi võtt failist filename. |
Failisüsteemi ext2 loomiseks disketil tuleb sisestada järgmised käsud:
$ fdformat -n /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
$ badblocks /dev/fd0H1440 1440 > bad-blocks
$ mkfs -t ext2 -l bad-blocks /dev/fd0H1440
mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
360 inodes, 1440 blocks
72 blocks (5.00%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
360 inodes per group
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
$
Kõigepealt vormindati diskett (suvand -n väldib vigaste plokkide kontrolli). Seejärel otsiti vigaseid plokke programmiga badblocs, mille väljund suunati faili badblocks. Lõpuks loodi failisüsteem, kusjuures vigaste plokkide loendi algväärtus võeti failist badblocks.
Faili badblocks ja eraldi faili asemel oleks võinud kasutada mkfs'i suvandit -c. Seda tehakse alljärgnevas näites.
$ mkfs -t ext2 -c /dev/fd0H1440
mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
360 inodes, 1440 blocks
72 blocks (5.00%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
360 inodes per groupChecking for bad blocks (read-only test): done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
$
Ehkki -c on eraldi faili kasutamisest mugavam, läheb faili badblocks siiski vaja kontrolliks pärast failisüsteemi loomist.
Failisüsteemi loomisprotsess kõvaketastel või sektsioonis on samasugune nagu diskettide puhul, välja arvatud vorminduse puudumine.
3.8.5 Ühendamine ja lahutamine
Enne failisüsteemi kasutamist tuleb ta ühendada. Operatsioonisüsteem viib selle käigus läbi mitmeid süsteemihaldusprotseduure ja püüab kindlaks teha, kas kõik ikka töötab. Kuna Unixis asuvad kõik failid ühes kataloogipuus, siis pärast ühendusoperatsiooni paistab uue failisüsteemi sisu teile mõne juba ühendatud failisüsteemi alamkataloogina.
Näiteks Joonis 3.3 kujutab kolme eraldi failisüsteemi, igaüks oma juurkataloogis. Kui kaks viimast failisüsteemi ühendada esimese failisüsteemi kataloogide /home ja /usr alla, saame ühe kataloogipuu nagu esitab Joonis 3.4.

Joonis 3.3 Kolm eraldi failisüsteemi

Joonis 3.4 /home ja /usr on ühendatud
Ühendused saab teha nii nagu kirjeldatud järgnevas näites:
$ mount /dev/hda2 /home
$ mount /dev/hda3 /usr
$
Käsk mount vajab kahte argumenti. Esimene on seadmefail, mis vastab vajalikku failisüsteemi sisaldavale kettale või sektsioonile. Teine on kataloog, mille alla ta ühendatakse. Pärast neid käske paistab kahe failisüsteemi sisu nagu kataloogide /home ja /usr sisu. Võib lihtsalt öelda, et /dev/hda2 on ühendatud kataloogi /home ja samamoodi /dev/hda3 on ühendatud kataloogi /usr. Ükskõik kumma failisüsteemi esitamiseks tuleb vaadata kataloogi, mille külge ta on ühendatud. Pange tähele erinevust seadmefaili /dev/hda2 ja ühendatud kataloogi /home vahel. Seadmefail annab juurdepääsu ketta sisule, ühendatud kataloog aga failidele kettal. Ühendatud kataloogi kutsutakse ühenduspunktiks.
Linux toetab mitmeid failisüsteemide tüüpe. Mount üritab failisüsteemi tüüpi ära arvata. Tüübi täpsustamiseks võib kasutada ka suvandit -t fstype, mis osutub tihtipeale vajalikuks seetõttu, et mount'i heuristika alati ei tööta. Näiteks MS-DOS-i disketi ühendamiseks võib kasutada järgnevat käsku:
$ mount -t msdos /dev/fd0 /floppy
$
Ühenduspunkt võib olla tühi, aga ta peab eksisteerima. Kõik failid jäävad failisüsteemi ühendamise ajal nimepidi kättesaamatuks. (Juba avatud failide poole saab pöörduda. Need nimed võimaldavad juurdepääsu teiste kataloogide püsilinkidega failidele.) Selline olukord ei tekita mingit kahju ja võib isegi kasulikuks osutuda. Näiteks mõned inimesed soovivad, et /tmp ja /var/tmp oleksid sünonüümid ja varustavad kataloogi /tmp sümboolse lingiga kataloogi /var/tmp. Süsteemi taaskäivitusel kasutatakse enne failisüsteemi /var ühendamist tema asemel juurfailisüsteemis olevat kataloogi /var/tmp. Kui /var on ühendatud, kaob juurfailisüsteemis juurdepääs kataloogile /var/tmp. Kui juurfailisüsteemis pole kataloogi /var/tmp olemas, siis ei saa ajutisi faile kasutada enne kataloogi /var ühendamist.
Kui te ei kavatse failisüsteemi midagi kirjutada, kasutage programmis mount parameetrit -r. See sunnib tuuma peatama kõik failisüsteemi kirjutuskatsed ja takistab ka värskendamast faili juurdepääsuaegu sõlmedes inode. Kirjutuskaitsega ühendused on vajalikud lugemiskandjatele (näiteks CD-ROM-idele).
Juurfailisüsteem ühendatakse reeglina kõigepealt kirjutuskaitsega. Käivitusstsenaariumid käivitavad seejärel fsck õigsuse kontrolliks ja probleemide puudumisel taasühendavad ta ilma kirjutuskaitseta. Fsck ei tohi töötada ühendatud failisüsteemiga, sest kõik muutused failisüsteemis fsck töö ajal põhjustavad probleeme. Kuna juurfailisüsteem on kontrollimise ajal ühendatud kirjutuskaitstult, saab fsck vead vabalt parandada ja taasühendusoperatsioon eemaldab mälust failisüsteemi kõik metaandmed.
Mitmed süsteemid omavad ka teisi failisüsteeme, mida peaks alglaadimise ajal automaatselt ühendama (täpsemalt esitatud failis /etc/fstab). Täiendavate failisüsteemide ühendamise konkreetsed detailid sõltuvad paljudest teguritest ja neid saab iga süsteemiülem vastavalt vajadusele konfigureerida.
Kui failisüsteemi ühendusvajadus kaob, võib ta lahutada programmiga umount (peaks olema loomulikult unmount, aga n kadus 70-ndatel aastatel seoses veidrate asjaoludega). Umount vajab ühte argumenti: kas seadmefaili või ühenduspunkti. Näiteks eelneva näite kataloogide lahutamiseks võib kasutada käske
$ umount /dev/hda2
$ umount /usr
$
Väga oluline on alati lahutada diskett. Ärge võtke kunagi disketti lihtsalt draivist välja! Ketta vahemälu tõttu ei pruugi andmed kohale jõuda enne lahutamist, seega disketi enneaegne draivist võtmine võib põhjustada sisu riknemise. Kui disketilt ainult lugeda, pole viga eriti tõenäoline, aga kirjutamisel võib juhtuda parandamatuid tagajärgi.
Ühendamine ja lahutamine nõuab eeliskasutaja (st juurkasutaja) õigusi. Põhjuseks on, et kui kõik kasutajad võiksid ühendada diskette suvalise kataloogi külge, siis saab üsna lihtsalt luua disketi trooja hobusega (maskeeritult /bin/sh'sse või mõnda teise tihtikasutatavasse programmi). Siiski tuleb kasutajail lubada diskette hõlpsasti kasutada ja seda võib teha mitmel eri viisil:
Viimase alternatiivi teostamiseks lisage failile /etc/fstab järgnev rida:
/dev/fd0 /floppy msdos user,nonauto 0 0
Veerud on järgmised: ühendatav seadmefail, ühendatav kataloog, failisüsteemi tüüp, võimalused, varukopeerimise sagedus (programmi dump jaoks) ja fsck läbimise järjenumber (täpsustamaks failisüsteemide kontrolli järjestust pärast alglaadimist; 0 tähendab kontrolli puudumist).
Suvand nonauto välistab automaatühenduse süsteemi käivitamisel (st peatab mount -a ühendusoperatsiooni). Suvand user lubab kõigil kasutajatel failisüsteemi ühendada ning keelab turvalisuse tagamiseks programmide käivitamise (normal või setuid) ja seadmefailide teisendamise ühendatud failisüsteemist. Seejärel saavad kõik kasutajad ühendada disketi failisüsteemiga msdos järgmise käsu abil:
$ mount /floppy
$
Disketi saab lahutada sobiva käsuga umount (mida tuleb ka kasutada).
Kui soovite anda juurdepääsu erinevat tüüpi diskettidele, tuleb määratleda eri ühenduspunktid. Iga ühenduspunkti häälestus võib olla erinev. Näiteks juurdepääsu tagamiseks MS-DOS- ja ext2-diskettidele kirjutage faili /etc/fstab järgmised read:
/dev/fd0 /dosfloppy msdos user,nonauto 0 0 /dev/fd0 /ext2floppy ext2 user,nonauto 0 0
MS-DOS-i failisüsteemides (mitte ainult diskettide puhul) on pääsu võimalik reguleerida failisüsteemivahenditega uid, gid ja umask, mida kirjeldatakse juhendi leheküljel mount. Kui kaotate MS-DOS-failisüsteeme ühendades ettevaatuse, saavad kõik kasutajad neis olevaid faile vähemalt lugeda, mis ei pruugi alati heaga lõppeda.
3.8.6 Failisüsteemi tervikluse kontroll programmiga fsck
Failisüsteemid on keerukad kogumid ja pahatihti kõrgendatud tõrketundlikkusega. Failisüsteemi täielikkust ja õigsust saab kontrollida käsu fsck abil. Käsu võib konfigureerida parandama pisiprobleeme ja hoiatama kasutajat, kui avastatakse tõsine probleem. Õnneks on failisüsteemide tööriistad üsna tõhusalt silutud ja probleeme tekib väga harva ning needki on tavaliselt põhjustatud voolukatkestustest, riistvarariketest või operaatori vigadest (näiteks süsteemi ebakorrektne sulgemine).
Enamik süsteeme on häälestatud nii, et käsk fsck käivitatakse alglaadimise ajal automaatselt, mis võimaldab leida vead enne süsteemi kasutamist. Rikutud failisüsteemi kasutamine teeb olukorra reeglina hullemaks: kui andmestruktuurid on korrast ära, siis failisüsteemi töö ajab nad veel rohkem segi, põhjustades suurema andmehulga kao. Siiski võib programmi fsck töö suurtes failisüsteemides palju aega võtta ja kuna süsteemi õigel sulgemisel vigu peaaegu ei juhtu, kasutatakse kontrolli vältimiseks sellises olukorras mõningaid trikke. Esimene võimalus on, et kui fail /etc/fastboot eksisteerib, siis kontrolli ei teostata. Teiseks võib failisüsteemi ext2 superblock'i varustada spetsiaalse tähisega, mis näitab, kas failisüsteem lahutati pärast eelmist ühendamist õigesti. See lubab programmil e2fsck (fsck versioon failisüsteemi ext2 jaoks) vältida kontrolli failisüsteemi lahutamise positiivse signaali korral (loomulikult eeldusel, et õige lahutamine tähendab probleemide puudumist). Kas trikk /etc/fastboot teie süsteemis töötab, sõltub alglaadestsenaariumidest. Failisüsteemiga ext2 seotud trikk toimib aga alati, kui kasutate programmi e2fsck.
Automaatkontroll töötab ainult alglaadimisel automaatselt ühendatud failisüsteemide puhul. Teiste failisüsteemide (näiteks diskettide) kontrollimiseks käivitage programm fsck käsitsi.
Kui fsck leiab parandamatu probleemi, kuluvad marjaks ära teie sügavad teadmised failisüsteemide üldise töö kohta ja riknenud failisüsteemi kohta konkreetselt (või ka lihtsalt head varukoopiad). Viimaste olemasolu saab hõlpsasti korraldada (kuigi see töö võib olla tüütu), esimesed tingimused aga õnnestub täita mõne sõbra, Linuxi uudisegruppide ja postiloendite või mõne muu toetusallika abiga, kui endal teadmised puuduvad.
Fsck peab käivituma ainult ühendamata failisüsteemidel, mitte iial aga ühendatud failisüsteemidel (erandiks on lugemiskaitsega juur alglaadimise käigus). Seda seetõttu, et juur omab kettale vahetut juurdepääsu ja võib failisüsteemi muuta, ilma et operatsioonisüsteem sellest arugi saaks. Segaduses operatsioonisüsteem tekitab aga kindlasti hulga tõsiseid probleeme.
3.8.7 Kettavigade otsimine programmiga badblocks
On soovitav perioodiliselt otsida vigaseid plokke. Seda saab teha käsuga badblocks, mis väljastab loendi kõigi leitud vigaste plokkide numbritega. Loendi võib programmi fsck abil salvestada failisüsteemi andmestruktuurides, et operatsioonisüsteem ei kasutaks vigaseid plokke andmete säilitamisel. Järgnev näide selgitab, kuidas seda teha.
$ badblocks /dev/fd0H1440 1440 > bad-blocks
$ fsck -t ext2 -l bad-blocks /dev/fd0H1440Parallelizing fsck version 0.5a (5-Apr-94)
e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Check reference counts.
Pass 5: Checking group summary information./dev/fd0H1440: ***** FILE SYSTEM WAS MODIFIED *****
/dev/fd0H1440: 11/360 files, 63/1440 blocks
$
Kui badblocks teatab juba kasutatavast vigasest plokist, üritab e2fsck tõsta ploki teise kohta. Tõsiselt vigase ploki korral võib faili sisu olla rikutud.
3.8.8 Võitlus killustusega
Alati ei õnnestu faili kettale järjestikustesse plokkidesse kirjutada. Faile, mis pole kirjutatud järjestikustesse plokkidesse, nimetatakse killustatuteks. Killustatud faili lugemine võtab kauem aega, kuna ketta lugemis-kirjutuspea peab rohkem liikuma. Killustust on soovitav vältida, kuigi hea puhvervahemäluga süsteemides pole see probleemiks.
Failisüsteem ext2 püüab killustust vähendada, hoides kõik plokid failis lähestikku isegi siis, kui neid ei saa salvestada järjestikustesse sektoritesse. Ext2 määrab alati vaba ploki, mis on teistele plokkidele suhteliselt lähim. Seetõttu ei tarvitse süsteemiga ext2 töötades killustuse pärast muretseda. On olemas ka spetsiaalne killustusevastane programm, mis töötab failisüsteemis ext2 (Stephen Tweedie ja Alexei Vovenko, Linux Filesystem Defragmenter, saadaval aadressil ftp://sunsite.unc.edu/pub/Linux/system/Filesystems/defrag-0.6.tar.gz) .
Leidub mitmeid MS-DOS-i defragmentimisprogramme, mis tõstavad killustuse kõrvaldamiseks plokke failisüsteemis ümber. Teistes süsteemides toimub defragmentimine failisüsteemi varukoopia tegemise, taasloomise ja failide varukoopia järgi taastamise teel. Varukoopia tegemine enne defragmentimist on soovitav kõigi failisüsteemide puhul, kuna defragmentimise käigus võib paljugi ebaõnnestuda.
3.8.9 Muud vahendid kõigile failisüsteemidele
Suvalist tüüpi failisüsteemide töö korraldamiseks on mitmeid universaalseid käske. Df näitab vaba kettaruumi ühes või mitmes failisüsteemis, du esitab kataloogi ja tema failide mahu. Neid käske saab kasutada kettaruumi raiskajate otsimiseks.
Sync sunnib kõiki kirjutamata plokke vahemälust kettale salvestama. Seda tuleb harva käsitsi teha, deemon update teostab operatsiooni automaatselt. Protseduur on kasulik krahhide puhul, kui näiteks update või tema abiprotsess bdflush peatuvad või on vaja kohe vool välja lülitada ning ei saa oodata, mil update käivitub.
3.8.10 Muud vahendid failisüsteemile ext2
Lisaks failisüsteemi loojale (mke2fs) ja kontrolörile (e2fsck), mille poole saab failisüsteemi tüübist sõltumata vahetult või võrgu kaudu pöörduda, omab failisüsteem ext2 teisigi kasulikke tööriistu. Näiteks
tune2fs reguleerib failisüsteemi parameetreid. Märkimisväärsemad parameetrid on järgmised:
Dumpe2fs 0.5b, 11-Mar-95 for EXT2 F5 0.5a, 94/10/23 Filesystem magic number: 0xEF53 Filesystem stats: clean Errors behavior: Continue Inode count: 360 Block count: 1440 Reserved block count: 72 Free blocks: 1133 Free inodes: 326 First block: 1 Block size: 1024 Fragment size: 1024 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 360 Last mount time: Tue Aug 8 01:52:52 1995 Last write time: Tue Aug 8 01:53:28 1995 Mount count: 3 Maximum mount count: 20 Last checked: Tue Aug 8 01:06:31 1995 Check interval: 0 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) Group 0: Block bitmap at 3, Inode bitmap at 4, Inode table at 5 1133 free blocks, 326 free inodes, 2 directories Free blocks: 307-1439 Free inodes: 35-360
Joonis 3.5 Programmi dumpe2fs väljastuse näide
Programm dumpe2fs esitab teavet failisüsteemi ext2 kohta. Joonis 3.5 esitab väljastuse näite. Osa väljundinformatsioonist on puhtalt tehniline ja nõuab failisüsteemi töö tundmist, aga paljustki saavad ka võhikud aru.
Programm debugfs on failisüsteemi silur, mis võimaldab vahetu juurdepääsu kettale salvestatud andmestruktuuridele. Teda võib kasutada riknenud ketta taastamiseks, mida fsck pole võimeline automaatselt parandama. Programmiga on õnnestunud taastada kustutatud faile. Programmi debugfs kasutamine eeldab siiski arukat ja vastutustundlikku tegutsemist, sest mõni ebaõige toiming võib hävitada kogu informatsiooni.
Dump ja restore lubavad valmistada failisüsteemi ext2 varukoopiaid. Tegemist on Unixi traditsiooniliste varundusvahendite spetsiaalsete ext2-versioonidega.
3.9 Failisüsteemita kettad
Mitte kõiki kettaid või sektoreid ei kasutata failisüsteemi abil. Näiteks saalesektsioonil failisüsteem puudub. Mitmeid kettaid kasutatakse magnetlintsalvesti emuleerimiseks, kusjuures tar või muud failid kirjutatakse otse kettale. Linuxi taaskäivituskettad ei sisalda failisüsteemi, vaid ainult puhast tuuma.
Failisüsteemi vältimine võimaldab kasutada suuremat kettaruumi, kuna failisüsteemil on alati mõningane süsteemne ballast. Lisaks hõlbustab see ketaste ühilduvust teiste süsteemidega. Näiteks failivorming tar on sama kõigis süsteemides, kuigi failisüsteemid on eri süsteemides enamasti erinevad. Ketaste failisüsteemita kasutamisega harjub kiiresti. Linuxi alglaadedisketid ei pea samuti failisüsteemi omama (ehkki see pole välistatud).
Üks nn "puhaste ketaste" kasutamise põhjusi on kujutise koopiate valmistamine. Näiteks osaliselt riknenud failisüsteemi puhul tuleks kettast enne remonti teha täpne koopia, kuna taastamisel võivad andmed veelgi enam rikneda ning koopia olemasolu lubab uuesti alustada. Üks võimalus on kasutada programmi dd:
$ dd if=/dev/fd0H1440 of=floppy-image
2880+0 records in
2880+0 records out
$ dd if=floppy-image of=/dev/fd0H1440
2880+0 records in
2880+0 records out
$
Esimene kord salvestab dd disketi täpse koopia, teine kord kirjutab faili disketile.
3.10 Kettaruumi jaotamine
3.10.1 Jaotusskeemid
Ketta jaotamine parimal võimalikul viisil pole kerge. Veelgi enam, puudub garanteeritult õige universaalmeetod, kuna vastastikku seotud tegureid on lihtsalt liiga palju.
Traditsiooniliselt soovitatakse suhteliselt väikest juurfailisüsteemi, mis sisaldab katalooge /bin, /etc, /dev, /lib, /tmp ja teisi süsteemi käivitamiseks ning tööks vajalikke faile. Juurfailisüsteem (eraldi sektsioonis või kettal) on kõik, mida läheb vaja süsteemi käivitamiseks. Pooltargumendina rõhutatakse, et väikese ja harvakasutatava juurfailisüsteemi puhul on tema riknemise tõenäosus süsteemi töö ootamatu katkemise korral väiksem ja siis õnnestub hõlpsamini krahhi põhjustatud probleeme lahendada. Kataloogipuu (/usr all), kasutajate kodukataloogide (tihti /home all) ja saaleala jaoks võib luua eraldi sektsioonid või kasutada eraldi kettaid. Kodukataloogide eraldamine (koos kasutajafailidega) oma sektsiooni hõlbustab varundamist, kuna tavaliselt pole kataloogi /usr programmidest vaja väga sageli varukoopiaid teha. Võrgukeskkonnas on võimalik kataloogi /usr ühiskasutus mitme arvuti vahel (näiteks NFS-i abil), mis vähendab kogu vajalikku kettaruumi mitukümmend või isegi sada megabaiti korda masinate arv.
Sektsioonide kasutamisega seondub probleem, et vaba kettaruum tükeldatakse mitmeks väiksemaks osaks. Tänapäeval, kui kettad ja (loodetavasti) ka operatsioonisüsteemid on töökindlamad, eelistavad paljud omada üht sektsiooni, mis sisaldaks kõiki nende faile. Teisest küljest tundub olevat kindlam varundada (ja taastada) väikest sektsiooni.
Väikese kõvaketta jaoks on üks sektsioon arvatavasti parim võimalus (eeldades, et te ei tegele tuuma väljatöötamisega). Suure kõvaketta puhul tuleks tõenäoliselt eelistada paari suurt sektsiooni, sest alati võib midagi kihva minna. (Pange tähele, et mõisteid väike ja suur on kasutatud suhtelises mõttes; absoluutpiiri määrab kettaruumi vajadus.)
Mitme kettaga arvutis võiksite paigutada juurfailisüsteemi (koos /usr'iga) ühele ja kasutajate kodukataloogid teisele kettale.
Tasub olla valmis väikesteks eksperimentideks erinevate jaotusskeemidega (seda alati, mitte ainult süsteemi esmakordsel installeerimisel). Taoline valmisolek nõuab veidi pingutust, kuna ta eeldab süsteemi korduvat installeerimist. Aga see on ka ainus teadaolev viis rahuldava tulemuse tagamiseks.
3.10.2 Ruuminõuded
Linuxi tarnekomplekt teatab installeerimisel ise, kuipalju kettaruumi on eri konfiguratsioonidele vaja. Eraldiinstalleeritavad programmid käituvad samamoodi. See aitab plaanida ketta kasutamist ning teha ettevalmistusi tulevikuks, varudes ruumi edaspidi vajaminevate programmide jaoks.
Kasutajafailidele vajalik kettamaht sõltub kasutajate soovidest. Elu näitab, et enamik inimesi tahab oma failidele niipalju ruumi kui vähegi võimalik. Seejuures varieerub kettamaht, mida nad on võimelised mõistlikult haldama, suurtes piirides. Mõni inimene teeb ainult lihtsat tekstitöötlust ning tuleb toime mõne megabaidiga, teised tegelevad tõsise pilditöötlusega ja vajavad gigabaite.
Muuseas tuleb failisuuruste (antud kilobaitides või megabaitides) ja kettaruumi (antud megabaitides) võrdlemisel arvestada, et need kaks ühikut võivad osutuda erinevateks. Mõnedele kettatootjatele meeldib väita, et kilobait on 1000 baiti ja megabait 1000 kilobaiti, samas kui ülejäänud arvutimaailm kasutab mõlema tegurina arvu 1024. Seetõttu võib 345 MB kõvaketas osutuda 330 MB kõvakettaks.
Kõvaketta jaotamise näited
Olgu arvuti 330 MB kõvaketas jaotatud järgmiselt:
5 MB juurfailisüsteem
10 MB saalesektsioon
180 MB failisüsteem /usr
120 MB failisüsteem /home
15 MB stardisektsioon
Stardisektsioon on ette nähtud eraldi sektsiooni vajavate vahendite katsetamiseks, näiteks Linuxi uue variandi proovimiseks või failisüsteemide kiiruse võrdlemiseks. Kui stardisektsioon on parajasti vaba, kasutatakse teda täiendava saalealana.
3.10.3 Kettaruumi lisamine Linuxile
Kettaruumi lisamine Linuxile on lihtne, vähemalt korralikult installeeritud riistvara puhul. Ketas tuleb vormindada, seejärel luua sektsioonid ja failisüsteemid nagu eespool kirjeldatud ning lisada faili /etc/fstab vajalikud read automaatühenduse teostamiseks.
3.10.4 Nõuandeid kettaruumi säästmiseks
Parim nõuanne kettaruumi kokkuhoiuks on vältida asjatute programmide installeerimist. Enamik Linuxi variantidest lubab paketti installeerida osade kaupa ja oma vajadusi analüüsides võite isegi märgata, et paljusid neist ei lähe teil kunagi tarvis. See aitab säästa oluliselt kettaruumi, kuna mitmed programmid on üsna suured. Isegi kui kasutate mingit paketti või programmi, ei pruugi te vajada kogu komplekti. Kasututeks võivad näiteks osutuda interaktiivse dokumentatsiooni mõningad osad, aga ka mõned GNU Emacs'i Elisp-failid, mõned X11 kirjad või programmiteegid.
Kui paketi osi ei saa kettalt kustutada, siis võib kaaluda nende hoidmist tihendatud kujul. Tihendusprogrammid nagu gzip ja zip tihendavad (ning taastavad) üksikuid faile või failigruppe. Süsteem gzexe tihendab ja taastab programmid kasutajale märkamatult (mittekasutatavad programmid tihendatakse ning vajaduse korral taastatakse automaatselt). Süsteem DouBle tihendab kõik failisüsteemi failid, nii et faile kasutavad programmid seda ei märka.