NFS
L'NFS è un file system di rete client-server molto usato. Esso fa parte dell'ONC+ ed è adottato dalla maggior parte dei sistemi UNIX e in alcuni altri OS. Esso può funzionare utilizzando i protocolli TCP/IP o UDP/IP. In questa sede utilizzeremo come versione di riferimento quella della Sun.
Lo schema di riferimento, come detto, è quello client-server: il server può condividere con diversi client alcuni file system, ma non può avvenire l'operazione inversa. Per iniziare la comunicazione tra client e server è necessario che il client "monti" il file system remoto. L'operazione di montaggio prevede che il client possa considerare l'insieme di directory come un sottoalbero di una directory locale qualsiasi. In alcune versioni dell'NFS è possibile anche montare file system remoti in sottoalberi già montati.
Nel momento in cui il client monta un file system, egli ha accesso solo al sottoalbero corrispondente a quel file system, ma non alla parte superiore dell'albero (non si ha proprietà transitiva).
E' possibile utilizzare NFS in ambienti eterogenei (calcolatori di tipo diverso, diversi OS, diverse architetture di rete), in modo trasparente. Questo è stato possibile usando una rappresentazione dei dati propria e costituendo un vero e proprio file system di rete. E' compito di ogni OS interfacciarsi in modo efficiente e senza errori all'NFS.
Montaggio di NFS
Il protocollo di montaggio, come già detto, stabilisce le regole di connessione logica tra un client e un server. Al termine dell'operazione una directory del server (e tutto il sottoalbero corrispondente) dovrà essere montata sul client in un qualunque sottoalbero del proprio file system. Per garantire la sicurezza dei dati del server, esso conserva una lista di esportazione, dove sono indicate le operazioni che possono essere eseguite da ogni postazione. Quando il server riceve una richiesta di montaggio, riporta al client un file handle da usare come chiave per gli accessi successivi. Questa maniglia è da intendersi in senso UNIX, cioè è composta da un identificatore di file system accostato al numero dell'inode a cui ci si riferisce.
Il server contiene inoltre una lista dei client e delle directory montate, utile per scopi di amministrazione, come la disconnessione.
Protocollo NFS
Il protocollo NFS fornisce una rappresentazione dei dati completa (RPC), che consente alcune operazioni:
-ricerca di un file in una directory
-lettura di un insieme di elementi in una directory
-manipolazione di directory e collegamenti
-accesso agli attributi di un file
-lettura e scrittura di un file
Il protocollo NFS è stateless tra sessioni diversi, in quanto non è prevista la conservazione delle informazioni relative alle sessioni passate. Per questo motivo è necessario che ogni richiesta fornisca le informazioni sia su quale file eseguire l'operazione, sia in quale punto.
Per verificare che tutte le operazioni siano svolte correttamente, ogni operazione è identificata da un numero sequenziale. Nel server è quindi presente una tabella in cui sono memorizzate nell'ordine le operazioni svolte (non necessario per il funzionamento).
Per consentire il corretto funzionamento del protocollo è necessario che il server esegua le operazioni richieste dal client, prima di inviare i risultati al client stesso.
Per ogni procedura NFS garantisce l'atomicità e la non interferenza con eventuali altre chiamate di scrittura allo stesso file. Non sono previsti controlli sulla concorrenza, nel caso di scritture successive (in pacchetti diversi) su uno stesso file.
Il protocollo NFS si interfaccia con l'OS mediante un'interfaccia VFS.
Funzionamento di NFS
Eccetto la chiamata di sistema UNIX open, le altre operazioni utilizzate da NFS sono uguali a quelle di UNIX. E' quindi possibile avere un'interfaccia VFS molto semplice nei sistemi UNIX. Per migliorare le prestazioni NFS utilizza due cache:
-cache degli attributi dei file, che viene aggiornata nel momento in cui il server invia nuovi attributi.
-cache dei blocchi di file.
Tra il server e il client si usano meccanismi di lettura anticipata e scrittura differita, nel senso che finchè il server non conferma la fine di un'operazione di scrittura essa non viene aggiornata neanche sul client. Non è garantito che le scritture eseguite in un file siano visibili immediatamente anche agli altri client che hanno aperto quel determinato file.
WAFL
WAFL è un file system di rete special purpose, che tende ad ottimizzare le scritture casuali. E' utilizzato in esclusiva dai server della Network Appliace, che ha sviluppato questo file system. WAFL utilizza come pacchetti di trasferimento di tipo NFS, CIFS, FTP o HTTP. NFS e CIFS utilizzano una cache per i dati in lettura. I file server, invece, dispongono di una cache (normalmente una NVRAM) per le scritture. Utilizzando queste due cache è possibile ottimizzare i tempi di I/O per i dispositivi ad accesso casuale.
Il file system si basa su blocchi e utilizza gli inode per la descrizione dei file. E' presente un inode radice, a partire dal quale è possibile costruire l'albero delle directory e dei file. Ciascun inode contiene 16 puntatori a blocchi, che appartengono al file descritto dall'inode stesso. Tutti i i metadati sono contenuti all'interno di file specifici, anche se, poiché sono file, possono essere sparsi per tutto il file system. I file che contengono i metadati sono:
-file per gli inode
-file per la mappa dei blocchi liberi
-file per la mappa degli inode liberi
Grazie alla composizione ad albero è possibile raffigurare (mediante snapshot) tutto l'albero delle directory e dei file a partire dall'inode radice, in modo molto semplice e veloce: è necessario copiare l'inode radice e appendere i file modificati dopo la snapshot al nuovo inode radice. Nel frattempo il vecchio inode radice continua a puntare alla vecchia versione dei file, garantendo l'accesso ad un'immagine passata del file system. La mappa dei blocchi liberi è utilizzata per verificare se tutti i blocchi di un file o di una directory sono stati modificati dall'ultima snapshot. In questo caso è possibile eliminare la vecchia versione. I blocchi in uso non sono mai sovrascritti, in modo da garantire scritture efficienti.
Le snapshot sono molto utili anche per creare copie di riserva dell'intero file system in modo rapido.
Nel WAFL sono presenti molte altre ottimizzazioni specifiche.
| < Prec. | Succ. > |
|---|






