# Smart File System

Lo Smart File System o SFS è un file system con journaling usato sui sistemi Amiga. Come tutti i file system di tipo journaled, SFS una volta ricevuti da un applicativo i dati che devono essere conservati dal SO, provvede prima a memorizzare le operazioni che deve compiere su un file di log; in seguito effettua la scrittura fisica dei dati sulla periferica di memoria di massa (es.: disco rigido); e come mossa finale registra nuovamente sul file di log le operazioni che sono state effettuate.

## Storia

SFS è un filesystem di libera distribuzione scritto in C originariamente da John Hendrikx nel 1998. Quando questi si allontanò dalla scena Amiga nel 2000, rilasciò pubblicamente i sorgenti di SFS alla comunità. Lo sviluppo di SFS è stato continuato da sviluppatori indipendenti.
Da maggio 2005 i codici sorgenti di Smart File System sono distribuiti con la licenza LGPL.

## Caratteristiche

Il design di SFS è ottimizzato per essere veloce e garantire scalabilità e integrità. Usa diverse grandezze di blocco a partire da 512 byte per blocco (2$^9$) fino a 32768 byte (2$^{15}$), e la grandezza massima totale della partizione è variabile.
Il valore "grandezza massima" che una partizione può assumere è 1 Terabyte (1024 Gigabyte) se applicato a blocchi di 512 byte, e può ulteriormente aumentare, a seconda della grandezza massima di blocco adoperata.
Una delle caratteristiche più performanti è realizzata raggruppando voci di directory multiple in un singolo blocco e raggruppando blocchi di metadata insieme in cluster. Una bitmap è utilizzata per tenere traccia dello spazio libero, mentre viene tenuta traccia dei dati file usando extent (blocchi logici continui) disposti in una struttura ad albero B+ (detta anche ad albero "bilanciato") ereditata dalla tecnologia di database.
L'integrità è mantenuta da un log di rollback ("annullamento") di tutti i cambiamenti fatti ai metadata in un periodo di tempo determinato. Prima viene scritto il log sul disco, e in seguito i blocchi metadata sono sovrascritti direttamente. Se il sistema dovesse andare in crash, la volta successiva che il filesystem verrà montato si accorgerà della procedura incompleta e ritornerà con una procedura appunto di "rollback" (letteralmente come il riavvolgersi di un nastro) all'ultimo stato coerente. Per ragioni di performance viene garantita solo l'integrità dei metadata. Allo stato attuale i dati nei file possono ancora essere corrotti se un'operazione di scrittura viene interrotta a metà.
Un'interessante peculiarità dello Smart FS è l'abilità di deframmentarsi al volo, mentre il filesystem è in uso, permettendo tale operazione anche sui file che devono obbligatoriamente risiedere in posizioni fisse del disco rigido. Il processo di deframmentazione è quasi completamente "stateless" (eccetto che nella locazione del disco rigido su cui deve lavorare). Durante la deframmentazione l'integrità dei dati è assicurata contemporaneamente sia per i metadata, sia per i dati veri e propri.

## Supporto nativo

Smart FS è stato scelto dagli sviluppatori di MorphOS come filesystem di base ed è quindi ovviamente uno dei filesystem supportati in modo nativo da tale sistema operativo. È inoltre disponibile una versione nativa per AmigaOS4 di SmartFS (versione 2.x) che permette il salvataggio di file più grandi di 2Gb grazie alla nuova versione di AmigaDOS presente in OS4.