Partitioneren van HardDisk(s)

Waarom zou je eigenlijk partitioneren? Alhoewel het mogelijk is een perfect functionerend Linux-systeem op een systeem met een enkele partitie draaiend te krijgen, en het in feite eenvoudiger is het op deze wijze te configureren, zijn er een aantal voordelen bij het partitioneren van één of meer opslagdevices in meerdere partities.

Ondanks dat het waar is dat Linux prima zal werken op een disk met slechts één grote gedefinieerde partitie, zijn er verscheidene voordelen om je disk op zijn minst in de vier belangrijkste (root, usr, home, en swap) bestandssystemen te partitioneren. Dit zijn:

Als eerste kan het zijn dat het minder lang duurt om de controle's op de bestandssystemen uit te voeren (zowel bij het opstarten als bij een handmatige fsck), omdat deze controle's parallel kunnen worden uitgevoerd. (Tussen twee haakjes, voer fsck NOOIT uit op een gemount bestandssysteem!!! Je zal er bijna zeker spijt van krijgen wat ermee gebeurt. De uitzondering hierop is wanneer het bestandssysteem read-only is gemount, in welk geval dit veilig is te doen). Ook zijn controle's op bestandssystemen veel eenvoudiger te doen op een systeem met meerdere partities. Als ik bijvoorbeeld wist dat er zich op mijn /home partitie problemen voordeden, zou ik het gewoon kunnen unmounten, er een bestandssysteemcontrole op uit kunnen voeren, en het dan opnieuw kunnen mounten om het bestandssysteem te repareren (als tegenovergestelde van het booten van mijn systeem in single-user mode met een rescue-diskette en het dan te repareren).

Ten tweede kun je met meerdere partities één of meer partities als read-only mounten, als je dat wilt. Als je bijvoorbeeld besluit dat alles in /usr door niemand, zelfs niet door root, mag worden aangeroerd, dan kun je de /usr partitie als read-only mounten.

Als laatste, het belangrijkste voordeel waarin partitionering voorziet is dat het bescherming biedt aan je bestandssystemen. Als er iets gebeurt met een bestandssysteem (óf door een fout van een gebruiker óf door falen van het systeem), zou men op een gepartitioneerd systeem waarschijnlijk alleen bestanden op een enkel bestandssysteem kwijt raken. Op een niet-gepartioneerd systeem zou men ze waarschijnlijk op alle bestandssystemen kwijt raken.

Dit kleine feit kan een groot voordeel zijn. Als je root-partitie bijvoorbeeld zo beschadigd is dat je niet kunt booten, kun je fundamenteel booten vanaf een rescue-diskset, je root-partitie mounten en kopiëren wat je kunt (of herstellen vanaf een backup, zie Chapter 8 voor details over hoe van bestanden een backup kan worden gemaakt en ze kunnen worden teruggezet) naar een andere partitie zoals home, en dan opnieuw booten met behulp van de nood-bootdisk, door in te tikken “mount root=/dev/hda3” (in de veronderstelling dat de partitie met je tijdelijke root bestandssysteem zich op de derde partitie van hda bevindt) en je volledig functionele Linux-box booten. Vervolgens kun je fsck op je niet gemounte beschadigde root-partitie uitvoeren.

Ik heb persoonlijk catastrofen ervaren bij bestandssystemen, en ik was erg dankbaar dat de schade door het gebruik van meerdere partities was beperkt.

Ten slotte, aangezien het onder Linux mogelijk is andere besturingssystemen (zoals Windows 95/98/NT, BeOS, of wat je dan ook hebt) in te stellen, en dan tweevoudig (of drievoudig, ...) je systeem te booten, kan het zijn dat je aanvullende partities in wilt stellen om hier gebruik van te maken. Je zou hier op z'n minst een apartie partitie voor ieder besturingssysteem in moeten stellen. Linux heeft een behoorlijke bootloader (genaamd LILO voor systemen gebaseerd op Intel, alhoewel iets vergelijkbaars ook beschikbaar is als MILO voor de Alpha, en SILO voor de Sparc) waarmee het mogelijk is tijdens het opstarten aan te geven welk besturingssysteem je wilt booten, met een time-out standaardboot van je favoriete besturingssysteem (waarschijnlijk Linux, niet?)

Je zou een disk (of meer disks) overeenkomstig je behoeften kunnen partitioneren. In mijn ervaring op Intel, Alpha, en Sparc platformen, voor een tamelijk belast systeem (rekening houdend met de toekomst), waarmee een tamelijke hoeveelheid taken kan worden verricht (als een desktopsysteem thuis of als een Internet-server op 't werk) heb ik bij benadering voor het vaststellen van een partitie-grootte de volgende ruimte tamelijk effectief gevonden.

Gegeven:

Een gegeven disk van X Mb/Gb          (bv. 2 Gb)
(Of, meer dan één disk met een gecombineerd totaal van X Mb/Gb)

Bereken:

(swap) ongeveer twee keer de hoeveelheid RAM (bv. 64 Mb systeem wordt 128 Mb swap)
/ (root)  ongeveer 10% van wat beschikbaar is             (bv. 200 Mb)
/home ongeveer 20% van wat beschikbaar is                 (bv. 400 Mb)
/usr alle resterende ruimte                               (bv. 1272 Mb)

/var (optioneel -- zie hieronder)
/boot (optioneel -- zie hieronder)
/archive (optioneel -- zie hieronder)

Natuurlijk zijn de hoeveelheden van hierboven slechts benaderingen. Uiteraard wil je een beetje met deze percentages goochelen, afhankelijk van waar je je Linux-systeem voor wilt gebruiken. Als je iets dergelijks gaat doen als het toevoegen van zeer grote applicaties als WordPerfect of Netscape, of misschien ondersteuning voor Japanse tekens toe gaat voegen, zou je er waarschijnlijk van profiteren als je wat meer /usr ruimte hebt.

Ik schijn altijd veel ruimte beschikbaar te hebben op /home, dus als je gebruikers niet veel doen (of als je strikte quota-grootte hebt opgelegd) of je geen shell-accounts en persoonlijke webpagina's biedt, enz., zou je de ruimte voor /home waarschijnlijk kunnen verlagen en /usr verhogen.

Hieronder staat een beschrijving van de diverse mountpoints en bestandssysteem-informatie, wat je een beter beeld kan geven van hoe je het best je partitie-grootte voor je eigen behoeften kunt definiëren:

Als er extra disk(s) worden toegevoegd, kunnen er verdere partities op de nieuwe disk(s) worden toegevoegd, op diverse mountpoints zoveel als nodig worden gemount -- dit betekent dat je met een Linux-systeem je nooit zorgen hoeft te maken dat je ruimte te kort gaat komen. Als het bijvoorbeeld in de toekomst duidelijk is dat sda6 vol zal raken, zouden we een andere drive toe kunnen voegen, een aardig grote partitie in kunnen stellen met een mount-point op /usr/local -- en dan alle informatie vanaf /usr/local naar de nieuwe disk kunnen transporteren. Maar geen enkel systeem of applicatie-component zou “breken” omdat Linux /usr/local zou zien ongeacht waar het te lokaliseren was.

Om je een voorbeeld te geven van hoe men partities in zou kunnen stellen, heb ik het volgende partitieschema op een Intel-systeem gebruikt (dual boot, Windows 95 en Linux):

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/hda1  *         1        1      254  1024096+   6  DOS 16-bit >=32M
/dev/hda2          255      255      782  2128896    5  Extended
/dev/hda5          255      255      331   310432+  83  Linux native
/dev/hda6          332      332      636  1229728+  83  Linux native
/dev/hda7          637      637      749   455584+  83  Linux native
/dev/hda8          750      750      782   133024+  82  Linux swap

De eerste partitie, /dev/hda1, is een DOS-geformatteerd bestandssysteem dat wordt gebruikt voor het opslaan van het alternatieve besturingssysteem (Windows 95). Dit geeft me voor dat besturingssysteem 1 Gb aan ruimte.

De tweede partitie, /dev/hda2, is een fysieke partitie (genaamd “extended”) welke de resterende ruimte op de drive omvat. Het wordt alleen gebruikt om de overblijvende logische partities in te kapselen (er kunnen slechts 4 fysieke partities op een disk voorkomen; in mijn situatie waren meer dan 4 partities nodig, daarom moest ik een logisch partitieschema voor de andere partities gebruiken).

De derde tot aan de vijfde partitie, /dev/hda5, /dev/hda6, en /dev/hda7, zijn allen e2fs-geformatteerde bestandssystemen die respectievelijk voor de / (root), /usr, en de /home partities worden gebruikt.

Ten slotte wordt de zesde partitie /dev/hda8, voor de swappartitie gebruikt.

Voor nog een ander voorbeeld, deze keer een Alpha box met twee harddisks (enkele boot, alleen Linux), heb ik voor het volgende partitieschema gekozen:

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/sda1            1        1        1     2046    4  DOS 16-bit <32M
/dev/sda2            2        2      168   346859   83  Linux native
/dev/sda3          169      169      231   130851   82  Linux swap
/dev/sda4          232      232     1009  1615906    5  Extended
/dev/sda5          232      232      398   346828   83  Linux native
/dev/sda6          399      399     1009  1269016   83  Linux native
/dev/sdb1            1        1      509  2114355   83  Linux native
/dev/sdb2          510      510     1019  2118540   83  Linux native

De eerste partitie, /dev/sda1, is een DOS-geformatteerd bestandssysteem, welke wordt gebruikt om de MILO boot loader op te slaan. Het Alpha-platform heeft een iets andere methode om te booten dan een Intel-systeem, daarom slaat Linux zijn boot-informatie op in een FAT-partitie. Deze partitie hoeft slechts zo groot te zijn als de kleinst mogelijk toegestane partitie -- in deze situatie, 2Mb.

De tweede partitie, /dev/sda2, is een e2fs-geformatteerd bestandssysteem dat voor de / (root) partitie wordt gebruikt.

De derde partitie, /dev/sda3, wordt gebruikt voor de swappartitie.

De vierde partitie, /dev/sda4, is een “extended” partitie (zie vorige voorbeeld voor details).

De vijfde en zesde partitie, /dev/sda5, en /dev/sda6, zijn e2fs-geformatteerde bestandssystemen respectievelijk voor de /home en /usr partities.

De zevende partitie, /dev/sdb1, is een e2fs-geformatteerd bestandssysteem dat wordt gebruikt voor de /archive partitie.

De achtste en laatste partitie, /dev/sdb2, is een e2fs-geformatteerd bestandssysteem dat wordt gebruikt voor de /archive2 partitie.

Nadat je klaar bent met het instellen van de partitie-informatie, zal je de nieuwe partitie naar disk weg moeten schrijven. Hierna laadt het installatieprogramma de partitietabel opnieuw in het geheugen, en kun je dus verdergaan met de volgende stap van het installatieproces.