10. Devices, harde schijven, partities en mounten
Ondanks dat moderne distributies bij de installatie het indelen van o.a. de harde schijf netjes
voor je regelen, is wat kennis over deze materie toch nodig om goed met Linux te kunnen
werken.
In de meeste (desktop) computers zit tegenwoordig een (E)IDE harde schijf. De controller
van de schijf (de IDE-controller) heeft meestal aansluitingen voor 4 IDE-apparaten (harde
schijven, CDR, DVD, CDRW, enz.), onderverdeeld in 2 zgn. masters en 2 slaves.
Soms wordt gebruik gemaakt van een SCSI-controller. Daarop worden, je gelooft het bijna
niet, SCSI-apparaten aangesloten (naast harde schijven e.d. kunnen dat ook bv. scanners
zijn). We gaan in dit verhaal echter uit van een IDE-interface.
Devices
De Linux kernel zorgt ervoor dat we hardware -apparaten, zoals harde schijven, aan kunnen
spreken als waren het bestanden, de zgn. device-bestanden. Je vindt ze in de /dev-directory.
Als je daar een ls -l geeft krijg je een wat afwijkende lijst van bestanden te zien.
Ten eerste zien we als eerste letter van veel bestanden daar een b of een c verschijnen. Deze
letters staan voor block-, resp. character-device. Een harde schijf is een block-device: de data
wordt in blokken opgeslagen. Als je iets naar een block-device schrijft wordt de data eerst in
een buffer opgeslagen. Bij character-devices (zoals het toetsenbord) gebeurt dat niet.
Verder zie je, in plaats van de bestandsgrootte, 2 getallen staan. Dit zijn resp. de major en minor
devicenummers. Deze getallen zijn eigenlijk belangrijker dan de bestandsnaam, want de kernel
kijkt alleen naar de devicenummers. Je zou een devicebestand kunnen maken voor je harde
schijf met de naam /dev/malle_pietje, als je er maar de juiste major- en minor devicenummers aan
koppelt. Hoe je dit moet doen, dat is niet iets voor beginners, bovendien ligt het nog wat
ingewikkelder dan hier beschreven...
Er zijn echter wat afspraken gemaakt over de benaming van de device-bestanden. Zo worden
de 4 mogelijke ide-apparaten hda, hdb, hdc en hdd genoemd:
Het apparaat op de master van de eerste IDE-controller heet /dev/hda
Het apparaat op de slave van de eerste IDE-controller heet /dev/hdb
Het apparaat op de master van de tweede IDE-controller heet /dev/hdc
Het apparaat op de slave van de tweede IDE-controller heet /dev/hdd.
Echter: met die benamingen wordt bij sommige distributies wel wat gerommeld. Zo zal een CD-ROM
speler vaak op /dev/cdrom zitten. Dit bestand is dan een (soft) link naar het "echte" device-
bestand.
Partities
Om het verhaal nog wat ingewikkelder te maken kan iedere harde schijf nog weer onderverdeeld
worden in partities. Dat klinkt moeilijk, maar betekent (wat simplistisch gezegd) dat de harde schijf
in stukken wordt verdeeld. Elk stuk wordt dan benaderd alsof het een aparte harde schijf is. Als
je onder Windows je harde schijf zou verdelen in 3 partities, zouden die waarschijnlijk C:, D: en E:
heten.
Voor het opdelen van een harde schijf in partities bestaan speciale programma's, waarvan de bekendste
fdisk heet (ook bekend in de DOS en Windowswereld). Maar als beginner zou ik daar nog maar even
afblijven, want je kunt er ook een hoop mee vernielen...! Als dit verhaal gelezen hebt, kun je de man-
of infopages van fdisk er nog wel even op naslaan.
Er bestaan nog wel meer programma's om te "rommelen" met de partitionering: diskdruid is er één en
Mandrake kent diskdrake. Welke er bij jouw distributie zitten merk je meestal tijdens de installatie van die
distro wel.
Een IDE-schijf kan onderverdeeld worden in maximaal 4 zgn. primaire partities. Soms is dat niet genoeg.
Dan kan 1 van die primaire partities gebruikt worden als extended partitie. En op zo'n extended partitie
kunnen weer vele zgn. logische partities gemaakt worden. Zo kan een IDE-schijf verdeeld worden in
maximaal 64 partities (een SCSI-schijf in maximaal 16 partities).
Ingewikkelde materie, zeker voor beginners, maar even noodzakelijk.
Die onderverdeling van de harde schijf is terug te vinden in de /dev-directory. Voor de eerste harde
schijf hebben de primaire partities de namen /dev/hda1 t/m /dev/hda4 en de logische partities
/dev/hda5 en verder. Deze nummering geldt ook, als je alleen maar 1 primaire en 1 logische partitie
hebt. Die heten dan hda1 en hda5. hda2 t/m hda4 bestaan dan niet. Dat wil niet zeggen, dat ze niet in
de /dev-directory zijn terug te vinden, maar ze zijn dan niet "gekoppeld" aan de hardware (omdat die
hardware dan niet bestaat...).
Waarom partitioneren?
Als je naast Linux ook nog Windows op je harde schijf hebt staan, dan is je harde schijf zo-wie-zo
al gepartitioneerd. Ieder besturingssysteem heeft een eigen partitie nodig (hoewel er ook Linux
distributies bestaan, die op een Windows harde schijf geinstalleerd kunnen worden, maar op dat
soort exotica gaan we maar even niet in). Linux alleen heeft het liefst al 2 partities: een voor het
"gewone" Linux bestandssysteem en een swap-partitie (op de swap komen we straks terug).
Maar er kunnen meer redenen zijn om je harde schijf te partitioneren:
- Beveiliging: als een partitie door wat voor oorzaak dan ook onleesbaar zou worden, ben je alle data
van die partitie kwijt. Als je de data verdeelt over meerdere partities, beperk je de schade.
- Betere efficiency: bij het formatteren van een partitie kun je aangeven hoe groot de blokken moeten
worden. Als je veel kleine bestanden hebt (bv. kleiner dan 1k) en je blokgrootte is 4k, dan kost
ieder bestand te toch 4k (maximaal 1 bestand per blok), dus 3k verlies. Daarom kan het een goed idee
zijn de blokgrootte aan te passen aan de gemiddelde grootte van de bestanden.
- Datagroei in de hand houden. Bijvoorbeeld: Linux is een multi-user systeem. Dan kan het gebeuren,
dat een gebruiker bijna alle ruimte van je harde schijf gebruikt, zodat de overigen weinig overhouden.
Dit zou je kunnen voorkomen door elke gebruiker een eigen partitie te geven.
Mounten
In Windows wordt iedere partitie benaderd als een apart "volume". Onder Linux echter is het mogelijk
een partitie te koppelen aan een bepaalde directory. Dit koppelen noemen we mounten, en dat doen we met
de opdracht mount.
Laten we maar eens een voorbeeld nemen. De home-directory van normale gebruikers in Linux is /home. Als
je inlognaam "piet" is, zal je home-directory normaal gesproken /home/piet zijn, en die van annie
/home/annie. Nu zijn het juist die home-directories, die nog wel eens uit de hand willen lopen. Dit kun
je voorkomen door de directory /home te koppelen aan een eigen partitie. Hij kan dan nooit groter worden
dan de ruimte die die partitie heeft. Dat koppelen gaat als volgt (je moet meestal wel root of su zijn
om dit te mogen doen...):
mount -t ext2 /dev/hda5 /home
Met de -t optie geef je aan om wat voor bestandssysteem het gaat (Windows kent vfat, Linux ext2, ext3,
reiserfs, enz.). Hier komen we in een ander hoofdstuk nog op terug.
/dev/hda5 is hier de partitie waaran we de directory /home koppelen.
Pas op: als je Linux eerst helemaal op één partitie had staan en nu die mount maakt, dan ben je alles
(even) kwijt wat onder je "oude" /home stond. Dus voer de opdracht niet echt uit, het is maar een
voorbeeld. Na het ontkoppelen vind je de oude situatie gewoon weer terug.
Alles wat na het mounten naar de /home-directory geschreven wordt, komt nu terecht op de partitie
/dev/hda5.
Om een mount ongedaan te maken gebruik je de opdracht umount (let op: zonder n na de u!):
umount /home of umount /dev/hda5
Je umount-opdracht kan dus wat korter zijn, want Linux weet wel wat aan wat gekoppeld zit. Dat kun je
ook zien als je de opdracht mount geeft zonder argumenten:
# mount
/dev/hda2 on / type ext3 (rw)
/dev/hda5 on /home type ext2 (rw)
...
Je krijgt een opsomming van alle gemounte devices, met de directory waaraan ze gekoppeld zijn en nog
wat nadere informatie.
Floppydisk
Ook je floppy moet je eerst mounten voor je er iets mee kunt doen. Meestal gebeurt dat op /mnt/floppy.
Als je iets naar /mnt/floppy schrijft, zonder de diskette eerst gemount te hebben, dan komt dat bestand
gewoon op je harde schijf te staan in de directory /mnt/floppy in plaats van op je floppy-disk.
Omdat een floppy ook een block-device is, waarvan de data dus gebufferd wordt, is het belangrijk je
floppy eerst te umounten, voordat je de diskette eruit haalt. Bij umounten wordt de data uit de buffer
alsnog naar de diskette geschreven. Je kunt dit ook bereiken zonder te umounten met de opdracht sync
(kijk maar eens op de man-page van sync).
Als je werkt in KDE of Gnome zal bij de meeste distributies tegenwoordig het mounten van je floppy (en
je CD-Rom e.d.) automatisch gaan. Lees daar de documentatie van je distributie maar even op na.
Een floppy wordt meestal als vfat (windows) bestandssysteem geformatteerd. Om zo'n diskette te mounten
geef je de opdracht
mount -t vfat /dev/fd0 /mnt/floppy
Hier is /dev/fd0 het device-bestand van je floppy-drive.
Nog een opmerking:
Als je floppy vermeld staat in je /etc/fstab, dan zou het kunnen, afhankelijk van de opties die verder in
/etc/fstab staan, dat het mounten van een diskette door een gewone gebruiker gedaan kan worden, en dan met
een kortere opdracht:
mount /mnt/floppy
Probeer maar eens of dat bij jouw distributie lukt...
Op het bestand /etc/fstab komen we in een later hoofdstuk nog wel terug.
Swap
Onder Linux wordt meestal gewerkt met een zgn. swap-partitie. Deze partitie is bedoeld als een soort
uitbreiding of buffer van het RAM van je computer. Als de kernel op een gegeven moment meer geheugen
nodig heeft dan je als RAM in je computer hebt zitten, zal hij proberen uit te wijken naar de
swap-partitie. De kernel probeert dat op een intelligente manier te doen, door juist die delen van
het geheugen naar swap te schrijven, die momenteel weinig gebruikt worden. Tenslotte is een harde schijf
veel en veel trager dan je RAM...
Het is natuurlijk beter om te zorgen, dat je voldoende RAM in je computer hebt, maar zorg toch, voor alle
zekerheid, maar voor wat swap-ruimte.
Over de grootte van de swap-partitie bestaat nogal wat discussie. Vroeger werd gesteld, dat je twee keer
de hoeveelheid RAM als sawp moest hebben. Had je dus 32MB RAM, dan moest je swap (minimaal) 64MB zijn.
Vroeger was de maximum (bruikbare) grootte van een swap-partitie 128MB, maar een moderne kernel (2.2 en
later) kan nu tot wel 2GB aan.
Met de goedkope grote harde schijven van tegenwoordig hoef je niet al te zuinig te zijn bij het vaststellen
van de grootte van de swap-partitie. Zelf houden we tegenwoordig de regel aan dat RAM + swap samen
minimaal 1GB groot moeten zijn.
Resume
Zoals aan het begin van dit hoofdstuk gesteld, zullen bij de installatie van een moderne distributie de
meeste keuzes m.b.t. partities e.d. wel door het installatie-programma genomen kunnen worden. Met de
hier genoemde informatie kun je echter de zaak wat meer toespitsen op eigen wensen en ideen.
De opdrachten, die we in dit hoofdstuk behandeld hebben, zullen we hieronder nog even noemen. Kijk vooral
de man- en infopages nog even na om er nog wat meer over te leren:
Laatst herzien op 18-12-2006
|