2.2 2005-06-10
Introductie van Block Devices Block Devices

We bekijken de schijf gedeeltes van Gentoo Linux en Linux in het algemeen, Inclusief Linux filesystems, partities en block devices. Dan, als je bekend bent met de ins en outs van schijven en filesystems, leiden we je door het proces van het opzetten van partities en filesystems voor je Gentoo Linux Installatie

Om te beginnen, zullen we block devices introduceren. Het meest bekende block device is waarschijnlijk die van de eerste IDE schijf in een Linux systeem, namelijk /dev/hda. Als je systeem SCSI of SATA schijven gebruikt, dan zal je eerste harde schijf /dev/sda zijn.

De hierboven genoemde block devices stellen een abstracte interface naar de schijf voor. Programmas kunnen deze block devices gebruiken om te communiceren met de schijf zonder zich zorgen te hoeven maken of het een IDE, SCSI of iets anders is. Het programma kan simpelweg de ruimte als een boel aangrenzende, willekeurig te bereiken 512-byte blokken gebruiken.

Partities

Hoewel het theoretisch mogelijk is om een volledige schijf te gebruiken voor je Linux systeem, wordt dit in de praktijk zelden gedaan. In plaats daarvan worden ze opgesplitst in kleinere, makkelijker te beheren block devices. Op x86 systemen, noemen we deze partities.

Partities worden in drie types opgedeeld: primary (primaire), extended (uitgebreide) en logical (logisch).

Een primaire partitie is een partitie die zijn informatie opslaat in de MBR (master boot record). Omdat een MBR erg klein is (512 bytes) kunnen er slechts 4 primaire partities worden gebruikt (bijvoorbeeld, /dev/hda1 tot /dev/hda4).

Een uitgebreide partitie is een speciale primare partitie (deze moet dus een van de primaire partities zijn) die meerdere parties kan bevatten. Oorspronkelijk bestonden deze niet, maar omdat vier partities te weinig waren, breidde men het formatteringsschema uit zonder backward compatibility te verliezen.

Een logische partitie is een partitie binnen de extended partitie. Hun definities worden niet in de MBR gezet, maar binnen in de extended partitie.

Geadvanceerde Opslag

De x86 Installatie CDs bieden ondersteuning voor EVMS en LVM2. EVMS en LVM2 vergroten de flexibiliteit van je partitie indeling. Tijdens de installatie instructies, zullen we ons richten op "normale" partities, maar het is goed om te weten dat EVMS en LVM ook ondersteund worden.

Een partitie schema ontwerpen Standaard Partitie Schema

Als je niet geinteresseerd bent in een partitie schema te tekenen voor je systeem, dan kun je het partitie schema gebruiken wat we in dit boek gebruiken:

/dev/hda1ext232MBoot partitie/dev/hda2(swap)512MSwap partitie/dev/hda3ext3Rest van de schijfRoot partitie
Partitie Filesystem Grootte Beschrijving

Als je wel wilt weten hoe groot een partitie moet zijn, of zelfs hoeveel partities je nodig hebt, lees dan door. Zo niet, dan kun je doorgaan met partitioneren van je schijf door het lezen van fdisk gebruiken om je schijf te partitioneren.

Hoeveel en hoe groot?

Het aantal partities hangt zeer sterk af van je omgeving. Bijvoorbeeld, als je een heleboel gebruikers hebt, wil je waarschijnlijk je /home gescheiden houden omdat het ten goede komt van je snelheid en veiligheid en backups maken is een stuk makkelijker. Als je Gentoo installeert als een mailserver, zou je /var gescheiden moeten zijn omdat al je mails in /var staan. Een goede keuze van je filesystem zal je snelheid flink verhogen. Gameservers zullen een aparte /opt hebben omdat de meeste gameservers daar geinstalleerd worden, vanwege dezelfde redenen als bij /home>: veiligheid en backups. Je wil /usr groot houden: het zal niet alleen het grootste deel van de applicaties bevatten, de Portage boom op zich neemt ongeveer 500 Mbyte in beslag, exclusief de verschillende broncodes die er in opgeslagen staan.

Zoals je kan zien, hangt het sterk af van je doel. Gescheiden partities of volumes hebben de volgende voordelen:

  • Je kan het best presterende filesystem kiezen voor iedere partite of volume
  • Je totale systeem kan niet vol zitten als een tool constant files naar een partitie of volume probeert te schrijven
  • Zo nodig, file system controles worden beperkt in tijd, omdat meerdere controles paralel kunnen worden uitgevoerd (hoewel dit voordeel vooral geldt bij meerdere schijven dan meerdere partities)
  • Veiligheid kan worden verbeterd door het mounten van enkele partities of volumes alleen-lezen, nosuid (setuid bits worden genegeerd), noexec (uitvoerbare bits worden genegeerd) etc.

Hoewel, meerdere partities hebben een groot nadeel: indien niet goed ingesteld, kun je een systeem krijgen met veel vrije ruimte op de ene en niets op de andere. Ook is er een 15-partities limiet voor SCSI en SATA.

Als een voorbeeld van partitioneren, zullen we je laten zien hoe je een 20Gb schijf die wordt gebruikt als een demonstratie laptop (met webserver, mailserver, gnome, ...) partitioneert:

$ df -h
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/hda5     ext3    509M  132M  351M  28% /
/dev/hda2     ext3    5.0G  3.0G  1.8G  63% /home
/dev/hda7     ext3    7.9G  6.2G  1.3G  83% /usr
/dev/hda8     ext3   1011M  483M  477M  51% /opt
/dev/hda9     ext3    2.0G  607M  1.3G  32% /var
/dev/hda1     ext2     51M   17M   31M  36% /boot
/dev/hda6     swap    516M   12M  504M   2% <niet gemount>
(Ongepartioneerde ruimte voor toekomstig gebruik: 2 Gb)

/usr is hier redelijk vol (83% gebruikt), maar als alle software is geinstalleerd, groeit /usr niet meer zo veel. Mensen denken misschien dat /var te groot is, maar Gentoo compileert alle programmas in /var/tmp/portage, dus moet je altijd op /var ten minste 1G vrije ruimte hebben als je niet te grote programmas compileert en ten minste 3G vrij als je KDE of OpenOffice.org zelf wil compileren.

fdisk gebruiken om je schijf te partitioneren

Het volgende deel beschrijft hoe je de eerder beschreven voorbeeld ontwerp moet maken, namelijk:

/dev/hda1Boot partitie/dev/hda2Swap partitie/dev/hda3Root partitie
Partitie beschrijving

Verander je partitie ontwerp zoals je zelf wil.

Het huidige partitie ontwerp bekijken

fdisk is een populaire en krachtige tool om je schijf op te delen in partities. Start fdisk op je schijf (in ons voorbeeld is dat /dev/hda):

# fdisk /dev/hda

Eenmaal in fdisk, zul je begroet worden door een prompt als deze:

Command (m for help): 

Type p om je huidige partitie configuratie te zien:

Command (m for help): p

Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1        14    105808+  83  Linux
/dev/hda2            15        49    264600   82  Linux swap
/dev/hda3            50        70    158760   83  Linux
/dev/hda4            71      2184  15981840    5  Extended
/dev/hda5            71       209   1050808+  83  Linux
/dev/hda6           210       348   1050808+  83  Linux
/dev/hda7           349       626   2101648+  83  Linux
/dev/hda8           627       904   2101648+  83  Linux
/dev/hda9           905      2184   9676768+  83  Linux

Command (m for help): 

Deze schijf is geconfigureerd om zeven Linux filesystems (elke met een partitie opgegeven als "Linux") en een swap partitie (opgegeven als "Linux swap").

Alle Partities verwijderen

Om te beginnen zullen we eerst alle bestaande partities van de schijf verwijderen. Type d om een partitie te verwijderen, bijvoorbeeld een reeds bestaande /dev/hda1:

Command (m for help): d
Partition number (1-4): 1

De partitie is nu gemarkeerd om te verwijderen. Hij zal niet langer te voorschijn komen als je p typt, maar hij zal niet verwijderd worden tot je de veranderingen opslaat. Als je een fout hebt gemaakt en wil stoppen zonder je veranderingen op te slaan, type onmiddelijk q en druk op enter. Je partitie zal niet worden verwijderd.

Nu, er van uit gaande dat je inderdaad je partitie wil verwijderen, type herhaaldelijk p om de partities te zien en daarna d met het nummer dat je wil verwijderen. Uiteindelijk zul je eindigen met een lege partitie tabel:

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):

Nu de partitie tabel in het geheugen leeg is, zijn we klaar om de partities te maken. We zullen een standaard partitie schema gebruiken zoals eerder besproken is. Natuurlijk ben je niet verplicht deze te volgen!

De boot partitie maken

Eerst zullen we een kleine boot partitie maken. Type n om een nieuwe partitie te maken, daarna p om een primaire partitie te selecteren, gevolgd door een 1 om de eerste primaire partitie te selecteren. Als je gevraagd wordt om de eerste cylinder, druk op enter. Als ze om de laatste cylinder vragen, type +32M om een partitie van 32 Mbyte te maken:

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (Druk op Enter)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M

Nu, als je p typt, zou je de volgende partitie printout moeten zien:

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1          1        14    105808+  83  Linux

Deze partitie moet opstartbaar zijn. Type a om opstartbaar aan of uit te zetten. Kies hierbij 1. Als je nu weer p indrukt, zul je zien dat een * in de "Boot" colom staat.

De swap partitie maken

Laten we nu de swap partitie maken. Om dit te doen, type n om een nieuwe partitie te maken, daarna p om fdisk te vertellen dat je een nieuwe primaire partitie wil. Daarna type je 2 om de tweede primaire partitie te maken, /dev/hda2 in ons geval. Als hij vraagt om de eerste cylinder, druk op enter. Als hij vraagt om de laatste cylinder, type +512M om een partitie van 512MB te maken. Als je dit gedaan hebt, type t om het partitie type in te stellen, 2 om de net gemaakte partitie te selecteren en type 82 om het type "Linux swap" te kiezen. Na deze stappen, zou p de partitie tabel moeten laten zien die er zo uit ziet:

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1 *        1        14    105808+  83  Linux
/dev/hda2         15        81    506520   82  Linux swap
De Root Partitie maken

Eindelijk, laten we nu de root partitie maken. Om dit te doen, type n om weer een nieuwe partitie te maken, daarna p om fdisk te vertellen dat je een primaire partitie wil. Type daarna 3 om een derde primaire partitie te maken, /dev/hda3 in ons geval. Als gevraagd wordt om de eerste cylinder, druk op enter. Daarna vraagt hij om de laatste cylinder, druk wederom op enter om een partitie te maken die de schijf verder vult. Na deze stappen, zou p in typen een partite tabel moeten geven die er zo uit ziet:

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1 *        1        14    105808+  83  Linux
/dev/hda2         15        81    506520   82  Linux swap
/dev/hda3         82      3876  28690200   83  Linux
Het partitie ontwerp opslaan

Om de partitie tabel op te slaan en fdisk af te sluiten, type w.

Command (m for help): w

Nu je partities gemaakt zijn, kun je doorgaan met Filesystems maken.

Filesystems maken Introductie

Nu je partities gemaakt zijn, is het tijd om een filesystem er op te zetten. Als het je niet interesseert wat voor filesystem je moet kiezen en tevreden bent met wat we als standaard kiezen in dit handboek, ga verder met Filesystems toepassen op een partitie Als het je wel interesseert, lees dan verder...

Filesystems?

De Linux kernel ondersteunt verschillende filesystems. We zullen ext2, ext3, ReiserFS, XFS en JFS uitleggen omdat deze het meest gebruikt worden op Linux systemen.

ext2 is een getest en echt Linux filesystem maar heeft geen metadata journaling, wat betekent dat routine ext2 filesystem controles redelijk veel tijd kunnen kosten. Er is nu een redelijke selectie van nieuwere journaled filesystems die zeer snel gecontroleerd kunnen worden en dus worden verkozen boven hun niet-journaled tegenstanders. Journaled filesystems voorkomen lange vertragingen als je opstart en je een inconsistent filesystem hebt.

ext3 is de journaled versie van het ext2 filesystem. Het heeft metadata journaling voor een snel herstel naast anere uitgebreide journaling modes zoals full data en ordered data journaling. ext3 is een zeer goed en betrouwbaar filesystem. Het heeft extra hashed b-tree index optie die hoge performance biedt in bijna iedere situatie. In het kort, ext3 is een geweldig filesystem.

ReiserFS is een B*-boom gebaseerd filesystem welke een zeer goede performance heeft. Verder veslaat hij ext2 en ext3 met factor 10x-15x bij kleine bestanden (kleinder dan 4k). ReiserFS schaalt extreem goed en heeft metadata journaling. Sinds kernel 2.4.18+ is ReiserFS bruikbaar voor algemeen gebruik en voor extreme gevallen zoals grote filesystems, gebruik van veel kleine bestanden, zeer grote bestanden en directories die duizenden bestanden bevatten.

XFS is een filesystem met metadata journaling die met een robuste feature-set komt en geoptimaliseerd is voor schaalbaarheid. We raden dit alleen aan op Linux systemen met high-end SCSI en/of fibre channel opslag en een UPS (Uninterruptible Power Supply) omdat XFS aggressief in-transit data cacht in het geheugen. Slecht ontworpen programmas (die geen goede voorbereidingen nemen bij het schrijven van bestanden naar de schijf en daar zijn er redelijk veel van) kunnen een redelijk deel aan data verliezen als het systeem onverwacht down gaat.

JFS is IBM's high-performance journaling filesystem. Het is recent productie-klaar geworden en er is nog niet genoeg ervaring mee om er iets (positief, noch negatief) over te zeggen.

Een filesystem toepassen op een partitie

Om een filesystem op een partitie of volume te maken, zijn er tools beschikbaar voor elk mogelijk filesystem:

ext2mke2fsext3mke2fs -jreiserfsmkreiserfsxfsmkfs.xfsjfsmkfs.jfs
Filesystem Commando om te maken

Bijvoorbeeld, om van de boot partitie (/dev/hda1 in ons geval) ext2 te maken en de root partitie (/dev/hda3 in ons geval) ext3 te maken, zou je dit gebruiken:

# mke2fs /dev/hda1
# mke2fs -j /dev/hda3

Maak nu de filesystems op je vers gemaakte partities (of logische volumes)

De swap partitie activeren

mkswap is het commando dat gebruikt wordt om swap partities te initializeren:

# mkswap /dev/hda2

Om de swap partitie te gebruiken, gebruik swapon:

# swapon /dev/hda2

Maak en activeer met behulp van de bovenstaande commandos de swap nu.

Mounten

Nu onze partities gemaakt zijn en een filesystem bevatten, is het tijd ze te mounten. Gebruik het mount commando. Vergeet niet om de benodigde map te maken waar je ze wil mounten. Als een voorbeeld mounten we de root en boot partities:

Door een bug in het e2fsprogs-pakket, dien je expliciet de mount -t ext3 te gebruiken indien je een ext3 filesystem gebruikt.
# mount /dev/hda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /mnt/gentoo/boot
Als je je /tmp op een aparte partitie wil, zorg dat de rechten goed staan na het mounten: chmod 1777 /mnt/gentoo/tmp. Dit geld ook voor /var/tmp.

We zullen ook een proc filesystem (een virtuele interface met de kernel) moeten mounten op /proc. Maar eerst moeten we onze bestanden op de partities plaatsen.

Ga verder met Installeren van de Gentoo Installatie bestanden.