# Extended File System

Het extended file system (ext) is een van de eerste bestandssystemen die ondersteund werden door het Linux-besturingssysteem en het eerste bestandssysteem dat specifiek voor dat besturingssysteem geschreven werd.

## Geschiedenis

Het ext-bestandssysteem werd in april 1992 ontworpen en geïmplementeerd door Rémy Card als vervanging voor het Minix-bestandssysteem. Het Linux-besturingssysteem werd in eerste instantie in 1991 ontworpen en gebouwd op een Minixsysteem; het was dus een praktische beslissing van ontwerper Linus Torvalds om in eerste instantie toegang te verschaffen tot het bestandssysteem van zijn werksysteem.
In open verdeling via het internet was dit (Minix)systeem echter weinig populair: met name de 16 bitsadressering van datablokken in dit systeem en de bijbehorende maximale grootte van het bestandssysteem van 64 megabyte waren een ernstige hindernis in het gebruik. Ook de limiet in de lengte van bestandsnamen (14 tekens) was niet geliefd.
Om deze redenen werd in 1992 ext geïntroduceerd. Dit systeem verhoogde de maximale grootte van het bestandssysteem naar 2 gigabyte en stond bestandsnamen toe met een maximale lengte van 255 tekens.

## Architectuur

Ext is een serieus Unix-achtig bestandssysteem en biedt dan ook alle voorzieningen die bij een dergelijk systeem horen: inodes, directorystructuur, links en device special bestanden.

### Inodes

In tegenstelling tot veel andere bestandssystemen worden bestanden bij het ext-systeem niet door namen gerepresenteerd, maar door structuren, genaamd inodes. Een inode is een verzameling informatie over een bestand en bevat onder meer het bestandstype (directory, executable of niet, link, etc.), toegangsrechten (lezen, schrijven, per gebruiker, groep en iedereen), eigenaars van het bestand, tijdstempel van laatste wijziging, bestandsgrootte en adressen op de harddisk van de datablokken waarin het bestand opgeslagen ligt. Deze adressen zijn 21 bits lang en een blok kan 1 kilobyte bevatten (= $2^{10}$ dus interne adressen van 10 bits), waarmee een bestand dus een maximale grootte heeft van $2^{21+10}=2^{31}$ = 2 GB. Één enkel bestand kan dus het hele bestandsysteem bezetten.

### Directories

Het ext-systeem biedt de mogelijkheid om bestanden onder te brengen in groepen van bestanden genaamd directory's. In het ext-systeem is een directory een bijzonder soort bestand, waarvan de inhoud een verzameling paren is: een bestandsnaam en een inode per paar. Zo wordt de link opgebouwd tussen bestandsnamen en inodes en is het ook mogelijk dat bij één inode meerdere namen behoren. Speciale bestandssysteemoperaties op bestanden met het type directory zorgen ervoor dat het systeem om kan gaan met het concept van paden (de rij van namen die in de bestandssysteemboom leidt vanaf de wortel – het begin van het bestandssysteem – tot aan een specifiek bestand).
Een belangrijk punt om op te merken is dat Unix-achtige bestandssystemen (ook ext) bomen zijn en geen bossen – in tegenstelling tot bijvoorbeeld FAT16 kent een ext-systeem dus een enkele wortel (genaamd de "root" of gewoon "/" – het lege karakter gevolgd door het scheidingsteken tussen pad-onderdelen) in plaats van ten minste één (zoals C:, D:, enzovoorts).

### Links

Het ext-systeem kent ook links, dat wil zeggen verwijzingen naar bestanden. De simpelste vorm hiervan is de harde link en is in feite al beschreven onder de kop "Directory's": een harde link is een element van een directorybestand, een naam die behoort bij een inode. In een inode wordt een link-count opgeslagen, zijnde het aantal namen dat bij die inode hoort. Het bestand dat de inode representeert, kan pas worden verwijderd (dat wil zeggen, de datablokken vrijgegeven voor hergebruik) als het aantal harde links nul wordt. Het aanmaken van harde links is een speciale operatie van het ext-bestandssysteem, het verwijderen komt overeen met de operatie om bestanden te verwijderen (er is namelijk ook letterlijk geen verschil).
Naast de harde link kent Unix ook de zachte of symbolische link. Een dergelijke link is in feite een apart tekstbestand met daarin een padnaam. Volgt het besturingssysteem een pad dat naar een symbolisch linkbestand (symlink) leidt, dan wordt dat bestand uitgelezen en wordt intern het pad vervangen door het pad dat in het bestand opgeslagen is. Daarna start het aflopen van het pad opnieuw om het bestand te vinden.
Harde en zachte links hebben verschillende voor- en nadelen. Een harde link is zeer snel in het gebruik voor het besturingssysteem – het leidt direct naar een inode. Het neemt ook geen aparte ruimte in in het bestandssysteem. Een harde link is echter weinig flexibel; een harde link naar een niet-bestaand bestand kan niet, dus een harde link naar een bestand dat over het netwerk gelezen wordt ook niet (dat bestand hoeft niet altijd te bestaan). Sterker nog, een harde link naar een bestand buiten het "eigen" bestandssysteem is geheel onmogelijk. Een zachte link is veel flexibeler; een symlink kan een bestand aanwijzen buiten het "eigen" systeem, zelfs een bestand dat niet bestaat. Een symlink neemt echter meer ruimte in beslag (het is zelf een bestand, dus minimaal één datablok) en het volgen van een dergelijke link kost meer tijd.

### Device Special bestanden

Een lang gekoesterde opvatting van alle Unix-achtige besturingssystemen is dat alles een bestand is: bestanden, directory's, links, toetsenborden (oneindig bestand dat alleen maar uitleesbaar is), beeldschermen, netwerkkaarten, alles.
Randapparatuur binnen een dergelijk systeem bestaat dan ook als een speciaal (special) bestand, een bestand dat een apparaat voorstelt (Device file). Dergelijke bestanden hebben twee extra parameters in hun inodes: een major nummer (dat aangeeft wat voor apparaat het is) en een minor nummer (het hoeveelste dergelijke apparaat).
Er zijn twee soorten device special bestanden: character en block. Deze corresponderen met de twee soorten randapparaten – diegene wiens invoer en uitvoer karakter voor karakter gaat en diegene waarbij de invoer met hele blokken tegelijk gaat. Een harddisk is bijvoorbeeld een blokdevice, een muis is een characterdevice.

### Datablokken en superblok

Een bestandssysteem zoals ext is in feite een verzameling datablokken, onderling geordend in een aantal blokgroepen. Deze blokgroepen staan achter elkaar op de harddisk en bevatten ieder een lijst van inodes en een aantal stukken voor echte data (om bestanden in te schrijven – dit zijn de datablokken). Het eerste datablok (vooraan de eerste blokgroep, vrijwel vooraan de harddisk direct na de bootsector) is bij ext speciaal – dit is het superblok. Dit blok bevat informatie over de andere datablokken (voornamelijk het aantal) en alle blokgroepen (aantallen, locaties, etc.), zoals adressen van die blokken. Het superblok is gemarkeerd door een magic number – een "magisch getal", afgesproken als herkenningsteken. Dit getal staat op een vaste positie ten opzichte van het begin van het superblok (vanaf bit nummer 143). In het geval van ext is dit getal be5a941 (hexadecimaal).

## Effect op Linux

Het ext-systeem is geen lang leven beschoren geweest – het werd in 1993 alweer vervangen. Ondanks de grote verbetering die het was op het Minixbestandssysteem, kent ext zijn eigen limieten die zeer vervelend waren. Zo kent ext maar één tijdsstempel, terwijl aparte stempels voor laatste toegang, aanpassing van het inode en verandering van de data normaal zijn in Unix. Erger nog, ext ordent zijn inodes binnen blokken en blokken binnen het superblok via gelinkte lijsten; naarmate een systeem langer in gebruik was, werden deze lijsten minder en minder geordend en werd de performance steeds minder.
Ext hielp echter wel om Linux ingang te laten vinden bij veel hobbyisten; de ideeën achter ext waren zelfs zo goed, dat ext de basis werd voor zijn opvolger, het Second Extended File System (ext2).
Meer dan dat nog echter is de erfenis van ext ergens anders te zien. Het invoegen van een nieuw bestandssysteem betekende dat Linux al heel vroeg een methode nodig had om flexibel om te kunnen gaan met verschillende bestandssystemen tegelijkertijd. Om dit mogelijk te maken, werd in Linux dus al in 1992 de eerste versie van het Virtual Filesystem Switch (VFS) geïntroduceerd, wat een abstractielaag is boven het bestandssysteem en Linux toestaat transparant toegang te hebben tot een eindeloos uitbreidbare verzameling bestandssystemen. Dit is een belangrijke basis van de enorme flexibiliteit die Linux als systeem kenmerkt.