# Computersystemen/Opslagbeheer
## Doelstellingen

Onderstaande doelstellingen komen in meer of mindere mate aan bod. De lichtgrijze doelstellingen komen hier niet aan bod (bv. theorie die in een ander hoofdstuk wordt behandeld). De donkergrijze zijn praktijkoefeningen die aansluiten bij deze theorie, maar die in dit Wikibook niet behandeld worden.
Uit het leerplan D/2023/13.758/ van Applicatie- en Databeheer, een deel van leerplandoel 29:
* LPD 29: De leerlingen installeren, configureren en onderhouden on premise een client- en server-besturingssysteem en applicatiesoftware.
** Bestandsbeheersysteem, back-up
** Imaging
* Duiding. Het is noodzakelijk om inzicht te krijgen in het geïnstalleerde bestandsbeheersysteem om de documentenstructuur te kunnen onderhouden. I.v.m. het bestandsbeheersysteem komen volgende onderwerpen aan bod: functie, werking, fouten, herstelopties.
* Duiding. Het installeren van een on premise besturingssysteem houdt eveneens het formatteren en partitioneren van de harde schijf in.
Uit het leerplan Toegepaste Informatica van de richting informaticabeheer:
* 2.2.5 De verschillende niveaus van formatteren toelichten en de draagwijdte van deze operaties correct inschatten.
* 2.2.6 Een gegeven systeem formatteren, het partitioneren en partities aanpassen.
* 2.2.7 De functie en de werking van de mogelijke bestandsbeheersystemen toelichten.
* 2.2.8 Mogelijke fouten in het bestandsbeheersysteem opsporen en deze zo nodig herstellen.

## Lagenmodel

Op opslagmedia worden gegevens permanent bewaard. Voorbeelden zijn HDDs (harde schijven, hard disk drive), SSDs (solid state drive), ODDs (optische schijven, optical disk drive: CD-ROM, DVD, Blu-ray,...) of flashmedia (USB-stick, SD-kaart,...). Soms heeft men het verkeerdelijk over een (harde) schijf, terwijl het eigenlijk om een SSD blijkt te gaan (waar intern geen schijf of disk wordt gebruikt).
Zoals vaak in de computerwereld wordt gewerkt met een lagenmodel:
* Low-level formattering: dit gebeurt door de fabrikant van het opslagmedium en is nodig voor de interne werking. Er wordt gebruikgemaakt van verschillende technieken, gebaseerd op o.a. magnetische, elektronische of optische eigenschappen van stoffen. Zo zal de fabrikant van een harde schijf de cilinders, sporen en sectoren aanbrengen op de magnetische platters. Een vergelijking: stel dat je papieren wilt bewaren, dan gebruik je een ringmap, volledig gemaakt door de fabrikant.
* Partitionering: het onderverdelen van het opslagmedium in verschillende eenheden, die elk een eigen bestandssysteem kunnen krijgen. Om de vergelijking verder te gebruiken: je zorgt voor het gewenste aantal tussenschotten in je ringmap, zodat je ringmap onderverdeeld is.
* High-level formattering, kortweg "formattering": het aanbrengen van een bestandssysteem. Bij de vergelijking met de ringmap ga je per tussenschot een blad voorzien, waarin je kan bijhouden wat er precies inzit. D.m.v. U-mappen kan je nog verder zaken groeperen. Zelfs als de concrete data er nog niet inzit, nemen deze zaken toch al wat ruimte in.
Dankzij dit lagenmodel hoeft een programma (zoals een tekstverwerker) geen details te kennen over de interne werking van een opslagmedium (de low-level formattering). Dit programma zal niet rechtstreeks het opslagmedium benaderen, maar zal aanroepen doen via het besturingssysteem, dat op zijn beurt een bestands(beheer)systeem gebruikt.

## Partionering

Een opslagmedium partitioneren is het verdelen van dat medium in meerdere eenheden (de partities), zodat het lijkt alsof dit ene fysieke opslagmedium bestaat uit meerdere afzonderlijke opslagmedia. Een partitie-editor kan gebruikt worden om partities te maken, te wijzigen of te verwijderen. Soms heeft men het over 'schijf' of 'harde schijf', terwijl het eigenlijk om een 'partitie' gaat.

### Redenen

Er zijn verschillende redenen om een opslagmedium op te delen in partities, waaronder:
* Scheiding tussen het besturingssysteem + programma's en de gebruikersdata. Dit laat toe om
** een image back-up te nemen van ofwel het ene, ofwel het andere.
** om gemakkelijk het besturingssysteem + programma's te formatteren en te herinstalleren, waarbij de gebruikersdata op zijn eigen partitie kan blijven staan.
* Bij een multi-boot setup kan ieder besturingssysteem zijn eigen partities toegewezen krijgen (bv. bij een dual boot tussen Windows en Linux).
* Bij belangrijke data kan die geplaatst worden op een aparte partitie, die vervolgens verborgen (bv. bij HP Recovery; de systeempartitie van Windows) en/of geëncrypteerd (bv. met TrueCrypt/VeraCrypt) wordt.

### Partitietabel: MBR en GPT

Een partitietabel legt oa. vast waar de partities beginnen en eindigen:
* Eerst was er het MBR-partitioneringssysteem (soms ook aangegeven als MS-DOS-partioneringssysteem), waarmee in het begin maximaal vier partities mogelijk waren. Dit werd algauw onvoldoende gevonden, waarop de uitgebreide partitie (extended partition) werd ingevoerd. De gewone partities werden vanaf dat moment primaire partities genoemd. De uitgebreide partitie werd op zijn beurt opgedeeld in een onbeperkt aantal logische partities of logische stations. Bij MBR kunnen dus ofwel maximaal vier primaire partities zijn ofwel maximaal drie primaire en één uitgebreide partitie (die zelf meerdere logische partities kan bevatten).
* Op recentere systemen wordt vaak GPT (GUID Partition Table) gebruikt, omdat MBR meer en meer tegen beperkingen aanliep. Deze heeft geen opsplitsing tussen primaire, uitgebreide en logische partities en kan ook op grote harde schijven gebruikt worden.
Onderstaande afbeelding is een mock-up van enkele look-a-like situaties in GParted (een programma om partities te maken):
* Een MBR-partitietabel en 4 primaire partities. De vrije ruimte is verloren, omdat er geen partitie meer aan toegekend kan worden.
* Opnieuw een MBR-partitietabel, maar nu zijn er twee primaire partities, met 1 uitgebreide partitie, die zelf 3 logische partities bevat. De vrije ruimte is niet verloren, want er kan nog een extra logische partitie aangemaakt worden.
* Deze gebruik GPT als partitietabel, waardoor er geen uitgebreide of logische partities zijn. Er zijn dus gewoon 5 partities.
* Deze ziet eruit als de eerste, maar de laatste twee partities zijn logisch i.p.v. primair. De vrije ruimte is niet verloren, want er kan nog een primaire partitie gemaakt worden.
* De laatste heeft een probleem, daar er al 3 primaire partities en 1 uitgebreide toegekend is. In de vrije ruimte kan dus geen partitie meer aangemaakt worden.

## Bestandssysteem
### Functie

Een bestandssysteem (en: filesystem) is een door het besturingssysteem verzorgde, softwarematige indeling van een opslagmedium. Het besturingssysteem en applicaties zullen via het bestandssysteem toegang krijgen tot de data. Vaak is deze data via bestanden in een hiërarchische mappenstructuur ondergebracht.
Ter info: er bestaan ook bestandssystemen die niet rechtstreeks op het opslagmedium worden aangebracht, maar die via een netwerk werken (bv. DFS= Distributed File System van Microsoft of IPFS=InterPlanetary File System). Zo'n netwerkbestandssystemen worden hier niet behandeld.

### Voorbeelden

Er zijn heel wat bestandssystemen. Enkele voorbeelden:
* FAT32: gebruikt vanaf Windows 98
* NTFS: gebruikt vanaf Windows XP
* ext4: gebruikt bij Linux
* EROFS: dit Enhanced Read-Only File System bespaart ruimte ten opzichte van ext4 en levert bovendien hogere leessnelheden op. Het wordt mogelijks verplicht bij Android 13 en wordt al gebruikt bij Home Assistant. Door deze eigenschappen is het interessant voor apparaten met beperkte hardwarebronnen, zoals smartphones of smartwatches.
* SquashFS: oa. gebruikt bij Android Nougat en Linux Live distro's
* F2FS: het Flash-Friendly File System dat ontwikkeld is door Samsung en oa. gebruikt wordt bij Googles Pixel 3 en 3 XL.
* exFAT: een door Microsoft ontwikkeld bestandssysteem (open codering) speciaal bedoeld voor flash-schijven.
NLnet geeft subsidie voor ontwikkeling van Linux-bestandssysteem Bcachefs
Bestandssystemen bestaan al zó lang, dat je zou denken dat ze al járen uitontwikkeld zijn. Toch wordt er nog gezocht naar nieuwe mogelijkheden. Bv. met bcachefs: een copy-on-write (COW) bestandssysteem dat gestart is in 2015 en stabiel verklaard in 2022.
(nl) NLnet geeft subsidie voor ontwikkeling van Linux-bestandssysteem Bcachefs. tweakers.net (2024-02-21).
* GParted met dual boot: Windows (sda1-2) + Ubuntu (sda5-7).
* GParted met enkele bestandssystemen (via GPT-indeling).
* De cli partitie-editor Cfdisk

### Mogelijkheden en beperkingen

De verschillende bestandssystemen zijn onderling niet identiek aan elkaar qua mogelijkheden en beperkingen. We bespreken er enkele (zie ook Comparison of file systems waar features en limits besproken worden):
* de maximale padlengte/bestandslengte/bestandsgrootte/partitiegrootte. Denk bv. aan het willen opslaan van een zodanig groot bestand, dat het bestandssysteem er niet mee overweg kan (zelfs met voldoende vrije ruimte).
* de toegelaten karakters. Zo kan je bij een Windows-systeem de melding "De volgende tekens mogen niet in bestandsnamen voorkomen: \/:*?"<>|" tegenkomen, waar sommige van die tekens op een Linux-systeem mogelijks wel toegelaten worden. De oorzaak is steeds het onderliggende bestandssysteem. In dit geval kan je niet zomaar bestanden verplaatsen/kopiëren van het ene naar het andere bestandssysteem.
* het al of niet kunnen toekennen van rechten.
* metadata, zoals eigenaar van een bestand, tijdstip van laatste toegang, checksum,...
* quota: een beheerder kan een maximum schijfruimte opgeven die door een gebruiker mag ingenomen worden. Stel je een omgeving voor met meerdere gebruikers, waarbij er eigenlijk nog 500 GB vrij is. Dan zou één gebruiker in zijn persoonlijke map 500 GB plaatsen, waardoor iedereen plots een tekort aan schijfruimte heeft. De administrator zou echter a.d.h.v. quota kunnen instellen dat iedere gebruiker maar 200 MB maximaal kan gebruiken.
* ingebakken compressie, transparant voor de eindgebruiker. Afhankelijk van de implementatie kan het zijn dat bij deze "ingebakken compressie" niet alles wordt gecomprimeerd, maar bv. enkel bestanden die een lange tijd niet gebruikt zijn geweest. Zonder ingebakken compressie kan de eindgebruiker ook bepaalde bestanden comprimeren, maar dan moet hij/zij gebruikmaken van een apart programma (bv. WinZip of 7-zip) en zelf instaan voor het decomprimeren (om de data te kunnen bekijken/bewerken) en terug comprimeren.
* ingebakken encryptie, transparant voor de eindgebruiker (en: filesystem-level encryption). Als dit ingebakken zit in het bestandssysteem, kan het besturingssysteem bv. bij het inloggen (via login+wachtwoord) alles op de achtergrond decrypteren en bij het afmelden terug encrypteren. Bij een gestolen laptop/pc ziet de dief dan enkel de geëncrypteerde data (in de veronderstelling dat je uitgelogd bent). Zonder ingebakken encryptie kan de eindgebruiker ook bepaalde bestanden encrypteren, maar dan moet hij/zij gebruikmaken van een apart programma en zelf instaan voor het decrypteren (om de data te kunnen bekijken/bewerken) en terug encrypteren.

### Basiswerking

Om de functie en de werking van mogelijke bestandssystemen toe te lichten, zullen we FAT gebruiken. Dit is ontwikkeld voor MS-DOS en Windows. Het FAT-bestandssysteem is redelijk simpel en is dan ook ondersteund door bijna alle bestaande besturingssystemen voor de pc. Het wordt vaak gebruikt op media zoals USB-sticks of geheugenkaarten van foto- of GPS-toestellen. Zo zijn de fabrikanten bijna zeker dat het bij elk systeem herkend wordt.

#### De bestanden

Het is logische dat 'de data zelf' in de vorm van bestanden hun plaats moeten krijgen op het opslagmedium. Er zullen dus adressen nodig zijn en dus een bepaalde bitruimte om die adressen te kunnen vormen. Zo zouden we met 3 bits 8 adressen kunnen vormen (2³=8). Stel dat je een bitruimte van 16 bits gebruikt (FAT16 dus), dan weet je dat er 2$^{16}$=65536 adressen kunnen gevormd worden.
Stel dat je een bestand A maakt, daarna een bestand B en tenslotte een bestand C. Je zou dan kunnen denken dat het bestandssysteem er als volgt uitziet:
Dit is een aanpak die niet goed zou werken:
* Wat als je bestand A opent en extra info toevoegt? Moeten bestand B en C dan opgeschoven worden? Als dat gigabytes aan data is, dan duurt dat veel te lang.
* Een bestand kan zo op om het even welke byte beginnen. Je hebt dus heel veel adressen nodig en dus een grote bitruimte om al die adressen te kunnen vormen.
In de volgende delen leer je dat bestanden opgesplitst worden in delen (sectoren of clusters) en dat die delen niet noodzakelijk netjes na elkaar staan, maar dat ertussenin vrije ruimte of andere (delen van) bestanden kunnen tussen zitten.

#### De FAT met sectoren en clusters

Een bestand dat slechts uit 1 byte bestaat, komt amper voor. Dus is het eigenlijk ook niet nodig dat een afzonderlijke byte geadresseerd kan worden, wat adressen uitspaart. Bij een harde schijf zal men vaak 512 bytes samennemen in wat men een sector noemt. Voor die ene sector is dan maar 1 adres nodig (i.p.v. 512). Waar het kleinst adresseerbare element bij RAM-geheugen een byte is, is dit bij die harde schijf dan de sector (van 512 B).
Naast de bestanden zelf zal er in het bestandssysteem ook een tabel nodig zijn die adressen bijhoudt, zodat een specifiek bestand gevonden kan worden. Deze tabel heet toepasselijk de File Allocation Table.
Bij FAT16 kan je 2$^{16}$=65536 adressen vormen, namelijk sector 0 tot 65535. Als een sector 512 B groot is, dan betekent dit dat een partitie slechts 512 * 65536 = 33554432 B = 32 MiB groot kan zijn. Sector 65536 is niet meer adresseerbaar.
Wil je meer sectoren adresseren, dan kan je de bitruimte groter maken. Zo worden bij FAT32 als bitruimte 32 bits gebruikt. Dit betekent niet dubbel zoveel adressen, maar 65536 keer zoveel meer (want 2$^{32}$ = 2$^{16}$ * 2$^{16}$ = 4294967296‬ ≈ 4 miljard)!
Om grotere partities mogelijk te maken, kan men dus de bitruimte vergroten, maar men kan ook meerdere sectoren samennemen, om zo adressen uit te sparen. Men noemt dit clusters. Als je 2 sectoren samenneemt in een cluster, met FAT16, dan kan je nog steeds 65536 adressen vormen, maar de maximale partitiegrootte wordt nu 512 * 2 * 2$^{16}$ = 67108864 B = 64 MiB. Een overzicht bij FAT16:
| sectoren per cluster | clustergrootte | maximale partitiegrootte |
| 1 | 512 B | 32 MiB |
| 2 | 1 KiB | 64 MiB |
| 4 | 2 KiB | 128 MiB |
| 8 | 4 KiB | 256 MiB |
| 16 | 8 KiB | 512 MiB |
| 32 | 16 KiB | 1024 MiB |
| 64 | 32 KiB | 2048 MiB |
| 128 | 64 KiB | 4096 MiB |
Een bestand dat groter is dan één cluster, zal een clusterketting nodig hebben. Er wordt hiervoor gebruikt gemaakt van de File Allocation Table. Daar kan de volledige adresketting worden gevolgd, tot aan de speciale code 0xFFFF, die de End Of File markeert. Andere speciale codes zijn bv. 0x0000 (vrije cluster) of 0xFFF7 (bad sector in cluster of gereserveerde cluster).
Stel dat je 3 bestanden hebt: bestand A, B en C. Dan zou een deel van de File Allocation Table er als volgt kunnen uitzien:
| Clusteradres | Code/status | Uitleg |
| 0002 | FFF7 | Bad sector in cluster of gereserveerde cluster |
| 0003 | 0000 | Vrije cluster |
| 0004 | 0006 | Eerste cluster van bestand A, volgende cluster heeft als adres 0006 |
| 0005 | FFFF | Eerste en enige cluster van bestand B. |
| 0006 | 0009 | Tweede cluster van bestand A, volgende cluster heeft als adres 0009 |
| 0007 | 0008 | Eerste cluster van bestand C, volgende cluster heeft als adres 0008 |
| 0008 | FFFF | Tweede cluster van bestand C en ook de laatste cluster |
| 0009 | FFFF | Derde cluster van bestand A en ook de laatste cluster |
| 000A | 0000 | Vrije cluster |
| 000B | 0000 | Vrije cluster |
| 000C | 0000 | Vrije cluster |
| 000D | 0000 | Vrije cluster |
De bijhorende clusters kunnen dan als volgt zijn:
Enkele opmerkingen:
* Over cluster 0 en 1 hebben we geen informatie, omdat dit niet is opgenomen in de File Allocation Table
* Cluster 2 is niet bruikbaar.
* Bestand A is een gefragmenteerd bestand (wat iets meer tijd kan kosten om te laden), terwijl bestand C dit niet is.
* Cluster 5, 8 en 9 is niet helemaal gevuld. Dit is logisch, want niet ieder bestand is toevallig een veelvoud van de clustergrootte. Dit is verloren ruimte (de slack) en verklaart waarom er een verschil kan zijn tussen de eigenlijke bestandsgrootte en hoeveel dat bestand inneemt op het opslagmedium.
* Als bestand A, B of C wordt uitgebreid zal eerst de slack opgebruikt worden. Als dit onvoldoende is, dan kunnen de vrije clusters 0003, 000A, 000B, 000C of 000D gebruikt worden. Uiteraard moet de overeenkomstige code/status in de FAT steeds aangepast worden.
* De slack wordt nooit gebruikt om een ander bestand op te slaan. Zo zal een nieuw bestand D niet komen na het stukje van B, maar starten in een vrije cluster.

#### De mappen via directory-ingangen

Tot nu toe is er enkel gesproken over bestanden, maar hoe zit het met de mappen (en:directories)? Naast de FAT en de eigenlijke clusters moet het bestandssysteem ook nog een manier hebben om (sub)mappen bij te houden.
Simpel gesteld is er een lijst van bestanden en mappen: de directory-ingangen. Via één bit kan in zo'n lijst aangegeven worden of het gaat om een bestand of een map. In deze lijst is het voldoende om de startcluster van het bestand bij te houden: de rest van de clusteradressen kan in de FAT worden opgezocht. Deze lijst kan naast bestandsnaam en startclusternummer bv. ook creatiedatum, datum laatst gelezen en bestandsgrootte bijhouden.
Een sterk vereenvoudigde voorstelling van deze lijst kan er als volgt uitzien:
* Map X
** Bestand A op startcluster 0004
** Map Y
*** Bestand B op startcluster 0005
*** Bestand C op startcluster 0007

#### Samenvatting

Vanuit dit relatief eenvoudig voorbeeld is het duidelijker waarvoor een bestandssysteem zoals FAT dient:
* De "echte" data moet er zijn plaats krijgen. Deze data is vaak niet opgeslagen als één stroom van bytes, maar wordt opgedeeld in stukjes (clusters).
* Clusters die behoren tot één bestand vormen een clusterketting en bovendien moet het duidelijk zijn welke clusters vrij zijn: dit wordt bijgehouden in een tabel (bv. de File Allocation Table).
* Om een hiërarchische structuur mogelijk te maken zijn er directory-ingangen nodig, waarin onder andere de startcluster van een bestand wordt bewaard.

### Basisoperaties

Voor de werking van een bestandssysteem zijn er ook typische operaties zoals verwijderen, kopiëren en foutcontrole. Dankzij de kennis uit de basiswerking zal je nu beter begrijpen waarom sommige operaties relatief snel zijn en andere relatief traag.

#### Verwijderen

Het verwijderen van een bestand kan heel snel gebeuren:
* in de directory-ingang wordt aangegeven dat het bestand er niet meer is.
* in de FAT komt bij de bijhorende cluster(ketting) de code 0000, om aan te geven dat op dat clusteradres terug data mag geplaatst worden (het wordt een vrije cluster).
* de eigenlijke data blijft gewoon staan! De data wordt dus niet overschreven met bijvoorbeeld allemaal nullen, omdat dit te veel tijd zou kosten.
Stel dat we bestand C verwijderen, dan houdt dit onderstaande in voor de directory-ingang, de FAT en de visuele voorstelling.
De directory-ingang:
* Map X
** Bestand A op startcluster 0004
** Map Y
*** Bestand B op startcluster 0005
FAT:
| Clusteradres | Code/status | Uitleg |
| 0002 | FFF7 | Bad sector in cluster of gereserveerde cluster |
| 0003 | 0000 | Vrije cluster |
| 0004 | 0006 | Eerste cluster van bestand A, volgende cluster heeft als adres 0006 |
| 0005 | FFFF | Eerste en enige cluster van bestand B. |
| 0006 | 0009 | Tweede cluster van bestand A, volgende cluster heeft als adres 0009 |
| 0007 | 0000 | Vrije cluster |
| 0008 | 0000 | Vrije cluster |
| 0009 | FFFF | Derde cluster van bestand A en ook de laatste cluster |
| 000A | 0000 | Vrije cluster |
| 000B | 0000 | Vrije cluster |
| 000C | 0000 | Vrije cluster |
| 000D | 0000 | Vrije cluster |
Voorstelling:
Merk op dat in de voorstelling de letter 'C' er nog staat, om aan te geven dat de data van het bestand C er nog staat. De achtergrond bij C is nu echter wit, om aan te geven dat het een vrije cluster is. Cluster 0007 en 0008 kan dus bij een nieuw bestand of een uitbreiding van een bestaand bestand worden overschreven.

#### Verplaatsen

Bij het verplaatsen van een bestand binnen dezelfde partitie:
* bij de de directory-ingangen moet de startcluster naar de juiste directory-ingang verplaatst worden.
* de FAT blijft dezelfde
* de eigenlijke data blijft ook onaangeroerd
Dit kan dus héél snel gaan. Stel dat we in bovenstaand voorbeeld bestand A verplaatsen naar map Y, dan moet enkel het volgende gebeuren:
* Map X
** Map Y
*** Bestand A op startcluster 0004
*** Bestand B op startcluster 0005
Bij het verplaatsen van een bestand de ene naar een andere partitie, bv. van I naar II:
* Bij partitie II
** in de directory-ingang moet de startcluster van dit bestand bij de juiste map staan
** de FAT moet aangepast worden, zodat er een cluster(ketting) voor dit bestand voorzien kan worden.
** de eigenlijke data moet op de juiste clusteradressen gekopieerd worden
* Bij partitie I moet het bestand verwijderd worden
** in de directory-ingang wordt aangegeven dat het bestand er niet meer is.
** in de FAT komt bij de bijhorende cluster(ketting) de code 0000, om aan te geven dat op dat clusteradres terug data mag geplaatst worden (het wordt een vrije cluster).
** de eigenlijke data blijft gewoon staan (maar kan overschreven worden)!
Verplaatsen komt in het laatste geval dus neer op kopiëren naar de nieuwe plaats, om het daarna te wissen op de oorspronkelijke plaats. Dit neemt de nodige tijd in beslag.

#### Foutcontrole

Bij het bestandssysteem kunnen zaken foutlopen:
* Als in voorgaande FAT-tabel bij clusteradres 0006 de code FFF7 i.p.v. 0009 zou staan, dan zou een cluster van bestand A verloren zijn.
* Clusteradres 0009 behoort hierdoor plots niet meer tot een clusterketting en is dus ook een "verloren" cluster.
* Er kan ongeldige meta-data ontstaan, bv. een ongeldige clusterstatus of een ongeldige datum.
** Stel dat bij clusteradres 0006 als code 0000 zou staan, dan kan dit niet. Clusteradres 0006 zou daarmee behoren tot een clusterketting, maar toch ook een vrije cluster zijn.
** Stel dat bij het uitlezen van de datum 29-02-2011 zou gelezen worden, dan is dit een onbestaande datum, terwijl 29-02-2012 wel goed zou zijn.
* Wat als twee directory-ingangen verwijzen naar dezelfde startcluster? Dat zou betekenen dat ze dezelfde clusterketting hebben. Als het bv. gaat om foto.jpg en geluid.mp3, dan zit er duidelijk een fout in het bestandssysteem, want een afbeelding en geluid zijn niet hetzelfde.
Uiteraard verwacht je dat het besturingssysteem herstelopties aanbiedt. Zo zal hij meestal automatisch een schijfcontrole plannen als hij fouten in het bestandssysteem detecteert, zodat deze kunnen worden opgelost (bv. via programma's zoals fsck en CHKDSK). Soms is de input van een beheerder nodig. Verloren clusters worden vaak bewaard, omdat een beheerder er mogelijk nog verloren data kan uithalen. Zo kan je in Windows een map FOUND.000 tegenkomen, met bestanden FILE0000.CHK, FILE0001.CHK,... of in Linux de map lost+found. Alhoewel een schijfcontrole sommige fouten zal kunnen herstellen, blijft een back-up bijzonder belangrijk, omdat zo'n controle zeker niet alle fouten kan oplossen (virus, brand,...).
* Chkdsk in Windows
* fsck in Linux
Ter info. Dat twee directory-ingangen verwijzen naar dezelfde startcluster kan trouwens wel als het gaat om een systeem met tweemaal hetzelfde bestand. Zo kan ruimte bespaard worden. Denk bv. aan een cloudsysteem met gebruikers die met grote kans soms identieke bestanden hebben. Of denk aan een back-up met een versiesysteem, waarbij bestanden vaak identiek zijn. Hieronder een voorbeeld waarbij bunzip2, bzcat en bzip2 drie Linux-programma's zijn die (dankzij een hard link) allemaal verwijzen naar hetzelfde, te merken aan hetzelfde (inode)nummer 4599073. Daarnaast bestaan ook soft links (snelkoppelingen), die je hieronder herkent aan -> en die een verschillend (inode)nummer hebben.

#### Optimaliseren

We weten dat de clusters van een clusterketting niet noodzakelijk na elkaar staan, wat een snelheidsverlies betekent bij het lezen en schrijven. Het besturingssysteem biedt vaak mogelijkheden aan om deze terug naast elkaar te zetten: dit heet defragmenteren. Zeker vroeger kon je zo een behoorlijke snelheidswinst maken bij harde schijven. Door de toegenomen snelheid van de opslagmedia is het snelheidsvoordeel minimaal en door de toegenomen capaciteit duurt het bovendien lang om te defragmenteren. Defragmenteren wordt dus nog maar weinig uitgevoerd.
* voor defragmentatie
* tijdens defragmentatie
* na defragmentatie
* legende afbeelding 1+3
Waar defragmentatie een optimalisatie kan zijn voor HDDs is trim dat voor SSDs. Meestal zal het besturingssysteem optimalisaties zoveel mogelijk achter de schermen regelen.

## Concreet
### FAT32 versus NTFS

FAT is reeds vroeg ontwikkeld, de ontwerpers hebben het zo simpel en compact mogelijk gehouden voor de beperkte geheugens in die tijd. Daardoor heeft FAT verscheidene problemen, waaronder:
* De eenvoudige bestandsstructuur leidt gemakkelijk tot fragmentatie, wat zorgt voor grote vertraging tijdens bestandsoperaties.
* FAT is niet goed bestand tegen systeemcrashes.
* De maximale bestandsgrootte is 4 GiB, de maximale partitiegrootte 8 TiB en bestandsnamen mogen niet langer zijn dan 255 tekens
* Geen notie van rechten. In Windows '98 kon men verschillende gebruikers aanmaken, elk met een eigen bureaubladachtergrond ed. Het onderliggende bestandssysteem was echter FAT32, waardoor je via Windows Verkenner zonder problemen naar iemand zijn data kon bladeren, dit openen en/of wijzigen.
Vandaar werd NTFS ontwikkeld, met extra mogelijkheden, oa. op vlak van betrouwbaarheid (journaling) en veiligheid (rechten en encryptie):
* de maximale bestandsgrootte is 16 TiB (in theorie 16 EiB), de maximale partitiegrootte 256 TiB (in theorie 16 EiB)
* ondersteuning van metagegevens
* door journaling kunnen bepaalde schijffouten automatisch hersteld worden
* ondersteuning van rechten, waardoor kan bepaald worden welke gebruiker wat mag doen met bestanden en mappen. Deze rechten worden afgedwongen door het besturingssysteem. Let op: als dit besturingssysteem niet actief is, bv. door het opstarten vanaf een live-cd of live-usb, dan worden deze rechten niet afgedwongen! Wil je helemaal beschermd zijn, dan moet je nadenken over encryptie!
* encryptie, gebonden aan gebruikersaccount/gebruikerswachtwoord
* quota
* bestandscompressie, transparant voor de gebruiker

### Windows versus Linux

Het besproken lagenmodel werkt gelijkaardig tussen Windows en Linux. Ter info bespreken we kort de grootste verschillen: het benoemen van partities, het weergeven van paden en de standaard ondersteunde bestandssystemen:
| Windows | Linux |
| Er worden letters toegekend aan partities, wat ontstaan is vanuit DOS. De letters A en B zijn (nog steeds) gereserveerd voor diskettes. De eerste primaire partitie van het eerste opslagmedium krijgt dus de letter C. Zijn er meer partities dan er letters beschikbaar zijn, dan krijgen de resterende partities geen letter. Deze letters worden standaard automatisch toegekend. Onder Windows wordt ook wel het woord volume gebruikt in plaats van partitie. | In Linux worden partities niet aangeduid met letters, wel met de devicenaam. De eerste primaire partitie op de eerste harddisk wordt bv. vaak aangegeven als /dev/sda1, de tweede partitie als /dev/sda2. De eerste partitie op de tweede harddisk wordt dan /dev/sdb1. Om toegang te krijgen tot de data worden de devices gemount. Zo kan de gebruikersdata op partitie /dev/sda2 gemount worden onder /home. |
| Een voorbeeld van een pad is C:\Windows\System32. | Een voorbeeld van een pad is /etc/gimp. Merk op dat bij Linux een / wordt gebruikt (zoals op websites), terwijl Windows de \ gebruikt! De bovenste map is altijd /. |
| Bij verwisselbare media (bv. USB-stick) kan deze de ene keer bv. de letter E krijgen en een andere keer de letter F. | Bij verwisselbare media wordt dit vaak gemount in de vorm /media/gebruiker/labelnaam. |
| Bij Windows is standaard FAT32 en NTFS ondersteund. | Bij Linux zijn er heel wat ondersteunde bestandssystemen: bv. NTFS, FAT32, exFAT, ext4,... Vaak wordt ext4 gekozen. |
| Onder Windows kunnen partities bekeken worden via het beheerdersmenu van de Start-knop (rechtermuisknop > Schijfbeheer). | Onder Linux kan bv. GParted gebruikt worden om meer te weten te komen over de partities op een systeem. |

### Harde schijf versus flashgeheugen

Om de doelstelling De functie en de werking van de mogelijke bestandsbeheersystemen toelichten te behandelen is de uitleg relatief algemeen gehouden. Door de onderliggende werking van een opslagmedium (dus de low-level formattering) zijn er "onder de motorkap" echter verschillen tussen bv. een harde schijf of een flashgeheugen (SSD, USB-stick,...) die beide als NTFS geformatteerd zijn:
* Flashgeheugen heeft geen sectoren.
* Bij flashgeheugen wordt vermeden dat eenzelfde plaats vaak beschreven wordt (omdat dit de levensduur niet ten goede komt) via wear leveling. Deze techniek wordt verborgen voor het besturingssysteem, waardoor deze niet goed weet waar de data écht staat.
* Bijgevolg kan het besturingssysteem bij flashgeheugens geen goede beslissingen nemen bij het defragmenteren, waardoor er geen snelheidswinst is én waardoor er zelfs nodeloos wordt herschreven.
Mochten we dieper ingaan op de werking van de harde schijf en flashgeheugens zou bovenstaande nog duidelijker worden. Het belangrijkste is dat je onthoudt dat je flashgeheugens niet mag defragmenteren. Sowieso is NTFS al beter bestand tegen fragmentatie dan FAT32 en bovendien is een SSD al uit zichzelf behoorlijk snel. De dag van vandaag nog defragmenteren is dus niet echt aangewezen.

## Tools

Ter info een opsomming van mogelijke tools voor opslagbeheer:
| Groep | Software |
| Partitie-editors | De ingebouwde partitie-editor van Windows GParted, als apart programma van je Linuxdistributie of als Live-cd/Live-USB of als onderdeel van de Live-cd SystemRescueCD. |
| Schijfcontrole | De ingebouwde schijfcontrole van Windows fsck CHKDSK |
| Opruimen van bestanden | De ingebouwde schijfopruiming van Windows CCleaner |
| Defragmentatie | De ingebouwde defragmentatiemogelijkheden van Windows Defraggler |
* ↑ Leerplan Applicatie- en databeheer - 3de graad - D/A-finaliteit
* ↑ Leerplan Informaticabeheer D/2015/7841/003
* ↑ Tweakers.net: Android 13-telefoon heeft meer opslag over door verplicht nieuw bestandssysteem
* ↑ Zie ook Tweakers.net: Google zet Samsung-bestandssysteem op Pixel 3 en 3 XL
* ↑ In Linux-kernel 5.4 is native exFat-ondersteuning toegevoegd. Zie Tweakers.net: Linux 5.4 met exFat-ondersteuning is verschenen (oa. de commentaren zijn interessant om lezen).
* ↑ De "next gen" bestandssystemen zoals btfrs en ZFS bieden nog meer mogelijkheden. Zie bv. een diepgaand artikel op Arstechnica: Bitrot and atomic COWs: Inside “next-gen” filesystems
* ↑ Wil je toch meer weten over de werking van de SSD versus HDD, dan kan je terecht op server.idemdito.org.