# UnionFS

UnionFS è un file system Linux che permette union mount, ossia consente di simulare l'unione di più filesystem sottostanti, mantenendone la semantica Unix. Consente, cioè, di sovrapporre in modo trasparente file e directory di filesystem separati, detti branch (rami), per formare un singolo filesystem coerente. I contenuti delle directory che hanno lo stesso percorso nei rami uniti, saranno visti come se fossero nella stessa directory del filesystem virtuale. UnionFS è ancora un progetto in via di consolidamento, pertanto contiene ancora bug che ne sconsigliano l'uso in ambienti di produzione. Questa implementazione delle union mount è parte del più grande progetto FiST.
I vari rami possono essere filesystem in sola lettura oppure scrivibili. Le operazioni di scrittura nel filesystem unificato verranno redirette verso uno specifico filesystem scrivibile. Ciò consente di far apparire un filesystem come scrivibile, senza permettere la scrittura effettiva (copy-on-write): questa è una delle caratteristiche che ne fanno uno strumento utile quando, ad esempio, il supporto non è veramente scrivibile, come nel caso dei CD-ROM, oppure quando si vuole usare una base comune a più filesystem, o infine per motivi di sicurezza. A volte, questa tecnologia viene usata come sistema ad hoc per la realizzazione di istantanee dello stato del filesystem (in gergo snapshot).
Quando si aggiungono (o montano) rami, bisogna specificare che priorità hanno tra di loro. In questo modo, quando due o più rami contengono un file con lo stesso nome, il ramo con la priorità maggiore riceve le chiamate di lettura e scrittura.
Nei liveCD UnionFS è usato per sovrapporre un filesystem scrivibile ad un supporto in sola lettura. In KNOPPIX Linux, ad esempio, si può eseguire l'unione del filesystem nel CD-ROM o nel DVD ed il filesystem contenuto in un file immagine chiamato knoppix.img in una chiavetta USB. Quest'ultimo, impostato con una priorità maggiore rispetto al filesystem in sola lettura del CD-ROM o del DVD, permette di mostrare all'utente un filesystem logico nel quale si possono aggiungere, modificare o cancellare file ovunque. A livello fisico, se un file che risiede in un ramo in sola lettura viene sostituito, quest'ultimo viene inserito nel file immagine. Poiché il filesystem logico unisce i due rami trasparentemente, l'utente vedrà semplicemente la nuova versione.
UnionFS, più precisamente, è uno stackable filesystem, ossia è un modulo del kernel che si posiziona, quindi, in kernel space tra il Virtual File System (VFS, tradotto: filesystem virtuale) ed i filesystem reali (ext2, ext3, ReiserFS, NFS, ISO 9660), intercettando le chiamate che il primo emette e rielaborandole prima di trasmetterle ai secondi (e viceversa). Opera come se mostrasse al VFS i filesystem reali sovrapposti come fossero dei lucidi, così che delle aree occupate da più filesystem sia visibile solo l'area di quello a più alta priorità.
Oltre a Linux, questa tecnologia è usabile, teoricamente, anche su Solaris e su FreeBSD.

## Altre implementazioni

Il sistema operativo Plan 9 dei Bell Labs usa gli union mount estensivamente per ottenere namespace personalizzati per ogni utente e processo. Lo stesso concetto è stato disponibile in BSD per almeno dieci anni (4.4BSD Union Mount).
Ci furono vari tentativi precedenti per aggiungere questa funzionalità a Linux, ma nessuno è stato sostenuto a lungo. Alcuni progetti per l'implementazione di questa tecnologia sono 3DFS, TFS e translucency, a cui si aggiungono alcune implementazioni in user space. Da molto tempo Linux dispone di una funzionalità del programma "mount" che permette di inserire una directory in più di un posto del filesystem. Questa funzionalità è presente anche in altri sistemi operativi, come MS-DOS, ma è un concetto completamente differente dalle union mount.