# ReFS

ReFS (acronimo di Resilient File System), precedentemente noto con il nome in codice Protogon, è un file system che apporta alcuni miglioramenti a NTFS.
Trapelato per la prima volta nella build 7955 di Windows 8 e introdotto ufficialmente a partire da Windows Server "8" Beta, è supportato in sola lettura da Windows 8 e anche in scrittura da Windows Server 2012 e Windows 8.1 (quest'ultimo solo dopo averlo abilitato tramite una modifica al Registro di Sistema).
A partire dal Windows 10 Fall Creators Update, la creazione di partizioni ReFS è disponibile solamente per i possessori di licenze "Pro for Workstations" ed Enterprise, escludendo le versioni Pro e Home. La revoca di questa possibilità è stata fatta per motivi commerciali.

## Strutture dati e scalabilità

I metadati e i file sono memorizzati in B+Tree, cioè sono organizzati in una struttura gerarchica a tabelle simile ai database relazionali: una tabella principale, detta Object Table, contiene i riferimenti alle directory, le quali a loro volta contengono ciascuna una tabella contenente i singoli file, i quali a loro volta sono in associazione ciascuno con una tabella File Metadata contenente i suoi metadati. Alle tabelle File Metadata si agganciano i File Extents, ossia delle tabelle atte a memorizzare i checksum del file.
Le dimensioni dei file, le dimensioni totali del volume, il numero di file in una directory e il numero di directory in un volume sono limitati da numeri a 64 bit: la dimensione massima dei file risulta perciò di 16 exbibyte, e la dimensione massima dei volumi ammonta a 1 yobibyte (con cluster da 64 kB). I nomi e i percorsi dei file sono limitati a stringhe di testo da 32 kB, e lo spazio libero è calcolato da un allocatore gerarchico che contiene tre tabelle separate per blocchi piccoli, medi e grandi. Grazie a questa maggiore scalabilità rispetto a NTFS, ReFS mantiene una grande flessibilità e reattività anche di fronte a directory assai articolate e numerosi file di grandi dimensioni.

## Resilienza

I metadati possono avere un checksum facoltativo in un "flusso di integrità" separato: tutti i file possono così incorporare dei checksum a 64 bit, che sono memorizzati in modo indipendente all'interno delle tabelle File Extents. Ciò è controllato dal nuovo attributo "integrità" applicabile sia ai file sia alle directory.
Grazie alla resilienza incorporata, gli amministratori non hanno bisogno di eseguire periodicamente strumenti di controllo degli errori come Chkdsk durante l'utilizzo di ReFS: le funzionalità di resilienza di ReFS possono rilevare se una copia di mirroring dei file è danneggiata utilizzando un processo di pulitura dati in background, che legge periodicamente tutte le copie di mirroring e verifica i loro checksum, sostituendo poi le copie errate con quelle corrette.
Se ciononostante i file o i metadati si danneggiano, il file può essere eliminato senza dover porre offline l'intero volume per manutenzione, ripristinandolo poi da un backup.

## Spazi di archiviazione

ReFS si integra con Spazi di archiviazione, un livello di virtualizzazione archiviazione che consente il mirroring e lo striping dei dati ed anche la condivisione dei pool di archiviazione tra le macchine.
I dischi dinamici con volumi di striping o di mirroring sono sostituiti con pool di archiviazione di mirroring o di striping forniti da Spazi di archiviazione. Tuttavia, in Windows Server 2012 la correzione automatica degli errori è supportata solo sugli spazi di mirroring.

## Prestazioni

ReFS impiega una strategia di aggiornamento allocation-on-write dei metadati, che evita i processi di scrittura inutili virtualizzando la scrittura alla duplicazione di una risorsa. Anche la gestione dei checksum dei file impiega una strategia di aggiornamento di tipo allocation-on-write.
Il numero di operazioni di input/output viene ridotto allocando nuovi blocchi per ogni transazione di aggiornamento, e accorpando in grandi batch le parti correlate alle singole transazioni.
Inoltre, il carico di lavoro del processo di pulitura dati in background grava esclusivamente sul file system, senza impegnare le risorse del sistema operativo.
A partire dalla versione RTM di Windows Server 2012 sono supportati i file sparse.

## Retrocompatibilità

ReFS non richiede nuove API di sistema, e la maggior parte dei filtri del file system continua a funzionare con i volumi ReFS. ReFS supporta molte delle funzionalità esistenti di Windows e di NTFS come la crittografia BitLocker, gli elenchi di controllo di accesso, il diario USN, le notifiche delle modifiche, i collegamenti simbolici, i punti di giunzione, i punti di montaggio, i punti di analisi, gli snapshot di volume, gli ID file e gli oplock.
ReFS non supporta alcune funzionalità, tra cui i flussi denominati, gli ID oggetto, i nomi brevi, la compressione dei file, la crittografia a livello dei file (EFS), le transazioni dei dati dell'utente, i collegamenti reali, gli attributi estesi, le quote disco, e gli snapshot scrivibili o gli snapshot più grandi di 64 TB. Sono necessari prodotti di terze parti per la deduplicazione dei dati e per una cache di secondo livello tra la DRAM e l'archiviazione.

## Supporto

Il supporto a ReFS fu introdotto a partire da Windows Server "8" Beta (Windows 8 Server Developer Preview ne era ancora privo). Anche se le unità formattate dalle prime build trapelate di Windows 8 non vengono riconosciute correttamente da Windows 7 e precedenti, Microsoft prevede di garantire in futuro il supporto a ReFS per tutti i sistemi operativi dotati del supporto a NTFS.
I piani di Microsoft per l'adozione di ReFS prevedono tre principali fasi successive: attualmente ReFS è destinato esclusivamente ai file server, in sola lettura per Windows 8 e anche in scrittura per Windows Server 2012; in un secondo momento anche la versione client di Windows acquisirà il pieno supporto a ReFS per le unità esterne; infine sarà disponibile come normale file system anche per la partizione di sistema di Windows.