In deze sectie zal ik het woord ``bestandssysteem'' op twee verschillende manieren gebruiken. Je hebt bestandssystemen op diskpartities en andere devices, en je hebt het bestandssysteem zoals het wordt gepresenteerd door een draaiend Linux systeem. Onder Linux, ``koppel'' je een diskbestandssysteem aan het bestandssysteem van het systeem.
In de vorige sectie gaf ik al aan dat initscripts de bestandssystemen
controleren en mounten. De opdrachten die dit doen zijn respectievelijk
fsck
en mount
.
Een harddisk bestaat uit één grote ruimte welke je met
enen en nullen kunt beschrijven. Een bestandssysteem legt hier een structuur
op aan, en maakt het lijken als bestanden binnen directory's binnen
directory's... Elk bestand wordt voorgesteld door een inode,
wat aangeeft van wie het bestand is, wanneer het werd aangemaakt en waar de
inhoud is te vinden. Ook directory's worden voorgesteld door inodes, maar
deze geven aan waar de inodes van de bestanden te vinden in die directory.
Als het systeem /home/greg/bigboobs.jpeg
wil inlezen, dan zoekt het
eerst naar de inode voor de rootdirectory /
in het ``superblock'',
dan zoekt het naar de inode voor de directory
home
in de inhoud van /
, vervolgens zoekt het naar de
inode voor de directory greg
, dan de inode voor
bigboobs.jpeg
wat het zal aangeven welke diskblokken in te lezen.
Als we wat data aan het einde van een bestand toevoegen, kan het gebeuren
dat de data is geschreven nog voor de inode is bijgewerkt om aan te geven dat
de nieuwe blokken toebehoren aan het bestand, of vice versa. Als op dat moment
de stroom uitvalt, zal het bestandssysteem beschadigd zijn. Dit is wat
fsck
tracht te detecteren en repareren.
De opdracht mount accepteert een bestandssysteem op een device, en voegt het
toe aan de hiërarchie die je ziet wanneer je het systeem gebruikt.
Gewoonlijk mount de kernel zijn root bestandssysteem voor alleen-lezen.
De opdracht mount wordt gebruikt om het opnieuw te mounten voor
lezen en schrijven nadat fsck
heeft gecontroleerd dat het in orde is.
Linux biedt ook ondersteuning voor andere soorten bestandssystemen: msdos, vfat, minix enzovoort. De details van het specifieke soort bestandssysteem zijn afgeleid door het virtuele file system (VFS). Ik zal hier echter niet in detail op ingaan. Het wordt besproken in ``De Linux Kernel'' (zie De Linux Kernel voor een url)
Er zijn parameters voor de opdracht mke2fs
waarmee ext2
bestandssystemen kunnen worden aangemaakt. Deze besturen de omvang
van de blokken, het aantal inodes, enzovoort. Kijk in de manpage van
mke2fs
voor verdere details.
Wat waar op je bestandssysteem wordt gemount, wordt bestuurd door het
bestand /etc/fstab
. Ook hier is een manpage voor.
Maak een zeer klein bestandssysteem aan, en bekijk het met een hex-viewer. Identificeer inodes, superblocks en bestandsinhoud.
Ik meen dat er tools bestaan die je een bestandssysteem grafisch tonen. Zoek er naar één, probeer het uit en email me de url en een voorbeschouwing!
Bekijk de code in de kernel van het ext2 bestandssysteem.
mount
maakt onderdeel uit van het pakket
util-linux, er staat een link in naar
Login en Getty.mount
, fstab
, fsck
en
mke2fs
/dev
aan te maken./bin
, /sbin
enzovoort in. Dit is een prima referentie
als je doel het maken van een minimaal maar compleet systeem is.