%%%% mounting filesystems ######
\chapter{Beheren van bestandssystemen}
 Het aanmaken en mounten van bestandssystemen is essentieel voor toegang
 tot harde schijven.
 In de volgende secties worden de essenti\"ele elementen besproken.
 De meeste opdrachten die we gebruiken zijn alleen toegankelijk voor de
 SuperUser (root), dus je moet als zodanig zijn ingelogd.

\section{Aanmaken van partities met fdisk}
\label{partition}
 Op elke nieuwe harde schijf, moet je als eerste de partities aanmaken
 die later zullen worden gemount. Dit wordt bewerkstelligd met het
 utility \program{fdisk}. Hieronder volgt een typische \program{fdisk}
 toepassing om een partitie van 100MB toe te voegen aan
 \file{/dev/hdc}:

\subsection{Primaire partities}
\begin{alltt}
\hrulefill
  \rootsh{fdisk /dev/hdc}
   Command (m for help): {\bf{}n}  (maak met n een nieuwe partitie aan)
   First cylinder (768-788, default 768): 
   Using default value 768
   Last cylinder or +size or +sizeM or +sizeK (768-788, default 788): +100M
   Command (m for help): {\bf{}p}  (geef de huidige partitietabel weer)

   Disk /dev/hdc: 255 heads, 63 sectors, 788 cylinders
   Units = cylinders of 16065 * 512 bytes

      Device Boot    Start       End    Blocks   Id  System
   /dev/hdc1   *         1       128   1028128+   6  FAT16
   /dev/hdc4           742       788    377527+   5  Extended
   /dev/hdc7           768       780    104391   83  Linux
\end{alltt}

\subsection{Swappartities}
 
 Een \term{swap} partitie is gewoon wat extra geheugen dat voorkomt
 op je harde schijf. De meeste systemen hebben swap nodig als het systeem
 slechts een gemiddelde hoeveelheid RAM heeft.

 Voor het aanmaken van een swappartitie zet je het  
 \term{Partition Id} veld in \program{fdisk} in op 82 met de opdracht ``t''.
 Uitgaande van de vorige sectie veronderstellen we dat we ons nog steeds in
 \program{fdisk} bevinden:

\begin{alltt}
   Command (m for help): {\bf{}t} 
   Partition number(1-7): {\bf{}7}
   Hex code (type L to list codes):{\bf{}82}

   Command (m for help): {\bf{}p} 
   Disk /dev/hdc: 255 heads, 63 sectors, 788 cylinders
   Units = cylinders of 16065 * 512 bytes

      Device Boot    Start       End    Blocks   Id  System
   /dev/hdc1   *         1       128   1028128+   6  FAT16
   /dev/hdc4           742       788    377527+   5  Extended
   /dev/hdc7           768       780    104391   82  Linux Swap

   Command (m for help): {\bf{}w}  (schrijf de nieuwe partitie info weg en
   ga er uit)
   The partition table has been altered!
\hrulefill
\end{alltt}

\section{Aanmaken van een bestandssysteem}

Nadat je een partities zoals in 
\ref{partition} hebt aangemaakt, moet je er eerst met \program{mkfs}
(uitgesproken als ``make fs'') het bestandssysteem op aanmaken.

Bijvoorbeeld,

  \quad \rootsh{mkfs -t ext2 /dev/hda7}
 
Hiermee zullen de \term{inodes} en de \term{superblocks} dat het bestandssysteem
nodig heeft worden geschreven. \term{Inodes} zijn punten op het bestandssysteem
die corresponderen met bestandsnamen en opslag.
\term{Superblocks} zijn blokken gegevens waarin kritieke informatie over
het bestandssysteem is opgeslagen, wat kan worden gebruikt om het
bestandssysteem in het geval van een crash te herstellen.

Laten we voor de lol een \term{ext2} bestandssysteem op een diskette
aanmaken. Gebruik als eerste \program{fdformat -n /dev/fd0}. 
Gebruik daarna \program{mkfs} ...

\begin{alltt}
  \rootsh{mkfs -t ext2 /dev/fd0 1440}
\end{alltt}
 
\section{Met de hand mounten van bestandssystemen}

Een bestandssysteem is voor Linux onbruikbaar totdat je het aan het
besturingssysteem ``koppelt''. Deze koppeling wordt \term{mounten} genoemd.
Je kunt een bestandssysteem mounten met de opdracht \program{mount}.

Voor het mounten van een bestandssysteem, moet je de naam van de
partitie (als in /dev/fd0) en een \term{mountpoint} weten. Een
\term{mountpoint} is een lege directory waar het bestandssysteem zal
zijn te lokaliseren. Het MOET een lege directory zijn.
Dan voer je uit:

\begin{alltt}
\rootsh{mount -t ext2 /dev/fd0 /alt}
\end{alltt}

Waar \term {-t ext2} \program{mount} vertelt dat het \term{type}
bestandssysteem een ext2 bestandssysteem is, het standaard Linux
type bestandssysteem.
\file{/alt} is het mountpoint en \file{/dev/fd0} is het te mounten device.
Ga naar \file{/alt} en kijk of je de partitie kunt beschrijven.

Gebruik de opdracht \program{umount} om een bestandssysteem te verwijderen:

\begin{alltt}
\rootsh{umount /alt}
\end{alltt}

\section{Swappartities}

Swappartities zijn een belangrijke bron van virtueel geheugen voor het
systeem. Wanneer je al je RAM in gebruik hebt, maakt Linux gebruik van
swapspace voor de tijdelijke opslag.

\subsection{Swapspace voorbereiden}
Zodra je swappartities zijn aangemaakt, moet je de swappartitie voorbereiden
met de opdracht \program{mkswap}, waarmee de partitie wordt geformatteerd:

\begin{alltt}
\rootsh{mkswap  [-c] [-vN] [-f] device [size]}
\end{alltt}

Het device kan zowel een partitie of een bestand zijn.
Raadpleeg nu de \program{man} page voor de \program{mkswap} opties.
Een \term{swap} partitie wordt op de volgende wijze voorbereid:

\begin{alltt}
\rootsh{mkswap -v1 /dev/hda7}
\end{alltt}

Voor het maken van een swapbestand moet je als volgt de opdracht
\program{dd} toepassen:

\begin{alltt}
\rootsh{dd -f=/dev/zero 0f=/swap bs=1024 count=8192}
\rootsh{mkswap -c /swap 8192}
\rootsh{sync}
\end{alltt}

waarmee een swapbestand van 8192 blokken (8MB) vanuit /dev/zero zal worden
aangemaakt en in het bestand /swap in je rootdirectory zal worden geplaatst.

We gebruikte na \program{mkswap} de opdracht \program{sync} om 
te forceren de opmaakinformatie naar het bestandssysteem weg te schrijven,
anders neemt het systeem alle tijd om dit te doen.
\program{sync} garandeert dat \file{/swap} wordt geschreven voordat een
crash of systeemfout optreedt.


\subsection{Swapspace activeren}
Gebruik de opdracht \program{swapon} om een swappartitie te activeren:

\begin{alltt}
\rootsh{swapon /dev/hda7}
\end{alltt}

Gebruik de volgende syntax om een swapbestand te activeren:

\begin{alltt}
\rootsh{swapon /swap}
\end{alltt}

waar \file{/swap} het bovenstaande aangemaakte \term{swap} bestand is.

Voor het verwijderen van swap van het systeem, wordt \program{swapoff}
gebruikt:

\begin{alltt}
\rootsh{swapoff /swap}
\end{alltt}

\section{Tijdens het booten automatisch mounten met \term{/etc/fstab}}
Het bestand \file{/etc/fstab} bevat mountinformatie waar het systeem tijdens
het booten gebruik van maakt. Het formaat van \file{/etc/fstab} is:

\begin{alltt}
  # /etc/fstab
  # device         Mount Point   Type     Options     Freq  Pass  
  #
  /dev/hda1        /             ext2     defaults    1     1
  /dev/hda2        /usr          ext2     defaults    1     2
  /dev/hda3        /home         ext2     defaults    1     2
  /dev/hda7        none          swap     defaults    0     0
  /dev/cdrom       /mnt/cdrom    iso9660  noauto,ro   0     0
\end{alltt}

Wijzig dit bestand nu en voeg een regel toe voor ons met de hand gemounte
bestandssysteem voor bovenstaande \file{/dev/fd0}. 
Zodra dit klaar is, kun je de mountopdracht ervoor afkorten door
eenvoudigweg op te geven:

\rootsh{mount /alt}

Mount zal in \file{/etc/fstab} alle benodigde informatie opzoeken.
Je kunt \file{/etc/fstab} overschrijven door alle informatie als eerder
aangegeven op te geven.

Linux zal tijdens het booten automatisch alle bestanden mounten die correct in
\file{/etc/fstab} zijn weergegeven.
