Un filesystem comprende i metodi e le strutture di dati usate da un sistema operativo per tenere traccia dei file su un hard disk o su una sua partizione, cioè il modo in cui i file sono organizzati sui dischi. La parola viene anche usata per riferirsi ad una partizione o a un disco usato per immagazzinare i file, o al tipo del filesystem. Quindi si può dire ``ho due filesystem'', per dire che si hanno due partizioni in cui immagazzinare file, o che si sta usando ``l'extended filesystem'', per indicare il tipo di filesystem.
La differenza tra un disco o una partizione ed il filesystem che contiene è molto importante. Alcuni programmi (compreso, abbastanza ragionevolmente, i programmi che creano i filesystem) operano direttamente sui settori del disco o della partizione; se c'è un filesystem esistente, questo verrà distrutto o seriamente danneggiato. La maggior parte dei programmi operano su un filesystem, e quindi non funzioneranno su una partizione che non ne contiene uno (o ne contiene uno del tipo sbagliato).
Prima che si possa usare un disco o una partizione come filesystem, deve essere inizializzato, e bisogna scriverci le strutture di dati per l'archiviazione. Questo processo si chiama creazione di un filesystem.
La maggior parte dei tipi di filesystem UNIX hanno una struttura generale simile, anche se i dettagli esatti cambiano abbastanza. I concetti centrali sono quelli di superblocco, inode, blocco dati, blocco directory e blocco indirezione. Il superblocco contiene delle informazioni sul filesystem intero, come la sua dimensione (l'informazione esatta qui dipende dal filesystem). Un inode contiene tutte le informazioni su un file, eccetto il suo nome, che viene immagazzinato nella directory, insieme con il numero dell'inode. Una voce di directory consiste del nome di un file e del numero dell'inode che rappresenta il file. L'inode contiene il numero di diversi blocchi dati, che vengono usati per immagazzinare i dati del file. Nell'inode c'è posto solo per alcuni numeri di blocchi dati, ma se ne servono più viene allocato dinamicamente più spazio per i puntatori ai blocchi dati. Questi blocchi allocati dinamicamente sono blocchi indiretti; il nome indica che per trovare i blocchi dati bisogna trovare prima il numero all'interno del blocco indiretto.
I filesystem UNIX di solito permettono di creare un buco in un file (si fa con lseek ; controllate la pagina man), cioè il filesystem fa solo finta che in un posto particolare nel file ci sono solo byte zero, ma per quel posto nel file non viene riservato nessun settore di disco reale (cioè il file userà un po' meno spazio disco). Accade spesso solo per i file binari piccoli, le librerie condivise di Linux, alcuni database ed alcuni altri casi speciali (i buchi sono implementati immagazzinando un valore speciale come indirizzo del blocco dati nel blocco indiretto o nell'inode. Questo indirizzo speciale significa che non viene allocato nessun blocco dati per quella parte del file, e quindi c'è un buco nel file).
I buchi sono moderatamente utili. Sul sistema dell'autore, una semplice misura ha mostrato un potenziale per circa 4 MB di risparmio usando buchi, su un totale di 200 MB di spazio disco usato. Quel sistema, però, contiene pochi programmi e nessun file di database. Lo strumento di misura viene descritto nell'appendice A.