ZFS (file system)
Template:Infobox filesystem ZFS è un file system open-source sviluppato dalla Sun Microsystems per il suo sistema operativo Solaris. È stato progettato da un team con a capo Jeff Bonwick. Il nome originario doveva essere "Zettabyte File System", ma è diventato un acronimo.
ZFS è noto per la sua alta capacità e per l'integrazione di diversi concetti presi da vari file system in un unico prodotto.
ZFS fu annunciato nel settembre del 2004[1]. Il codice sorgente fu rilasciato assieme a quello di Solaris il 31 ottobre del 2005[2] e rilasciato nella build 27 di OpenSolaris il 16 novembre 2005. ZFS fu fornito assieme all'aggiornamento 6/06 di Solaris 10 nel giugno del 2006[3].
Nel giugno 2007 viene annunciata l'adozione di ZFS anche per il Mac OS X Leopard di Apple, notizia inizialmente smentita nel corso del WWDC07 da Brian Croll, senior director di product marketing per Mac OS, che ha dichiarato che “ZFS non ci sarà", salvo poi smentire le smentita. ZFS non sarà comunque il file system principale di Mac OS 10.5 Leopard ma piuttosto affiancherà HFS+ .
Capacità
ZFS è un file system a 128-bit, potendo fornire uno spazio di 16 miliardi di miliardi (16 quintilioni) di volte la capacità dei file system attuali a 64-bit. I limiti del ZFS sono stati progettati per essere così ampi da non essere mai raggiunti in una qualsiasi operazione pratica. Bonwick affermò che "per riempire un file system a 128 bit non sarebbero bastati tutti i dischi della terra".
Ecco alcuni limiti teorici del ZFS:
- 248 — numero di snapshot (2 × 1014);
- 248 — numero di file (2 × 1014);
- 16 exabyte — dimensione massima di un file system;
- 16 exabyte — dimensione massima di un file singolo;
- 16 exabyte — dimensione massima di un attributo;
- 3 × 1023 petabyte — dimensione massima di uno zpool;
- 256 — numero di attributi di un file (attualmente limitato a 248);
- 256 — numero di file in una directory (attualmente limitato a 248);
- 264 — numero di device per ogni zpool;
- 264 — numero di zpools;
- 264 — numero di file system in uno zpool.
Un utente che volesse creare mille file al secondo, impiegherebbe 9000 anni a raggiungere il limite.
Con il limite dei 1031 bit/kg, l'intera massa di un computer dovrebbe essere sotto forma di energia pura. Secondo l'equazione E=mc2, l'energia residua dei 136 miliardi di kg è di 1,2x1028 J. La massa dell'oceano è circa 1,4x1021 kg. Occorrebbero 4.000 J per aumentare la temperatura di 1 kg di acqua per 1 grado Celsius e circa 400.000 J per bollire 1 kg di acqua ghiacciata. La fase di vaporizazzione richiede altri 2 milioni di J/kg. L'energia richiesta per bollire l'oceano è circa 2,4x106 J/kg * 1,4x1021 kg = 3,4x1027 J. Quindi, riempire uno storage a 128-bit dovrebbe richiedere più energia che bollire gli oceani.»
Piattaforme
ZFS è incluso in Solaris su SPARC e sistemi x86. I pool e gli associati file system ZFS possono essere spostati tra sistemi SPARC e x86, senza distinzione del byte order.
Sun ha dichiarato che stanno studiando il porting su Linux [4]. Inoltre il gruppo di sviluppo di BSD sta effettuando il port anche su questo sistema operativo.
Modello transazionale Copy-on-write
ZFS utilizza il metodo transazionale ad oggetti copy-on-write. Tutti i puntatori ai blocchi contengono un checksum a 256 bit. Il blocco viene controllato ad ogni lettura. I blocchi contenenti dati non vengono mai sovrascritti: viene invece allocato un nuovo blocco dove vengono scritti i dati modificati; ogni blocco metadati che faceva riferimento al vecchio blocco viene reallocato. Per ridurre l'overhead, le scritture multiple vengono raggruppate in transazioni.
Snapshots
Siccome ZFS non sovrascrive i dati nei loro blocchi originari, fare una snapshot significa non cancellare i blocchi contenenti dati vecchi. Il vantaggio è che gli snapshot sono molto veloci.
Dimensione dei blocchi variabile
Il file system ZFS utilizza blocchi a dimensione variabile fino a 128 KB.
Se la compressione è attivata, dei dati possono essere scritti su un blocco di dimensione più piccola.
I pool dello storage
ZFS è costituito su un insieme di pool di storage virtuali. I pool si basano su uno o più device virtuali (vdevs), ciascuno dei quali può fare riferimento ad un device fisico, ad un mirror (RAID 1) di uno o più device, oppure su un gruppo di device RAID Z. Lo spazio di tutti i vdevs è reso disponibile a tutti i file systems nello zpool.
Per limitare lo spazio, è stato istituita la gestione delle quota disco.
Creazione di un file system leggero
La creazione di un file system leggero in un pool di storage ZFS è un'operazione veloce e semplice da effettuare, quasi come creare una directory.
Ulteriori caratteristiche
- Priorità I/O con scheduling di tipo deadline
- Ordinamento e aggregazione ottimale dell'I/O
- Stream multiplo e automatico di prefetch
- Operazioni sulle directory funzionano in parallelo e con un unità di tempo costante
- ZFS rispetta lo standard POSIX in fatto di file system: nessuna applicazione deve essere modificata per funzionare con il nuovo file system.
Note
- ^ http://www.sun.com/2004-0914/feature/ ZFS: the last word in file systems
- ^ http://blogs.sun.com/roller/page/bonwick?entry=zfs_the_last_word_in ZFS: The Last Word in Filesystems
- ^ http://www.sun.com/smi/Press/sunflash/2006-06/sunflash.20060620.1.xml Sun Celebrates Successful One-Year Anniversary of OpenSolaris
- ^ http://www.sun.com/emrkt/campaign_docs/expertexchange/knowledge/solaris_zfs_gen.html#10
Collegamenti esterni
- (EN) ZFS Development Community and detailed ZFS Documentation
- (EN) Dave Brillhart's Blog - ZFS: Boils the Ocean, Consumes the Moon
- (EN) ZFS on Fuse Google SoC 2006 project to port ZFS to FUSE