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. Til sist kan betegnelsen 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 kan være svært enkle, eller veldig komplekse alt etter hvor store mengder, 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-filsystemene (File Allocation Table) 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 fortsat 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 ===
På Linux kan man velge selv, men 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 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 [1]. 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 hardisker 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)