# Bestandssysteem

Een bestandssysteem is een door het besturingssysteem verzorgde, softwarematige indeling van een opslagmedium (zoals een harde schijf). Het besturingssysteem (bijvoorbeeld van de computer of smartphone) gebruikt deze indeling om toegang tot een opslagmedium te verzorgen voor applicaties en voor zijn eigen gebruik, zodat data in de vorm van bestanden op het opslagmedium weggeschreven kan worden en ook weer teruggelezen.
Sommige bestandssystemen kunnen door meerdere besturingssystemen gebruikt worden, terwijl andere alleen in bepaalde (spel)computers gebruikt worden. Er zijn meer dan 100 verschillende bestandssystemen. FAT32, NTFS en ext4 zijn vaak gebruikte bestandssystemen. Mac OS X gebruikt APFS. En Linux gebruikt meestal ext4 of Btrfs

## Toepassing

Op het laagste niveau (tussen besturingssysteem en hardware) is een bestandssysteem een vertaling van fysieke locaties op een opslagmedium (sectoren, cilinders, en dergelijke) in aaneengesloten verzamelingen data: van een aantal plaatsen op het opslagmedium bepaalt het bestandssysteem dat ze bij elkaar horen en één enkel datablok vormen.
Op het hoogste niveau, vanaf het besturingssysteem naar de applicaties die de diensten van het besturingssysteem gebruiken, is het bestandssysteem een verzameling datablokken die onderling geordend zijn. Qua datablokken valt te denken aan bestanden (aaneengesloten rijen bits die door een of meer toepassingen geïnterpreteerd worden en een betekenis toegekend krijgen), maar ook interne verwijzingen voor gebruik door het besturingssysteem zijn datablokken. De onderlinge ordening wordt vaak aangebracht in de vorm van groeperingen van bestanden genaamd directory's of folders (Engelstalig) of mappen (Nederlands).

## Operaties op bestandssystemen

Een bestandssysteem is, in de loop der tijden, uitgegroeid tot een van de basisonderdelen van het besturingssysteem en computergebruik. Het is dan ook niet verbazend dat omgaan met het bestandssysteem een centraal onderdeel is van vrijwel iedere applicatie, elk programma. Daartoe biedt het besturingssysteem een aantal standaardoperaties aan in de vorm van systeemfuncties, zoals kopiëren, plakken en knippen (copy, paste, cut).
Normaal gesproken behoren de volgende functies tot die verzameling:
* Aanmaken van een bestand, soms met een vooraf bepaalde grootte
* Uitbreiden van een bestand door meer data toe te voegen
* Hernoemen van een bestand, de naam veranderen.
* Kopiëren van een bestand
* Aanmaken van een nieuwe directory (map)
* Hernoemen en verplaatsen van een directory
* Kopiëren van een directory
* Verplaatsen van een bestand binnen de directorystructuur
* Verwijderen van een bestandsnaam en het vrijgeven van de ervoor gereserveerde ruimte
* Verwijderen van een directory, al dan niet met inhoud

## Implementaties

Er zijn bijzonder veel mogelijke uitvoeringen van een bestandssysteem, ieder met eigen voor- en nadelen. Mogelijkheden variëren van het aanmaken van een enkele kaart van het systeem op een vaste plaats op het opslagmedium waaruit het besturingssysteem de locatie van alle bestanden en directory's leest tot een verdeling van het opslagmedium in een aantal opzichzelfstaande bestandsblokken die het besturingssysteem aan een vlag herkent dan wel wiens locaties op het opslagmedium in een kleine kaart vastgelegd worden.

## Journaling

Gegeven het grote belang van het bestandssysteem voor het functioneren van het besturingssysteem en alles wat daarmee samenhangt, is het van groot belang dat de integriteit van het bestandssysteem gewaarborgd blijft: de bestanden en directory's mogen niet door elkaar gaan lopen. Daarom zijn de meeste besturingssystemen uitgerust met gereedschappen om de integriteit van het bestandssysteem te verifiëren en fouten te verbeteren. Sommige besturingssystemen hebben deze functionaliteit geïntegreerd en voeren deze verificatie met regelmaat uit (in tegenstelling tot andere, die verificatie uitvoeren als de gebruiker of beheerder daarom vraagt).
Met de toename van grootte van opslagmedia in de laatste jaren zijn bestandssystemen ook veel groter geworden en beheren ze veel meer bestanden dan vroeger. De verificatie vergt dan ook veel tijd. Daarom is er een bepaalde klasse van bestandssystemen ontwikkeld, de zogenaamde journaling-bestandssystemen. Deze bestandssystemen koppelen de verzameling bestanden aan een logboek met operaties die op het systeem uitgevoerd zijn. Dit logboek slaat alle operaties op en geeft ook aan of deze operaties voltooid zijn of niet. De verificatie van het systeem wordt dan uitgevoerd door te controleren of alle operaties correct beëindigd zijn. Dit is aanzienlijk efficiënter dan alle bestanden en directory's nalopen en verifiëren dat alles fysiek nog goed in elkaar zit. Het nadeel is echter dat dit alleen werkt als de operaties van het besturingssysteem en het bijwerken van het logboek gegarandeerd goed uitgevoerd worden. Dit houdt in dat het wegschrijven van het journal geen gebruik mag maken van caching wat als nadeel heeft dat journaling-bestandssystemen matig presteren wanneer er veel operaties plaatsvinden. Daarnaast betekent het dat journaling niet populair is bij (harde) realtime besturingssystemen en andere, kritische systemen – deze systemen zijn zo kritiek dat ze niet kunnen vertrouwen op een logboek (of andere methode die afleiding gebruikt) om de integriteit van het bestandssysteem te garanderen.

## Vergelijking van veelgebruikte bestandssystemen

In de onderstaande tabel worden NTFS en FAT (Windows-formaten) vergeleken met HFS, HFS+ en JFS (Macintosh-formaten).
| | NTFS | exFAT | FAT32 | FAT16 | HFS | JFS | HFS+ |
| Maximale bestandsgrootte | 2 terabyte | 64 zettabyte | 4 gigabyte | 16 megabyte | 2 gigabyte | 4 petabyte | 8 exabyte |
| Maximale schijfgrootte | 256 terabyte | 64 zettabyte | 2 terabyte (127 gigabyte voor Windows 95/98) | 4 gigabyte | 2 terabyte | 32 petabyte | 16 exabyte |
| Jaar van ontwerp | 2000 | 2008 | 1996 | 1977 | 1985 | 1990 | 1998 |
| Besturingssystemen met leesondersteuning | Windows, Mac OS X, Linux | Windows, Mac OS X (10.6.5 en later) | Windows, Mac OS X, Linux | Windows, Mac OS X, Linux | Mac OS, Mac OS X, Windows op een Intel-Mac^ | Mac OS X, Linux | Mac OS, Mac OS X, Windows op een Intel-Mac^ |
| Besturingssystemen met schrijfondersteuning | Windows, Linux | Windows, Mac OS X (10.6.5 en later) | Windows, Mac OS X, Linux | Windows, Mac OS X, Linux | Mac OS, Mac OS X | Mac OS X, Linux | Mac OS, Mac OS X |
^ Het lezen van en schrijven naar de formaten HFS, HFS+, HFS+J, HFSX+ en HFSX+J onder Windows vereist een Intel-Mac met Boot Camp.

## Soorten
### Schijfbestandssystemen

Een schijfbestandssysteem is een bestandssysteem bestemd voor het bewaren van bestanden op een gegevensdrager, die direct of indirect met de computer verbonden is. Voorbeelden van schijfbestandssystemen zijn
* FAT (diskettes, harde schijven en memory sticks onder Windows)
* exFAT (flash-schijven onder Windows)
* NTFS (harde schijven, meestal onder Windows NT, 2000, XP en hoger)
* HFS en HFS Plus (harde schijven onder Mac OS)
* JFS of Journaled (harde schijven onder Mac OS, IBM en Linux)
* ext2 (harde schijven - Linux-distributies)
* ext3 (harde schijven - Linux-distributies)
* ext4 (harde schijven - Linux-distributies)
* ISO 9660 (cd-roms, dvd's)
* ODS-5 (harde schijven onder VMS)
* UDF (cd-rw, dvd's)
* UnionFS
* Btrfs (harde schijven, SSD's (ondersteuning voor wear-levelling)
* XFS (harde schijven onder IBM en Linux)
* ZFS
Hieronder volgt een meer gedetailleerd (onvolledig) overzicht van bestandssystemen voor diskettes en harde schijven. Het magic number (magische getal) van een bestandssysteem is een getal dat aan het begin van het opslagmedium opgenomen wordt, zodat softwaretools en andere programma's daaraan het type bestandssysteem kunnen herkennen.
| Besturingssysteem | Magic number(s) (hexadecimaal) | Bestandssysteem |
| OS/2 | 07h | OS/2 IFS/High Performance File System (HPFS) |
| Linux | 83h | Extended File System (ext) |
| Linux | 83h | Second Extended File System (ext2) |
| Linux | 83h | Third Extended File System (ext3) |
| Linux | 83h | Reiser FS |
| Linux | 83h | Reiser 4 |
| Microsoft Windows | 01h, 04h, 06h, 14h, 16h, 1eh | FAT12/FAT16 |
| Microsoft Windows | 0bh, 0ch, 0dh, 0eh, 0fh, 1bh, 1ch | FAT32 |
| Microsoft Windows | 07h | New Technology File System (NTFS) |
Sommige besturingssystemen ondersteunen bestandssystemen die ontwikkeld zijn voor andere besturingssystemen:
* FAT12/FAT16,FAT32 worden ook ondersteund door Linux, maar ze zijn bij Windows geplaatst omdat ze hiervoor ontwikkeld zijn.
* NTFS wordt gedeeltelijk ondersteund door Linux (Linux kan bestanden op deze partities lezen en schrijven, maar geen volledige schijfcontrole doen).

### Netwerkbestandssystemen

Een netwerkbestandssysteem (ook een gedistribueerd bestandssysteem genoemd) is een bestandssysteem waar men toegang krijgt tot de bestanden via een netwerk, mogelijkerwijs vanaf verschillende computers. Voorbeelden zijn NFS, ZFS, CIFS, Lustre en Global File System.

### Databasebestandssystemen

In plaats van een hiërarchische structuur te gebruiken, worden bij een databasebestandssysteem bestanden teruggevonden via hun karakteristieken, zoals bestandstype, onderwerp, auteur, of andere metadata. Een voorbeeld kan zijn een zoekopdracht naar "Films geregisseerd door Spielberg". Voorbeelden van deze systemen zijn BFS, GNOME Storage, en WinFS.