Kõvaketaste arvutisse ühendamine,  ehitus ja partitsioneerimine

teejuht
 
1.
Sissejuhatus - formateerimine, partitsioneerimine, failisüsteeem
2.
Kõvaketaste ühendamine
3.
Kõvaketta ehitus
4.
Arutlused infopaigutusest kõvakettal
5.
Partitsioonid kõvakettal
6.
Ketta partitsioneerimine: fdisk, cfdisk
7.
Näide: kõvaketta tööks ettevalmistamine
8.
Pehmeketta ettevalmistamine
 
1. Sissejuhatus:

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.
 

2. Kõvakettad PC-s

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:
 
nimi
nimi
suurus
device linuxis
IDE1 Master Primary Master
2 500 MB
/dev/hda
IDE1 Slave Primary Slave
3 200 MB
/dev/hdb
IDE2 Master Secondary Master
1 700 MB
/dev/hdc
IDE2 Slave Secondary Slave
800 MB
/dev/hdd
See, et ketas on device ja sellise nimega on ketta kasutamisel oluline (NB! linuxis ei ole ketta tähti, kõik on ühtne kataloogistruktuur.

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.

3. Kõvaketta ehitus
 
Tutvustame kõvaketta kirjeldamisel kasutatavaid mõisteid: 

- rada (track) 
- silinder (cylinder) 
- infopea (head) 
- sektor (sector) 
- tsoon (zone) 

Ja mõned väited: 
 
- Kõik rajad on ühelaiused. 
- Kõik sektorid on ühepikkused ja võrdse pindalaga ja sellepärast mahub välimisele rajale neid rohkem kõrvuti. 
- Ühe tsooni radade peal on samasugune arv sektoreid 
- Joonkiirus on ääres suurem kui keskel ning sellepärast on ka lugemiskiirus ääres suurem kui keskel. 
- Tsoonide nummerdamist alustatakse väljast poolt 
- Ühel magnetketta poolel on tavaliselt üks infopea. 
Kusjuures kõvakettal võib sees olla mitmeid plaate
- Kõik infopead on omavahel jäigalt kokku ühendatud ja saavad liikuda vaid koos. 
- Silindri moodustavad üksteise kohale jäävad rajad 
- Kõvaketta poorelemiskiirus on muutumatu 
- Võrrelda kõvaketast ja magnetilist grammofoniplaati ja õige on, aga oluline erinevus grammofoniplaadi ja kõvaketta vahel seisneb selles, et grammofoniplaadi vagu on spiraal, aga magnetketta rajad on  kontsentrilised ringid. See pole muidugi ainus erinevus :) 
 

 
Üleval selgus, et kõvaketas pole ühtlane sektorite arvu mõttes raja peale (jooniselt näeme, et samasse nurka mahub keskele 2,5 nö. sektorit kusjuures äärele 4 tükki. 15 tsooni kasutamine ongi mõeldud selleks, et eraldada kontsentrilisi piirkondi, mille radadel on sama arv sektoreid; mida tsoon väljapoole seda rohkem neid seal on). Ketta ääre poole jäävad tsoonid liiguvad suurema joonkiirusega kui keskmised tsoonid ja see tingib ja infovahetuse kiiruse erivevuse. Illustreerime seda ka tabeliga tootja manuaalist:
 
Tsoon
Radade arv tsoonis
Sektoreid raja peale
Andmevahetuse kiirus
System
6
135
34, 04
0
454
232
92,86
1
454
229
91,69
2
454
225
90,35
3
454
225
89,16
4
454
214
85,75
5
454
205
82,14
6
454
195
77,86
7
454
185
74,40
8
454
180
71,37
9
454
170
68,24
10
454
162
64,16
11
454
153
61,74
12
454
142
57,37
13
454
135
53,68
14
454
122
49,56
keskmine/summa
6 810
185
74,08
 

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
Selle kohta pole muud öelda kui, et lohutav on teha tehe:

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 :) 
Ja milles avaldub üks linuxi erilisus on see, et kui näiteks masinas on palju kasutajaid st. /home on mahukas kataloogistruktuur, siis on mõistlik /home-iks mountida eraldi füüsilise ketta partitsioon ja seda siis vajadusel backup'pida.

 
8. Pehmeketta ettevalmistamine
 
Siin on asi õigelihtne:

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