Journaling File SystemNTFS en EXT gebruiken B-tree om de meta-data op te slaan. Met een B-tree kan je snel gegevens terugvinden (bijvoorbeeld de naam van een bestand), maar is het 'tussenvoegen' van een element een nogal complexe handeling. Een B-tree is eigenlijk een soort gesorteerde tabel (om het eenvoudig te stellen). Alle schijfoopdrachten moeten atomair gebeuren, dat wil zeggen dat alle schijfopdrachten bij elkaar horen, anders verliest het bestandssysteem zijn ‘consistency’: pointers wijzen niet naar het bestand, blokken staan aangegevens als zijnde vrij terwijl ze al in gebruik zijn, enz. Fouten in het bestandssysteem hebben de neiging uitbreiding te nemen als ze niet op tijd ontdekt en verbeterd worden. Indien er een stroomstoring gebeurt tijdens het schhrijven zit het bestandssysteen in een ongecontroleerde situatie. Met de ‘dirty’ bit kan er aangegeven worden dat het bestandssysteem in een abnormale situatie verkeerd. Als de computer opnieuw opgestart wordt, wordt eerst het bestandssysteem opnieuw gecontroleerd, vooralleer er schrijfopdrachten kunnen gebeuren. Dit kan redelijk lang duren als er duizenden directories en milioenen bestanden nagezien moeten worden. De dirty bit zorgt er voor dat het bestandssysteem terug hersteld wordt, maar de bestanden zelf kunnen de verkeerde informatie bevatten, of niet gesynchroniseerd zijn (het klantenbestand kan bijvoorbeeld bijgewerkt zijn, maar niet het artikelbestand). Door te werken met een journaal waar alle uit te voeren opdrachten vermeld worden kan men dergelijke problemen vermijden. Het journaal is een hidden bestand in de root of in de system area. De meest gebruikte vorm van journaling is "ordered" (er bestaan er ook nog anderen, maar die gaan we niet bespreken). Eerst wordt de data weggeschreven, en dan wordt er een journaal-element aangemaakt: "dit deel van het bestand is op die plaats geschreven, en dit moet nog allemaal gebeuren". Dan worden de andere elementaire schrijfopdrachten uitgevoerd, en aangevinkt in het journaal: schrijven van de directory (indien de directory daardoor aangroeit wordt dit ook een volwaardige schrijfopdracht dat in het journaal opgenomen moet worden), aanpassen van de tabel van vrije blokken, aanpassen van de meta-data, enz... Bij heropstart na een stroomonderbreking weet het systeem welke elementaire opdrachten reeds gebeurd zijn, en welke niet. Het journaal wordt gewoon afgespeeld, en de nodige elementaire schrijfopdrachten die niet aangevinkt zijn worden alsnog uitgevoerd. Pas als het volledig journaal verwerkt is, kunnen nieuwe schrijfopdrachten uitgevoerd worden. De schijfcontrole kan achterwege blijven want het wordt vervangen door het verwerken van het journaal. Het gebruik van een journaal zorgt voor write amplification: een bestand wordt niet in een keer geschreven, maar via een journaal. Als de belasting op de computer wat lager wordt, dan wordt het journaal gelezen en de TO DO elementaire opdrachten uitgevoerd. De meta-data van een bestand komt dus eerst terecht in het journaal, en wordt pas later in het filesystem geïntegreerd. Voor solid state drives die niet gemaakt zijn om talrijke schrijfopdrachten te ondergaan is een journaal minder aangewezen. Een andere mogelijkheid om write amplification te vermijden is een filesysteem zonder directories, met enkel een journaal (in dit geval wordt de naam logfile gebruikt). Als de computer opgestart wordt, wordt de logfile ingelezen en omgevormd tot directories (die bestaan enkel in het werkgeheugen). Er bestaan verschillende bestandsformaten die enkel met een logboek werken. Deze zijn ideaal voor flash geheugens (zoals gebruikt in ssd schijven). |
