Filsystem

Et **filsystem** kan være betegnelsen på den logiske organiseringen av kataloger og filer i en datamaskin, men også på hvordan filer, kataloger og metadata fysisk er lagt ut på et lagringsmedium. Betegnelsen kan også brukes om programkoden som brukes for å organisere og få tilgang til data på et lagringsmedium.

Alle lagringsenheter må ha et filsystem for å kunne lagre filer. Disse enhetene kan være svært enkle eller veldig komplekse, alt etter hvor store mengder datamengder de kan lagre, hvilken type data og hva slags bruksmønster man forventer på dataene som er lagret. Å klargjøre en lagringsenhet for et filsystem kalles å formatere. Hvilket filsystem som ligger på en lagringsenhet avgjør i stor grad hvilke operativsystemer som er i stand til å bruke den og hvilke funksjoner som må fungere med filsystemet.

## Logisk organisering
De fleste filsystemer organiserer filer i et hierarki av *mapper* og *filer*. En mappe kan inneholde andre mapper og/eller filer. Det finnes én mappe i systemet som alle andre mapper og filer springer ut fra, denne kalles *rotmappen*. Hele systemet av mapper og filer kalles gjerne et *tre*. 

Hver fil og hver mappe har et navn som er unikt innenfor mappen den ligger i. Listen av mapper man må bla igjennom for å finne frem til en bestemt fil kalles ofte for *banen* (eng: path) til filen.

Noen operativsystemer deler opp filsystemet videre ved å angi hvilken lagringsenhet mappen eller filen ligger på. Eksempler på dette er CP/M, MS-DOS, Windows og OS/2 som bruker en *stasjonsbokstav* for å representere hver fysiske eller logiske lagringsenhet i maskinen.

Enkelte veldig gamle filsystemer (CP/M, tidlig MS-DOS) hadde filsystemer uten støtte for mapper og lagret alle filene i samme navnerom på lagringsmediet.

## Intern organisering
Selv om de fleste filsystemer ser noenlunde like ut fra en brukers side med et hierarki av mapper og filer, kan det være store forskjeller på hvordan filsystemet organiserer sine forskjellige biter med data på selve mediet. Tidligere filsystemer var ganske enkle, og hadde begrenset plass til både filer og metadata. Etter hvert som behovene har vokst har også filsystemene blitt mer avanserte, og mer optimalisert mot sine forskjellige bruksområder.

Filsystemets lagringsplass deles gjerne opp i **clustre**, hvor et cluster er den minste enheten filsystemet kan gjøre bruk av. På en disk vil dette som regel tilsvare én eller flere **sektorer**. Størrelsen på et cluster vil dermed avgjøre hva som er den minste plassen i filsystemet en mengde data kan bruke. F.eks. vil en fil på 15 bytes i virkeligheten oppta minst 4kB lagringsplass på et filsystem med 4kB store clustre.

Filer som er større enn ett cluster vil lagres ved hjelp av så mange clustre som trengs. Disse behøver ikke å utgjøre en sammenhengende rekke av clustere i filsystemet. Det som brukeren ser som én sammenhengende fil, kan i virkeligheten ligge spredd rundt på mange forskjellige steder i filsystemet. Dette kalles **fragmentering** av filsystemet.

## Bruk

### Windows
Windows 95, 98 og Me bruker FAT 32. FAT 12 og 16 blir brukt av DOS. FAT er en forkortelse for ''File Allocation Table''. FAT-filsystemene er ganske gamle, og har noen litt snevre begrensninger på lengden av filnavn, filstørrelse, og det ikke skiller mellom store og små bokstaver. Windows NT, deriblant XP, 2000 og Vista, bruker NTFS til sine harddisker, men støtter fortsatt FAT, siden det brukes på eksterne harddisker og disketter. Derimot nekter de å formatere FAT-filsystemer over 32 GiB, selv om det går an med Linux og eldre utgaver av Windows.

### Linux

#### Ext2 og Ext3
På Linux kan man velge selv, men filsystemet som kalles *ext3* brukes mest nå for tiden, og regnes som et svært pålitelig filsystem. Dessuten er det vanlig å installere forskjellige deler av Linux på forskjellige partisjoner, slik at man kan ha forskjellige filsystemer etter hva som passer best på den enkelte partisjonen. Ext2 var det vanligste før, det er velprøvd og sikkert. Ulempen med ext2 er at det mangler journalføring, noe som gjør at ext2 må sjekkes grundig hvis det ikke ble avmontert riktig, for eksempel ved strømbrudd. Dermed passer det best til små partisjoner hvor man ikke endrer så mye, for eksempel disketter eller en liten oppstartspartisjon. På disketter er det også vanlig å bruke FAT12, ettersom Windows gjør det.

#### Reiserfs
Reiserfs er svært raskt og plasseffektivt for små filer. Det skyldes først og fremst at det bruker en teknikk som kalles "tail packing". Alle filsystemer bruker et helt antall av en størrelse som kalles "block size" (vanligvis 0,5-4 KB) for å lagre hver fil. En fils siste blokk kalles en "tail" (hale); slutten av fila kan ligge hvor som helst inne i denne, så resten er ubrukt plass. Men med tail packing kan slutten av mange filer legges i samme blokk. I reiserfs kan denne funksjonaliteten skrus av ved å montere det med parameteren "notail".  Reiserfs var det første journalførende filsystemet som kom til Linux. Dessverre har det vist seg at reiserfs under spesielle omstendigheter kan tape data, for eksempel hvis filsystemet lagres i en fil på et annet reiserfs-filsystem. Derfor velger mange ext3 framfor reiserfs til å ta vare på viktige filer. Mange superraske servere, spesielt filtjenere og vevtjenere bruker reiserfs, blant annet den nyeste serveren på Wikipedia, som ble tatt i bruk 22. november 2005. Neste versjon heter Reiser4. Det strever for tiden med å få innpass i Linux-kjernen, på grunn av skepsis til kodekvalitet, men tester tyder på at reiser4 for tiden er verdens raskeste filsystem.

NFS er et nettverksfilsystem som gjør det mulig å montere filsystemet til en server (NFS) i det lokale filsystemet til en Linux-maskin. Det som lagres her, vil altså lagres på serveren.

## Kompatibilitet
* Windows kan verken lese eller skrive til filsystemer annet enn Windows' egne. Men det finnes drivere til Windows som gjør det mulig å lese og skrive til ext2, for eksempel Ext2 IFS. Ext3 kan monteres som om det var ext2. Når man monterer noe som ext2 blir det ingen journalføring, så hvis det ikke blir avmontert riktig, må man sjekke det for feil. Ved hjelp av programmet MacDrive kan man lese og skrive til harddisker formatert til Mac-filsystemet HFS+ i Windows.
* Linux leser og skriver til NTFS og alle typer FAT (kalles VFAT i Linux). Støtte for skriving og lesing til NTFS er fortsatt under utvikling, men vanlig skriving, lesing, redigering og sletting av NTFS-filer anses nå som så stabilt at dette er standard funksjonalitet i alle store Linuxdistribusjoner. Linux er kanskje det operativsystemet som kan støtte flest filsystemer, men det er ikke vanlig å kompilere inn støtte for de mest eksotiske.

## Se også
* Formatering
* Partisjon (informasjonsteknologi)

## Referanser