teejuht
Kõvaketas on arvuti kõige keerulisem aparaat: seda väidetakse sellepärast, et ta sisaldab mehaanilisi, elektrilisi ja magnetilisi elemente. Kõvaketas on tavaliselt 3 1/2 tollise läbimõõduga ja magnetiseeritva pinnaga plaat teeb 5400 pööret minutis. Huvitav on tähele panna, et kõvaketta 1 MB maksab umbes 1 EEK kusjuures pehmeketta 1 MB on 12 EEK, nii umbes :) Aga kõvaketta megabaite müüakse mitte vähem kui 2 100 tükki korraga; ja aina suuremaks väikseim kogus läheb!
Linux'i installeerimine algab tavaliselt just kõvaketta ettevalmistamisega. Samuti, kui osta töötavasse arvutisse juurde uus kõvaketas tuleb ta ette valmistada.
Kõvaketta tööks ettevalmistamisel
on põhimõtteliselt kolm etappi:
1. formateerimine | see on tavaliselt tehases ära tehtud ja pole vaja/soovitav endal teha; see on nö. "low-level" format mida tihti CMOS setupist teha saab; Kurjad keeled räägivad, et kui selle tegemise ajal vool ära kaob, siis on kettaga nö. duuga. Mis selle tegevuse tulemusena tehakse on teatavad füüsilised märked kõvakettale infopeade positsioneerimiseks. Samuti märgitakse ära sektorite algused. See asi on ühesugune sõltumata kasutatavast OS-ist. |
2. partitsioneerimine | kõvaketas jagatakse teie poolt väljamõeldud skeemi
kohaselt programmi fdisk abil osadeks:
Kui kõvaketta magnetiseeritavat pinda kujutada ette suure kündamata ja maalappideks jaotamata põllumaana, siis partitsioneerimist võiks võrrelda tolle põllumaa erinevateks lappideks jaotamisega. See jaotus tehakse tavaliselt kas tehnilistest või administratiivsetest kaalutlustest lähtudes. |
3. failisüsteemi loomine | Igale partitsioonile (va. swap) tuleb teha failisüsteem. Failisüsteeme on erinevaid aga linuxi jaoks on praegu kõige levinum nimetusega ext2 - "extended two/second". Failisüsteem on struktuur mis failide loomise/kustutamise käigus täieneb/väheneb kuid jääb iseenesest samaks. Seda saab teha programmiga mkfs - make filesystem. |
Tavaliselt ühendatakse kõvaketas nö. IDE kanali külge.
IDE on emaplaadil 40 kontaktiline issi-kontakt millega ühendatakse
kahe väljavõttega nn. lai IDE juhe. Kumbagi väljavõttesse
saab ühendada ühe kõvaketta. Kõvaketta asemel võib
ühendada ka CD-ROM-i mis on ekvivalentne ühe partisiooniga kõvakettaga
millele ei saa kirjutada.
PC -des on kaks nn. IDE kanalit: IDE1 ja IDE2, maksimaalselt saab
seega füüsiliste kõvaketaste ja CD-ROM-ide
koguarv olla neli. Loomulik, et arvuti eristab sama IDE kanali
peal olevaid kettaid ja neid nimetakse
IDE 1 puhul Primary Master ja Primary Slave ja
IDE 2 puhul Secondary Master ja Secondary Slave.
Milline ketas saab sama kanali peal olevatest
masteriks ja milline slaveks sõltub kõvakettal olevatest
käsitsi paika pandavatest kontaktidest (nn. jumperitest ehk hüppajatest).
NB! Ei ole õige ütelda ketta kohta, et ta on IDE 1 Primary
Master. "IDE 1" ja "Primary" väljendavad tegelikult sama asi. Nõnda
peaks olema piisav ütelda IDE1 Master või Primary Master.
Illustratsioon:
Joonisel on PC- sse ühendatud neli (maksimaalne arv) kõvaketast
(igaühe asemel võik olla ka CD; muide CD saab vahes ühendada
ka helikaardi külge). All tabelis on kirjutatud kuidas neid sõnadega
nimetada ja kuidas neid linux seadmeteks nimetab.
Linux'is on kettad nn. device'd ning neid identifitseeritakse järgmiselt:
|
|
|
|
IDE1 Master | Primary Master |
2 500 MB
|
|
IDE1 Slave | Primary Slave |
3 200 MB
|
|
IDE2 Master | Secondary Master |
1 700 MB
|
|
IDE2 Slave | Secondary Slave |
800 MB
|
|
Last but not least: et arvuti ühendatud kettad ka kasutusele võtaks
ei piisa vaid ketaste jumperite ümbesättimisest; kõige
parem on lasta arvuti CMOS SETUP'il seadmed automaatselt avastada:
IDE AUTODETECT - > ... -> SAVE AND EXIT.
Muuseas arvuti bootimisel te korraks ka näete mis ta ära
tundunud on. NB! CMOS ei pea näitama CD-ROM'i seadmeid aga boodil
on nad näha. Mõnikord on oluline määrata ära
ka kõvaketta mode. See on tavaliselt 4, vanemad vindid tuleb jõuga
3 peale panna muidu läheb asi nende jaoks liiga kiireks.
Tutvustame kõvaketta kirjeldamisel kasutatavaid mõisteid:
- rada (track)
Ja mõned väited:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ning lõpuks esitame konkreetse ketta tehnilised andmed (Quantum Fireball TM 1 280 MB):
- 1 kahepoolne plaat
- kaks füüsilist infopead
- radu on silindri kohta 2 sest kasutatakse kahte poolt
- pöörlemiskiirus 4500 pööret minutis (rpm - rotations
per minute)
- ketta pool on jagatud 15 tsooniks (0, 1, ... , 14 arvud suurenevad
sissepoole)
- radu igas tsoonis 454
- radu ketta poole kohta on 454 * 15 =6 810
- radu kokku 2*6 810 = 13 620
- sektori suurus 512 B
- sektoreid rajal 122 - 232, keskmiselt 185
- sektoreid kokku 185 * 6 8120 *2 = 2 519 700 ~ 2 503 872 (vt. alt
tabelit miks viga tekib)
- info lugemise kiirus keskel rahulikum ääres kiirem sest
samuti on joonkiirused: 49, 56 - 92,86 Mbit / s
- ketta maht 512 * 2 503 872 = 1 281 982 464 B = 1223 MB sest 1 MB
= 1 024 * 1 024 = 1 048 576 B ja mitte 1 000 000 B :)
- keskmine pöördumise aeg 12 ms
Aga asi näib olevat vastuoluline, sellele kes on vaadanud sama
ketta parameetreid CMOS SETUP -> Starnadr CMOS setup sektsioonist:
HDD | TYPE | SIZE | CYLS | HEAD | PRECOMP | LANDZ | SECTOR | MODE |
VINT | tüüp | suurus | silindreid | päid | sektoreid rajal | mood | ||
Pr. Master | User | 1 282 | 621 | 64 | 0 | 2483 | 63 | LBA |
reaalselt | 1 282 | 13 620 | 2 | 122 .. 232 |
ketta suurus = (sektorite arv rajal) * (silindrite arv) * (peade arv) * 512 B = 1 281 982 464 B = 1223 MB
Asi on vist selles, et BIOS'i (Basic Input Output System) jaoks emuleerib ketta elektroonika asja selliselt et on peade arvu suurendanud ja teisi parasjagu vähendanud.
4. Arutlused info paigutusest kõvakettal
Teadaolevalt toimub info salvestamine kõvakettale tema magnetpinna ümbermagneetimisel. Iga bitt kujutub doomeni (see on piltlikult nagu kompassinõel) asendiga: kas üles või alla (0 või 1). Kaheksa sellist doomeni moodustavad okteti (ehk baidi). Tehnoloogilistel põhjustel loeb ja kirjutab infopea terve bloki korraga - see on füüsiliselt paljudel kõvaketastel 512 B; aga OS'i jaoks on selle suurus määratav failisüsteemi tegemisel, tavaliselt 1 kB (= 1024 B) mis on 2 sektorit. Edaspidi tuleb seda tähelepanekut arvestada - mõnes olukorras mõeldakse bloki all füsilist 512 B'i teisel juhul aga seda mida programm mke2fs OS'i jaoks teeb:
mke2fs -b 1024 /dev/hdd1
Oluline on märkida, et kui fail on nt pikk 1 026 B, siis võtab ta ruumi 2 blokki - üks blokk on täis ja teisest kasutatud vaid 2 B (kusjuures teise bloki 1 022 B ei saagi kasutada - surnud ruum).
Olgu meil tarvis kirjutada kõvakettale
50 kB suurune fail. Esmapilgul näib, et kõige kiirema lugemis/kirjutamiskiiruse
saame kui need 50 kB kirjutatakse kõvekettale füüsiliselt
järjestikustesse 50-sse blokki. Tegelikult see ei pruugi sugugi nii
olla. Ja järgmisel põhjusel:
Magnetpind pöörleb pidevalt
ja infopea ei suuda peale ühe blokiga tegelemist kohe asuda järgmise
kallale. Kuni ta on ühega valmis ja suudaks hakata järgmist st.
füüsiliselt järgmist lugema on see füüsiline järgmine
juba alt ära sõitnud ja peab ootama kuni blokk uue ringi ajal
taas infopea alla satub. Sellisest olukorrast on kaks väljapääsu:
1. kasutada vaheldumisi erinevaid
infopäid (st. üks fail asub füüsiliselt mõlemal
kettapoolel)
2. kui kasutada siiski vaid ühte
pead, on otstarbekas fail kettale kanda nt. üle bloki: nii ei pea
iga bloki lugemise järel uut ringi ootama.
See pole nüüd küll tehniliselt täpne kõvaketta töö kirjeldus, mille järgi saaks omale kõvaketast ehitama hakata, aga levinud arusaama, et igal kettal tuleb hoida ca 10 % alati tühi toetab see jutt küll.
Kuidas?
Sest, kui ketas on pilgeni täis
(vaba nt. 500 MB-st ainult 1 MB), siis püüab kõvaketas
(nt. 800 kB) faili kirjutamisel järgida ikka oma optimaalset algoritmi,
aga kuna vastaval kohal kuhu ta tahaks blokki kirjutada pole ruumi, siis
ketrab ta tühju ringe või püüab paigasolevadi ümber
paigutada, et siiski blokid kuhugi maha panna, sest ruumi ju on. Lõpuks
tal ikka see ka õnnestub. Ja kui nüüd selliselt salvestatud
faili lugeda, siis läheb kettal jälle tükk aega, et see
800 kB kokku korjata kuna need 800 blokki asuvad ebaoptimaalsetes paikades.
Selline mehhanism (mitteoptimaalsus) hakkab tööle juba siis kui
kettal on vaba veel ca 10 %. Ja seda nähtust nimetatakse ketta fragmenteerumiseks.
Linuxi all ei ole eriti aktuaalne kasutada defragmentaatoreid sest failisüsteem
on nii hea :) Need
on siiski olemas.
Kuid kui vint üks kord järjest
ääreni täis salvestada, siis võib juhtuda, et blokid
satuvad ilusti optimaalsetesse asukohtadesse ning sealt vaid lugedes ei
tohiks kiiruse probleeme olla. Teoreetiliselt. Nii on põhimõtteliselt
CD-ROM'idega.
5. Partitsioonid
kõvakettal
Ühe füüsilise kõvaketta peal võib olla kuni neli primary partitsiooni või kolm primary ja üks extended partitsioon. Oluline on teadvustada, et primarite ja extendidi maksimaalna koguarv on neli või vähem kusjuures ühel füüsilisel kettal saab olla vaid üks extended partistsioon. Kui ühe kõvaketta peal töötab vaid linux, siis pole vajadust lausa kolme primary järgi. Piisab nt. ühest - kahest primarist ja ühest extendidist.
Siin on väike vigur veel juures, nimelt extended partitsioon ei ole ise infohoidjaks - ta on asukoht omakorda teistele 'partitsoonidele' - nö. loogilistele ketastele. Noid loogilisi kettaid võib aga olla juba "palju".
Kogu info kõvaketta partitsioonidest kirjutatakse erilisse kõvaketta piirkonda - master boot sectori viimasesse 64 baidi sisse nn. partitsiooni tabelisse (kõvaketta 446 - 512 baidi sisu).
Ühe füüsilise ketta partitsioone tähistatakse selliselt:
/dev/hda1, /dev/hda2, /dev/hda3, /dev/hda4 - IDE1 Master ketta primary
või extended partitsioonid
/dev/hda5, /dev/hda6, /dev/hda7, ... - IDE1 Master ketta loogilised
kettad (nad nö. asuvad extendedi sees)
Esimelel joonisel kus on kujutuatud kõvaketta ehitust võiks
kujutada ka partitsioone: kui sellele kahe poolega 1 200 MB kettale teha
näiteks kaks 600 MB partitsiooni, siis ei asu üks partitsioon
ühel ja teine teisel pool vaid üks asub seespool mõlemal
pool ja teine väljaspool mõlemal pool. Ja pange edasi lugedes
tähele, et partitsioneerimisprogramm fdisk küsib teilt kah partitsiooni
suurust kas silindrites või MB-des. Niisiis, partitsioon moodustab
füüsiliselt kettal kontsentrilise ala - teatud arvu kõrvuti
paiknevaid silindreid.
6. Ketta partitsioneerimine:
fdisk, cfdisk
Partitsioneerida saab vaid kõvakettaid ja selleks on kaks programmi:
- fdisk käsurealt
- cfdisk kasutab curses library't ja on mc moodi
Kirjeldame kuidas teha järgmise punkti neljandat osa:
teeme partitsioonid oma parema äranägemise järgi:
/dev/hdb1 - 600 MB, primary
/dev/hdb2 - extended
/dev/hdb5 - 400 MB, 1. logical
/dev/hdb6 - 200 MB, 2. logical
1. käivitame fdisk'i ja vaatame help'i:
laura:/home/imre# fdisk /dev/hdb
Using /dev/hdb as default device!
Command (m for help): m
Command action
a
toggle a bootable flag
b
edit bsd disklabel
c
toggle the dos compatibility flag
d
delete a partition
l
list known partition types
m
print this menu
n
add a new partition
p
print the partition table
q
quit without saving changes
t
change a partition's system id
u
change display/entry units
v
verify the partition table
w
write table to disk and exit
x
extra functionality (experts only)
2. vaatame milline partitsioonitabel on:
Command (m for help): p
Disk /dev/hdb: 64 heads, 63
sectors, 621 cylinders
Units = cylinders of 4032 *
512 bytes
Device Boot
Begin Start End
Blocks Id System
/dev/hdb1
1 1
33 66496+ 82 Linux swap
/dev/hdb2 *
34 34
333 604800 83 Linux native
/dev/hdb3
334 334 621
580608 6 DOS 16-bit >=32M
Partition 3 has different physical/logical
endings:
phys=(619,
63, 63) logical=(620, 63, 63)
3. kuna me ei hooli mis siin on, siis võtame puhtaks: numbrite kahanemise järjekorras:
Command (m for help): d
Partition number (1-4): 3
Command (m for help): p
Disk /dev/hdb: 64 heads, 63
sectors, 621 cylinders
Units = cylinders of 4032 *
512 bytes
Device Boot
Begin Start End
Blocks Id System
/dev/hdb1
1 1
33 66496+ 82 Linux swap
/dev/hdb2 *
34 34
333 604800 83 Linux native
jne kuini plats on puhas
4. teeme /dev/hdb1 - 600 MB
Command (m for help): n
Command action
e
extended
p
primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-621): 1
Last cylinder or +size or +sizeM
or +sizeK ([1]-621): +600M
Command (m for help): p
Disk /dev/hdb: 64 heads, 63
sectors, 621 cylinders
Units = cylinders of 4032 *
512 bytes
Device Boot
Begin Start End
Blocks Id System
/dev/hdb1
1 1
305 614848+ 83 Linux native
5. teeme extended partitsiooni:
Command (m for help): n
Command action
e
extended
p
primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (306-621): 306
Last cylinder or +size or +sizeM
or +sizeK ([306]-621): 621
Command (m for help): p
Disk /dev/hdb: 64 heads, 63
sectors, 621 cylinders
Units = cylinders of 4032 *
512 bytes
Device Boot
Begin Start End
Blocks Id System
/dev/hdb1
1 1
305 614848+ 83 Linux native
/dev/hdb2
306 306 621
637056 5 Extended
6. teeme esimese loogilise ketta:
Command (m for help): n
Command action
l
logical (5 or over)
p
primary partition (1-4)
l
First cylinder (306-621): 306
Last cylinder or +size or +sizeM
or +sizeK ([306]-621): +400M
Command (m for help): p
Disk /dev/hdb: 64 heads, 63
sectors, 621 cylinders
Units = cylinders of 4032 *
512 bytes
Device Boot
Begin Start End
Blocks Id System
/dev/hdb1
1 1
305 614848+ 83 Linux native
/dev/hdb2
306 306 621
637056 5 Extended
/dev/hdb5
306 306 509
411232+ 83 Linux native
7. teeme teise loogilise ketta:
Command (m for help): n
Command action
l
logical (5 or over)
p
primary partition (1-4)
l
First cylinder (510-621): 510
Last cylinder or +size or +sizeM
or +sizeK ([510]-621): 621
Command (m for help): p
Disk /dev/hdb: 64 heads, 63
sectors, 621 cylinders
Units = cylinders of 4032 *
512 bytes
Device Boot
Begin Start End
Blocks Id System
/dev/hdb1
1 1
305 614848+ 83 Linux native
/dev/hdb2
306 306 621
637056 5 Extended
/dev/hdb5
306 306 509
411232+ 83 Linux native
/dev/hdb6
510 510 621
225760+ 83 Linux native
8. ja ongi partitsioonid ümber tehtud, salvestame ära:
Command (m for help): w
bash#
märkused:
- partitsioonide suurusi võib anda nii MB -des kui silindrite
järgi.
- pange tähele, et alguses saab teha extended ja primary
partitsioone ja pärast loogilisi kettaid ja primary partitsioone.
Nüüd on vaja veel teha failisüsteem ja asi vask. NB! pole vaja teha rebooti.
7. Näide: kõvaketta tööks ettevalmistamine
Mängime maha olukorra kus teil on laual
- arvuti, milles on CD-ROM drive'e (/dev/hdd) ja üks kõvaketas
(/dev/hda - root, st. millel on kernel)
- teine uus kõvaketas 1 200 MB mille tahate lisada teiseks vindiks
- /dev/hdb
1.
|
Seate jumper'i paika ja ühendate uues vindi /dev/hdb -ks. |
2.
|
Käivitate arvuti ja lähete CMOS SETUP'i sisse ning teete IDE AUTODETECT'i mispeale peaks arvuti ära tundma ühendataud kõvakettad (CD-ROM'i alati siin ei näidata). |
3.
|
Eeldame, et uus kõvaketas on tehniliselt korras ja seal peal pole infot mida ei võiks kaotada. Niisiis formateerimine pole vajalik. |
4.
|
teeme partitsioonid oma parema äranägemise järgi:
/dev/hdb1 - 600 MB, primary /dev/hdb2 - extended /dev/hdb5 - 400 MB, 1. logical /dev/hdb6 - 200 MB, 2. logical Muide te ei pruugi kõike kõvaketta mahtu koraga ära partitsioneerida. Osa võib jätta määratlemata ja alles hiljem kasutusele võtta. |
5.
|
teeme failisüsteemid:
mkfs -V -t ext2 /dev/hdb1 mkfs -V -t ext2 /dev/hdb5 ... või käsuga mke2fs kus saab määrata ka bloki suuruse: teeme 1 024 B bloki: mke2fs -v -b 1024 /dev/hdb1 mke2fs -v -b 1024 /dev/hdb5 ... |
6.
|
nö. mount'ime failisüsteemi kataloogistruktuuri külge
selleks teeme nt. juurikale kataloogi: /uusketas_hdb1 ning anname käsu mount -t ext2 /dev/hdb1 /uusketas_hdb1 ning teistega sarnaselt. Ja ongi formalselt neli uut kataloogi ning 2 100 MB mahtu juures! Omistatavad katalooginimed ei pruugi olla muidugi nii tehnilised :)
|
formateerime:
bash# fdformat /dev/fd0
paneme failisüsteem peale (mountimata floppy):
bash# mkfs -t ext2 /dev/fd0
Muide floppy kettast saab teha kerge vaevaga image'id (mountimata)
bash# dd if=/dev/fd0 of=/root/img1
Tähelepanu, 512 esimest baiti nimetatakse floppy puhul boot sectoriks ja kõvaketta puhul master boot recordiks. sinna cp käsuga ligi ei saa (st. kui ketas on mountitud, külla aga nii: cp /dev/fd0 /img.fail) . Saab dd (disk dublicate) käsuga:
bash# dd if=/dev/fd0 of=/root/bootsector bs=512 count=1
viimane käsk kopeerib maha ainult floppy boot sectori
if - input file
of - output file
bs - block size