File system

Un file system (in acronimo FS) è una struttura dati deputata alla gestione e all'archiviazione dei file su un computer.
Il termine viene utilizzato anche in riferimento al file system driver, ovvero tutta quella serie di programmi solitamente integrati nel sistema operativo che sono necessari ad operare il file system.
 

E' importante non confondere i file system con i file database o le basi di dati più in generale.
Anche se in alcuni casi possono sembrare (superficialmente) sovrapponibili sono progettati per servire casi d'uso molto diversi.

Storia 
Prima dell'avvento dei computer, l'espressione "file system" veniva usata per descrivere un metodo di archiviazione e recupero di documenti cartacei.

Descrizione 

Più formalmente, un file system è l'insieme dei tipi di dati astratti necessari per la memorizzazione (scrittura), l'organizzazione gerarchica, la manipolazione, la navigazione, l'accesso e la lettura dei dati. Di fatto, alcuni file system (come l'NFS) non interagiscono direttamente con i dispositivi di archiviazione.

I file system possono essere rappresentati sia graficamente tramite file browser sia testualmente tramite shell testuale. Nella rappresentazione grafica (GUI) è generalmente utilizzata la metafora delle cartelle che contengono documenti (i file) ed altre sottocartelle.

I dispositivi di archiviazione, ad esempio i dischi fissi si presentano al sistema operativo come array di blocchi di dimensione fissa, generalmente chiamati settori, tipicamente di 512 byte l'uno. Le operazioni disponibili sono la lettura e la scrittura di un blocco arbitrario, o talvolta di un insieme di blocchi. Basandosi su questo servizio fornito dai dispositivi a blocchi, il file system realizza due livelli di astrazione, che rendono le risorse di memorizzazione di massa facilmente utilizzabili dagli utenti.

Gestione del file system 
Il software di gestione del file system è responsabile dell'organizzazione di questi settori in file e di tenere traccia di quali settori appartengono a quali file e quali settori invece non sono utilizzati. L'utente ha normalmente la totale libertà di creare nuovi file, cancellare file esistenti (liberando così i blocchi che questi occupavano), e modificare file esistenti (cambiando così anche la loro dimensione e quindi il numero di blocchi occupati).

Il primo livello di astrazione è quello che organizza i settori in un insieme di archivi (file) di dimensioni arbitrarie, che possono andare da zero all'intera dimensione disponibile del dispositivo: ciascun file viene distribuito in un insieme di settori. Normalmente l'utente vede solo un file e non deve preoccuparsi di quali settori sono stati utilizzati per memorizzarlo. Le operazioni disponibili sono la lettura o la scrittura di un blocco di dati di dimensione arbitraria in un punto arbitrario del file. Non tutti i file system hanno bisogno di un dispositivo di archiviazione. Un file system può infatti essere usato per organizzare e rappresentare qualsiasi tipo di dato, sia che sia memorizzato o generato dinamicamente (ad esempio, da una connessione di rete).

Nomi gerarchici dei file 

Il secondo livello di astrazione è quello che permette di organizzare i file assegnando loro dei nomi gerarchici. I file system tipicamente hanno tabelle di associazione dei nomi dei file con i rispettivi file tramite collegamenti fisici, usualmente collegando il nome del file a un indice in una tabella di allocazione dei file (file allocation table) di qualche genere, come la FAT di un file system MS-DOS, o un inode in un file system di tipo Unix. Le strutture di cartelle possono essere ad un solo livello, oppure possono permettere una struttura gerarchica in cui delle cartelle possono contenere sottocartelle. In alcuni file system i nomi dei file sono strutturati con una speciale sintassi (per esempio estensioni o numeri di versione).

I file system gerarchici sono stati uno dei primi interessi di ricerca di Dennis Ritchie, uno dei padri fondatori di Unix; le implementazioni precedenti erano ristrette a pochi livelli.

Controllo dell'accesso 
Il file system viene inoltre utilizzato per memorizzare i dati che servono a controllare l'accesso a ciascun file da parte dei processi. I criteri di sicurezza nell'accesso alle operazioni sui file system sono in genere basati su liste di controllo di accesso (access control list o ACL) o capabilities. Si è scoperta da qualche decina di anni l'inaffidabilità delle ACL, e per questo motivo i sistemi operativi moderni tendono a usare il meccanismo delle capabilities. I file system commerciali usano ancora le ACL. Una ACL permette di definire per ciascun elemento del file system di quali permessi (lettura, scrittura, modifica ecc.) dispone ciascun utente che accede al sistema.

Funzionalità particolari 
I file system tradizionali offrono degli strumenti per creare, muovere ed eliminare sia i file che le cartelle, ma non permettono di creare collegamenti addizionali alle cartelle (gli hard link di Unix ed NTFS), o di rinominare i collegamenti padre (".." nei sistemi Unix o DOS/Windows) e di creare collegamenti bidirezionali fra i file. Questi file system tradizionali hanno anche dei metodi per creare, muovere, cancellare e troncare i file, e per sostituire o aggiungervi in coda alcuni dati. Invece non permettono di aggiungere dati o troncare in testa un file, impedendo l'inserzione o la cancellazione arbitraria di dati. Le operazioni possibili sono quindi molto asimmetriche e spesso risultano inefficienti in contesti particolari.

Principali tipologie 

Nel corso della storia informatica, è stata ideata una miriade di file system. I sistemi operativi moderni sono spesso in grado di accedere a diversi file system, spesso semplicemente installando un apposito modulo o driver. I tipi di file system possono essere classificati in file system per dischi, file system di rete e file system per compiti speciali. In molti casi, nel linguaggio settoriale, si usa il termine file system per intendere la struttura di archiviazione del dispositivo, un modo gergale per dire "cartelle e file", così come visualizzate dalla shell del sistema operativo. Nel gergo comune si è soliti affermare, soprattutto in sistemi GNU/Linux, che il file system viene montato, per consentire al sistema operativo di accedervi per le operazioni di lettura\scrittura.

File system per memorie di massa 
Un file system del disco è un file system progettato per memorizzare dei file su un'unità a disco, che può essere collegata direttamente o indirettamente al computer. Esempi di file system del disco sono:
 Amiga FileSystems - OFS, FFS1 e 2, International, PFS, SFS usati su Amiga
 APFS - (Apple File System) Introdotto da Apple nel 2016
 BFS (Beos File System) - file system nativo di BeOS
 DFS, ADFS - file system della Acorn
 EFS (IRIX) - un vecchio file system a blocchi usato su IRIX per unità di memoria di massa rimovibili (DAT, CD-ROM...) precedente all'introduzione di ISO 9660
 Ext - Extended file system, il primo file system appositamente progettato per GNU/Linux
 Ext2 - Extended File System 2, diffuso su sistemi GNU/Linux
 Ext3 - Extended File System 3, diffuso su sistemi GNU/Linux (ext2+journaling)
 Ext4 - Extended File System 4, prodotto come stabile dal kernel Linux 2.6.28 (già presente dalla versione 2.6.19 come ext4dev)
 FAT - Usato su DOS, Microsoft Windows e su molti dispositivi dedicati, dispone di tabelle a 12 e 16 bit
 FAT32 - versione con tabelle a 32 bit di FAT
 ExFAT - conosciuto anche come FAT64, creato da Microsoft e pensato appositamente per memorie flash
 FFS - Fast File System, usato in vecchi sistemi BSD e Amiga
 HFS - Hierarchal File System, usato su Mac OS
 HFS+ - Hierarchal File System Plus, usato su Mac OS a partire dalla versione 8.1 e su macOS
 HPFS - High Performance File System, usato su OS/2
 ISO 9660 - Usato su dischi CD-ROM e DVD-ROM (anche con estensioni Rock Ridge e Joliet)
 Journaled File System (JFS) - disponibile su sistemi GNU/Linux, OS/2, e AIX
 LFS - Log-structured File System
 MINIX - Usato su sistemi MINIX
 NTFS - NT File System. Usato su sistemi basati su Windows NT
 NWFS - NetWare File System. Usato da Novell NetWare
 ReFS - Microsoft (Resilient File System), 
 ReiserFS - File system journaling diffuso su sistemi GNU/Linux
 Reiser4 - File system journaling successore del ReiserFS diffuso su sistemi GNU/Linux. 
 UDF - File system a pacchetti usato su supporti WORM/RW, CD-RW e DVD
 UFS - Unix File System, usato su vecchi sistemi BSD
 UFS2 - Unix File System, usato su nuovi sistemi BSD
 UMSDOS - File system FAT esteso con permessi e metadata, usato su GNU/Linux
 XFS - eXtended FileSystem: 64 bit in addressing con possibilità di partizione unica di 9 milioni di TB utilizzato su IRIX- Tale filesystem è indicato per unità non rimovibili (HDD...).
 ZFS - Creato dalla Sun Microsystems
 Btrfs - Creato dalla Oracle Corporation
 WBFS-(Wii Backup File System) Usato per i backup dei giochi della console Wii
 WAFL Ottimizzato per le scritture casuali.
 Protogon - File System introdotto con la build 7955 di Windows 8, disponibile però nella sola versione Server, successivamente modificato intorno alla fine del 2011 in ReFS Resilient File System

File system distribuito 
Un file system distribuito permette di accedere ai file contenuti su un computer remoto tramite rete, potenzialmente in simultanea da diversi computer. Esempi di file system di rete sono:
 AFS (Andrew File System)
 AppleShare
 CIFS (conosciuto anche come SMB o Samba)
 Coda
 Global File System (GFS)
 InterMezzo
 InterPlanetary File System (IPFS)
 Lustre
 MagmaFS
 NFS
 9P

File system per compiti speciali 
Alcuni file system vengono utilizzati per compiti speciali che non rientrano direttamente nelle prime due categorie. Molti non hanno alcuna relazione con un supporto di memorizzazione permanente dei dati, ma vengono utilizzati dal sistema operativo per dare accesso ad alcune funzionalità. Alcuni esempi sono:
 archfs (archivi)
 cdfs (lettura e scrittura di CD)
 incdfs (lettura e scrittura di CD o DVD riscrivibili come se fossero floppy, usato nel software Nero)
 cfs (caching)
 DEVFS (solaris, GNU/Linux, crea dinamicamente i file speciali per dare accesso alle periferiche effettivamente installate)
 ftpfs (accesso FTP)
 lnfs (nomi lunghi)
 nntpfs (netnews)
 procfs (GNU/Linux e altri, mostra dati sullo stato del sistema e dei processi)
 ROMFS (file system utilizzato nei sistemi μClinux)
 TCFS - Transparent Cryptographic File System. Progettato presso l'Università degli Studi di Salerno, fornisce un layer di cifratura in modo trasparente permettendo l'utilizzo delle primitive open, read write dei sistemi unix.
 TMPFS (file system temporaneo appoggiato sulla memoria di sistema)
 SYSFS (GNU/Linux 2.6, sostituisce in parte procfs)

Note

Voci correlate 
 Chkdsk
 Disco rigido
 File
 Formattazione
 Filesystem Hierarchy Standard
 File system distribuito
 Formato di file
 Memoria di massa
 Partizione (informatica)
 Percorso
 Journaling
 File system virtuale
 Esplora file

Altri progetti

Collegamenti esterni 
 
 

 File system