# File system distribuito

In informatica un file system distribuito (in inglese, Distributed File System, o DFS) è un particolare file system che permette la memorizzazione di files e risorse in dispositivi di archiviazione distribuiti in una rete informatica, anziché letti o archiviati in maniera centralizzata su di un dispositivo locale, e resi dunque disponibili attraverso un meccanismo client-server tra dispositivi remoti.Deve poter gestire i file in maniera trasparente e concorrente e, di solito, è dotato di sistemi di autenticazione e, a volte, di cifratura. Il primo file system distribuito venne sviluppato negli anni settanta, mentre NFS (introdotto nel 1985 da Sun Microsystems) divenne il primo file system distribuito realmente diffuso e usato. Oltre a questo, particolarmente apprezzati sono stati l'AFS e il CIFS.

## Descrizione
### Client e server

Un file server provvede a fornire una serie di servizi ai client. Sui client è installata una interfaccia al file server che include alcune operazioni normalmente effettuabili su di un comune file server, come la creazione di un file, la sua cancellazione, la lettura e la scrittura. Il file server controlla un insieme di dispositivi di memoria che ospitano il filesystem locale e su cui agisce in base alle richieste dei client.

### Distribuzione

In un filesystem distribuito i dispositivi di memorizzazione sono dislocati in una rete: le richieste e le risposte devono essere trasportate attraverso tale rete e, invece di un dispositivo unico e centralizzato, il sistema ne può avere molti ed indipendenti. La configurazione e l'implementazione di un filesystem distribuito possono variare: in talune occasioni il server (chiamato gergalmente file server) viene eseguito su una macchina dedicata, in altre il sistema client accede simultaneamente a più file server oppure la stessa macchina ospita sia un server che un client.
Esso può essere implementato come componente del sistema operativo o da una componente dello strato software usata per mediare le comunicazioni tra i sistemi operativi e i file system locali.

### Trasparenza

Idealmente un filesystem distribuito appare all'utente come un normale filesystem centralizzato: la molteplicità e la dispersione dei server e dei dispositivi cui si riferisce possono essere celati. Anche l'interfaccia rivolta alle applicazioni che usa l'utente non dovrebbe poter distinguere tra file locali e file remoti: è compito del filesystem distribuito individuare e trasportare i dati per mezzo della rete.

### Prestazioni

Il modo più conveniente per misurare le prestazioni di un filesystem distribuito è nel quantificare l'ammontare di tempo impiegato per soddisfare una data richiesta. Nei sistemi convenzionali questo tempo consiste nell'accesso al disco locale e in piccola quantità di elaborazione da parte della CPU, nei sistemi distribuiti si somma il ritardo dovuto alle comunicazioni di rete. Tale ritardo include il tempo necessario a sottoporre la richiesta al server e quello per ottenere la risposta attraverso la rete, mentre occorre sommare il tempo necessario alla CPU per manipolare il protocollo di comunicazione in ciascuna direzione. Le prestazioni di un filesystem distribuito incidono sul suo livello di trasparenza: idealmente, un sistema distribuito dovrebbe avere una velocità paragonabile a quella di un sistema convenzionale.

### Aggiornamenti concorrenti ai files

Un filesystem distribuito deve provvedere non solo all'accesso dei client ai files, ma anche alla loro modifica: gli aggiornamenti operati da un client non possono interferire con gli accessi e le modifiche fatte da altri client. Meccanismi di controllo della concorrenza e locking possono essere inclusi nel filesystem stesso o resi disponibili da un protocollo parallelo.

### Magazzini distribuiti

Un magazzino distribuito è una rete in cui l'utente conserva le proprie informazioni in un certo numero di nodi della rete. Solitamente tale utente permette a sua volta agli altri utenti di usare la propria macchina come nodo. Le informazioni possono essere accedute o meno dagli altri utenti a seconda dell'implementazione della rete.

## Protocolli per reti distribuite

* 9P
* AFS
* CIFS/SMB
* Coda
* DCE/DFS
* Google File System
* InterPlanetary File System (IPFS)
* Lustre
* SFS
* Chord Project