# Google File System

Il Google File System (GFS) è un file system proprietario distribuito e sviluppato da Google per proprio uso.

## Caratteristiche

Il GFS è ottimizzato per l'immagazzinamento dei dati di Google. È chiamato anche "BigFiles", ed è stato una delle prime tecnologie sviluppate dai fondatori di Google Larry Page e Sergey Brin, quando ancora studiavano a Stanford. I dati di Google sono generati dai vari servizi offerti, tra cui la ricerca nel web, e necessitano di essere trattati e conservati con tecnologie non convenzionali, essendo di dimensioni enormi. A causa della loro importanza vengono immagazzinati in modo permanente, in file di dimensioni di circa 100GB, che molto raramente vengono eliminati, sovrascritti o "ristretti". I file vengono solitamente resi disponibili alla sola lettura. Il file system è anche progettato e ottimizzato per l'avvio nei cluster computer di Google, i nodi che consistono di economici ed indispensabili computer, che richiedono precauzioni a causa dell'alto tasso di fallimento dei singoli nodi e la conseguente perdita di dati.

### Tipi di nodi

Esistono due tipi di nodi: i nodi Master e i nodi Chunk.
* I Chunk sono macchine server che conservano i file di dati chiamati appunto "chunk". Ogni singolo file è di dimensione 64 MegaByte, similmente ai cluster o ai settori dei normali file system.
Ogni chunk è assegnato alla stessa partizione a 64 bit, e la mappatura dei chunk dei vari file è salvata. Ogni chunk, inoltre, è replicato periodicamente in ogni parte del network, con un'esistenza contemporanea di almeno tre copie dello stesso chunk, ma ancora di più per i file che hanno una grossa domanda o richiesta di maggiore disponibilità.
* I Master sono macchine server che hanno competenze diverse: solitamente non memorizzano i chunk, ma piuttosto tutti i metadati associati ai chunk, come le tabelle con la mappatura delle partizioni a 64 bit per registrare la posizione dei file e i file che vengono sostituiti, le posizioni delle copie dei chunk, e quali processi stanno leggendo e/o scrivendo particolari chunk.
Inoltre, prendono uno snapshot del chunk adatto alla replicazione, quando si rileva che il numero di copie di un chunk è minore del minimo prestabilito.

### Metadati

I metadati vengono conservati nello stato corrente dai server Master che periodicamente riceve aggiornamenti da ogni server Chunk (detti "Heart-Beat Messages"). I permessi per le modifiche dei file sono controllati da un sistema e concessi per un tempo limitato, in cui nessun altro processo può accedere al chunk. Il Chunkserver proprietario del chunk modificato, invia i cambiamenti ai chunkserver aventi le copie di backup. I cambiamenti non sono salvati finché tutti i Chunkserver non garantiscano il compimento dell'operazione. I programmi accedono al chunk dopo aver ottenuto dal server Master la posizione del chunk desiderato; se il chunk non è utilizzato, il Master replica con le posizioni, e il programma riceve i dati direttamente dal chunkserver (similmente a Kazaa e i suoi supernodi).

## Implementazioni

Diversamente da molti File System, il GFS non è implementato nel kernel del sistema operativo, ma è disponibile come libreria.