zfs - zettabyte file system

70

Click here to load reader

Upload: cataldo-cigliola

Post on 25-May-2015

4.591 views

Category:

Technology


9 download

DESCRIPTION

ZFS Il filesystem del futurohttp://cigliola.eu.org

TRANSCRIPT

Page 1: ZFS - Zettabyte File System

ZFS - Zettabyte File System

Il filesystem del futuro

v. 1.0 - a cura di Cataldo Cigliola

Page 2: ZFS - Zettabyte File System

Agenda

• Introduzione al filesystem

• Strutture RAID

• ZFS

• Esercitazioni

• Q&A

• Questionario di chiusura

image under creative commons license © arquera

Page 3: ZFS - Zettabyte File System

Introduzione al Filesystem

Un file system è parte integrante di qualsiasi sistema operativo e si occupa della gestione e organizzazione dei dati sui supporti di memorizzazione.

Un file system realizza tipicamente due livelli di astrazione, che rendono le risorse di memorizzazione di massa facilmente utilizzabili dagli utenti.

Page 4: ZFS - Zettabyte File System

Introduzione al Filesystem

Il primo livello di astrazione è quello che organizza i settori in un insieme di archivi (file) di dimensioni arbitrarie, che possono andare da zero all'intera dimensione disponibile del dispositivo. Ciascun file viene distribuito in un insieme di settori.

Il secondo livello di astrazione è quello che permette di organizzare i file dando loro dei nomi gerarchici.

Page 5: ZFS - Zettabyte File System

Introduzione al Filesystem

Nel corso della storia informatica, è stata ideata una miriade di file system. I sistemi operativi moderni sono spesso in grado di accedere a diversi file system, semplicemente installando un apposito modulo o driver.

I tipi di file system possono essere classificati in file system per dischi, file system di rete e file system per compiti speciali.

Page 6: ZFS - Zettabyte File System

Strutture RAID

Il RAID è un meccanismo di ridondanza e protezione dei dati che garantisce ( a seconda del modello prescelto ) una alta

disponibilità di spazio o una alta tolleranza ai guasti

Page 7: ZFS - Zettabyte File System

Strutture RAID

La struttura RAID più semplice è il RAID-0 altrimenti nota come striping. Due o più dischi vengono uniti insieme in una struttura logica e le operazioni di I/O sono parallelizzate su

tutte le meccaniche in gioco.

Page 8: ZFS - Zettabyte File System

Strutture RAID / RAID-0Vantaggi

Alta capacità ( più dischi ci sono, più spazio c’è ) Alte prestazioni ( più sono le meccaniche in gioco più velocemente i

dati verranno trasferiti)

Svantaggi

Nessun livello di protezione ( se salta un disco tutti i dati della struttura RAID sono compromessi )

Page 9: ZFS - Zettabyte File System

Strutture RAID

Un’alternativa al RAID-0 è rappresentata dal RAID-1 altrimenti noto come Mirroring. In questa struttura i dati sono clonati su tutti i dischi facenti parte del RAID e la dimensione massima è pari alla dimensione del disco più

piccolo dell’insieme

Page 10: ZFS - Zettabyte File System

Strutture RAID / RAID-1Vantaggi

Alta affidabilità ( se si rompe un disco la copia completa dei dati si trova anche sul suo mirror )

Svantaggi

Lo spazio è disottimizzato La velocità di scrittura è leggermente inferiore

Page 11: ZFS - Zettabyte File System

Strutture RAID

Un compromesso fra affidabilità e capacità è rappresentato dal RAID-5. Nella struttura RAID-5, il cui numero minimo di dischi è 3, i blocchi di dati vengono scritti in stripe su tutti i

dischi e contemporaneamente a ogni scrittura viene generato un codice di parità ( scritto anch’esso sui dischi ) che tramite un meccanismo di decodifica inversa permette

di recuperare eventuali errori di lettura di un blocco.

Page 12: ZFS - Zettabyte File System

Strutture RAID / RAID-5Vantaggi

Buona afidabilità ( se si rompe un disco i dati vengono recuperati tramite la parità ) Buona capacità ( solo 1/3 dello spazio va sprecato e non 1/2 come nel

mirroring )

Svantaggi

Il calcolo della parità richiede elevate risorse di calcolo La rottura di due dischi causa la perdita di tutti i dati In caso di interruzione dell’alimentazione durante la scrittura dei dati la

scrittura è inconsistente

Page 13: ZFS - Zettabyte File System

ZFS

ZFS, rispetto agli altri filesystem presenti sul mercato, introduce una serie di concetti innovativi come il pool di dischi, il copy on

write, il self healing, un innovativo sistema di checksum dei dati, la snapshot e il clone, oltre che una nuova struttura RAID, il RAID-Z

Page 14: ZFS - Zettabyte File System

RAID-Z

Il RAID-Z è una struttura raid molto simile al RAID-5 da cui non eredita però i difetti ( il write-hole ). Le scritture sono sempre

consistenti, anche in caso di interruzione repentina dell’alimentazione del disco

Page 15: ZFS - Zettabyte File System

Strutture RAID / RAID-ZVantaggi

Buona affidabilità ( se si rompe un disco i dati vengono recuperati tramite la parità ) Buona capacità ( solo 1/3 dello spazio va sprecato e non 1/2 come

nel mirroring )

Svantaggi

Il calcolo della parità richiede elevate risorse di calcolo La rottura di due dischi causa la perdita di tutti i dati

Page 16: ZFS - Zettabyte File System

Il Pool di dischi

Il concetto di pool di dischi è innovativo rispetto al volume. Gruppi di dischi possono essere raggruppati in pool con determinate

caratteristiche di protezione ( mirror, raid-z, stripe ) e su tali pool vengono poi creati uno o più filesystem logicamente indipendenti fra

di loro. Ogni filesystem può avere caratteristiche differenti

images credits http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf

Page 17: ZFS - Zettabyte File System

Copy on write

Quando un dato deve essere modificato, anziché sovrascrivere il blocco in cui risiede con il nuovo dato, questo viene copiato in un

nuovo blocco e qui modificato. Questa tecnica consente di preservare i dati nel caso di fault nella scrittura e permette inoltre l’implementazione di alcune features come la snapshot

images credits http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf

Page 18: ZFS - Zettabyte File System

Checksum

In un filesystem tradizionale il checksum dei dati viene scritto insieme ai dati stessi. Questo fa si che in caso di corruzione del dato anche il checksum si possa corrompere. ZFS scrive il checksum insieme ai

puntatori ai dati, questo permette di avere un livello di separazione ( e quindi di maggiore sicurezza ) e consente di verificare l’integrità del dato

anche in condizioni di danneggiamento del blocco che lo contiene.

images credits http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf

Page 19: ZFS - Zettabyte File System

Self Healing

In un mirror tradizionale la corruzione silente dei dati non è gestita. Grazie al checksum, invece ZFS è in grado di capire se il dato e corrotto e di conseguenza prendere il dato dall’altro ramo del mirror. ZFS inoltre effettua la auto riparazione del dato, prendendo il dato corretto dall’altro

ramo del mirror e sovrascrivendo quello corrottoimages credits http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf

Page 20: ZFS - Zettabyte File System

Snapshot

Il copy on write rende possibile la snapshot istantanea di un filesystem. Infatti è possibile definire il momento in cui si vuole effettuare una

fotografia dei dati ( magari per un backup successivo ) e il meccanismo di copy on write farà il resto. La snapshot è read-only

images credits http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf

Page 21: ZFS - Zettabyte File System

CloneIl clone è a tutti gli effetti una snapshot modificabile, infatti per creare un

clone è necessario prima creare una snapshot. Anche la creazione del clone sfrutta il copy on write ed è perciò istantanea, ma a differenza del clone i dati sono modificabili ( il blocco con le modifiche

viene scritto sul disco e il puntatore viene aggiornato di conseguenza ).

Sia per quanto riguarda la snapshot che per il clone la quantità di spazio necessaria è direttamente proporzionale alle modifiche effettuate all’originale

( nel caso della snapshot ) o al clone. Una snapshot o un clone appena creati occupano uno spazio pari a zero.

Page 22: ZFS - Zettabyte File System

Altre caratteristiche• Interamente a 128bit

• Filesystem grandi fino a 16exabyte

• Massima dimensione del file = alla massima dimensione del filesystem

• Pool grandi fino a 256 quadrilioni di zettabyte

• Dimensione dei blocchi variabile

• Prefetch dei dati intelligente

• Design transazionale

images credits http://it.wikipedia.org/wiki/Zettabyte

Page 23: ZFS - Zettabyte File System

Gestione dei pool

Il comando per la creazione di un pool di dischi è semplice

zpool create nome_pool disco disco ...

Per creare un pool di dischi in modalità stripe basterà lanciare il comando

zpool create tank c0d0 c0d1 c0d2

Page 24: ZFS - Zettabyte File System

Gestione dei pool

Il pool viene visto come un normale mount point da Solaris, ma le informazioni del pool ( proprietà, mount point, ecc. ) non risiedono nel file /etc/vfstab, bensì in una private region di ogni disco facente

parte del pool.

In questo modo le informazioni sulla struttura di cui il disco è parte sono insieme con il disco stesso e in questo modo è possibile spostare dischi e pool da un sistema all’altro senza

perdere le informazioni sul pool

Page 25: ZFS - Zettabyte File System

Gestione dei pool

Analogamente è possibile creare un pool con una protezione dei dati ( mirror o raidz ) specificando il tipo di protezione dopo il nome del pool

nel comando di creazione

zpool create tank mirror c0d0 c0d1

avendo cura di indicare un numero di dischi pari

Page 26: ZFS - Zettabyte File System

Gestione dei pool

Esistono due tipi di RAID-Z: A singola parità ( raidz ) o a doppia parità ( raidz2 ). Per creare un pool di questo tipo basta indicare la modalità desiderata nella tipologia del pool

zpool create tank raidz c0d0 c0d1 c0d2

avendo cura di indicare un numero di dischi maggiore o uguale a 3

Page 27: ZFS - Zettabyte File System

WARNING !!!

ZFS Non richiede conferma quando lanciate un comando, eventuali operazioni distruttive verranno

compiute senza alcun avvertimento.

Prima di lanciare qualsiasi comando ZFS è bene rileggere quanto scritto !

Page 28: ZFS - Zettabyte File System

Gestione dei pool

Per verificare lo stato di un pool è possibile usare il comando

zpool status nome_pool

Page 29: ZFS - Zettabyte File System

Gestione dei pool

zpool status tank

Page 30: ZFS - Zettabyte File System

Gestione dei pool

E possibile aggiungere dischi a un pool già in uso con il comando

zpool add nome_pool disco disco ...

Attualmente non è possibile togliere dischi da un pool , a meno che non si tratti di un detach di un ramo del mirror con il comando

zpool detach nome_pool disco

Page 31: ZFS - Zettabyte File System

Gestione dei pool

Il comando per la distruzione di un pool di dischi è

zpool destroy nome_pool

Page 32: ZFS - Zettabyte File System

Esercitazioni

Page 33: ZFS - Zettabyte File System

Esercizio n°1

• Creare un pool zfs in stripe di 3 dischi e verificare l’avvenuta creazione

• Creare un pool zfs in mirror e verificare l’avvenuta creazione

• Creare un pool zfs in raidz e verificare l’avvenuta creazione

Page 34: ZFS - Zettabyte File System

Esercizio n°2

• Aggiungere un disco al pool striped

• Rimuovere un ramo del mirror dal pool mirrored

• Distruggere i pool creati in precedenza

Page 35: ZFS - Zettabyte File System

Filesystem ZFS

Alla creazione di un pool, viene automaticamente creato un filesystem ZFS con nome , dimensione e mount point uguale a quello del pool.

Per verificare le caratteristiche di un filesystem è possibile usare il comando

zfs get all filesystem

Page 36: ZFS - Zettabyte File System

Filesystem ZFS

zfs get all tank

Page 37: ZFS - Zettabyte File System

Filesystem ZFS

Per modificare le caratteristiche di un filesystem ZFS si utilizza il comando

zfs set variabile=valore filesystem

Page 38: ZFS - Zettabyte File System

Filesystem ZFS

zfs set mountpoint=/tank_new tank

Page 39: ZFS - Zettabyte File System

Filesystem ZFS

All’interno di un pool è possibile creare nuovi filesystem ZFS utilizzando il comando

zfs create pool/filesystem

Page 40: ZFS - Zettabyte File System

Filesystem ZFS

zfs create tank/tank_2

zfs set mountpoint=/tank_2 tank/tank_2

Page 41: ZFS - Zettabyte File System

Filesystem ZFS

Di default, i filesystem all’interno di un pool condividono tutto lo spazio del pool ( tutti i filesystem ZFS hanno come dimensione massima la massima dimensione del pool ) a meno di non assegnare un limite

( quota ) o uno spazio riservato ( reservation )

zfs set quota=xx pool/filesystemzfs set reservation=xx pool/filesystem

Page 42: ZFS - Zettabyte File System

Filesystem ZFS

zfs set quota=10G tank/tank_2

zfs set reservation=5G tank/tank_2

Page 43: ZFS - Zettabyte File System

Filesystem ZFS

dd if=/dev/zero of=./file_virtuale bs=1024 count=6000000

Page 44: ZFS - Zettabyte File System

Filesystem ZFS

Una delle caratteristiche importanti di ZFS è la possibilità di abilitare la compressione ( algoritmo lzjb ) dei dati on-the-fly su ogni filesystem

zfs set compression=on pool/filesystem

Page 45: ZFS - Zettabyte File System

Filesystem ZFS

zfs set compression=on tank/tank_2

dd if=/dev/zero of=./file_virtuale bs=1024 count=6000000

Page 46: ZFS - Zettabyte File System

Filesystem ZFS

Per montare e smontare un filesystem ZFS è possibile usare il comando

zfs mount pool/filesystemzfs umount pool/filesystem

Page 47: ZFS - Zettabyte File System

Filesystem ZFS

Per eliminare un filesystem ZFS è sufficiente usare il comando

zfs destroy pool/filesystem

Page 48: ZFS - Zettabyte File System

Esercitazioni

Page 49: ZFS - Zettabyte File System

Esercizio n°3

• Creare un pool striped di due dischi

• Creare un pool mirrored

• Creare la seguente struttura di filesystem:/mionome/db (striped - min. 10Gb)/mionome/redo (mirrored - min. 2Gb, max 4Gb)/mionome/redo/archive (striped - compressed, min. 2Gb)

Page 50: ZFS - Zettabyte File System

Esercizio n°4

• distruggere i filesystem creati in precedenza

• Creare la seguente struttura di filesystem:/mionome/ (striped - min. 10Gb)/mionome/archive (mirrored - min. 2Gb, max 4Gb)

• Smontare il filesystem /mionome

• Rimontare la struttura come prima

Page 51: ZFS - Zettabyte File System

Esercizio n°5

• distruggere il filesystem /mionome

• distruggere i pool creati in precedenza

Page 52: ZFS - Zettabyte File System

Gestione dei poolUn pool può essere esportato su un sistema diverso. L’unico pre-

requisito è che tutti i dischi facenti parte del pool siano visibili dall’host che deve importare il pool.

Per spostare un pool su un altro sistema è necessario prima esportarlo con il comando

zpool export nome_pool

Page 53: ZFS - Zettabyte File System

Gestione dei pool

Per importare un pool esportato da un altro sistema basta usare il comando

zpool import [-R alt_root] nome_pool

Page 54: ZFS - Zettabyte File System

Snapshot e Cloni

ZFS permette di creare una snapshot istantanea di un filesystem ( grazie al meccanismo del copy on write ) con il comando

zfs snapshot pool/filesystem@nome_snap

la snapshot viene posta in una directory nascosta ( .zfs ) all’interno del filesystem da cui dipende ed è una copia in sola lettura dei dati.

Page 55: ZFS - Zettabyte File System

Snapshot e Cloni

E’ possibile ottenere un elenco delle snapshot disponibili con il comando

zfs list -t snapshot

Page 56: ZFS - Zettabyte File System

Snapshot e Cloni

E’ possibile fare rollback di una snapshot ripristinando il filesystem originale allo stato in cui era quando è stata fatta la snapshot con il

comando

zfs rollback pool/filesystem@nome_snap

la snapshot viene automaticamente ripristinata nel filesystem originale

Page 57: ZFS - Zettabyte File System

Snapshot e Cloni

E’ possibile ripristinare anche singoli files della snapshot. Basta cercare all’interno della directory nascosta

/path_to_dir/.zfs/snapshot/nome_snap

Page 58: ZFS - Zettabyte File System

Snapshot e Cloni

Per avere una copia modificabile dei dati ( la snapshot è read-only ) è possibile clonare una snapshot con il comando

zfs clone pool/filesystem@snapshot pool/nuovofs

Page 59: ZFS - Zettabyte File System

Snapshot e Cloni

ZFS permette di creare uno stream su standard output partendo da una snapshot rendendo così possibili le seguenti operazioni:

• Backup full su filesystem • Backup incrementale su filesystem ( modello Time Machine )• Replicazione remota dei dati

Page 60: ZFS - Zettabyte File System

Snapshot e Cloni

• Backup full su filesystem

zfs send pool/fs@snap1 > /backup/snap1

Page 61: ZFS - Zettabyte File System

Snapshot e Cloni

• Backup incrementale su filesystem ( modello Time Machine )

zfs send -i pool/fs@snap1 pool/fs@snap2 > /backup/snap_inc

Page 62: ZFS - Zettabyte File System

Snapshot e Cloni

• Replicazione remota dei dati

zfs send -i tank/fs@11:31 tank/fs@11:32 | ssh remote_host zfs receive -d /tank/fs

Page 63: ZFS - Zettabyte File System

Esercitazioni

Page 64: ZFS - Zettabyte File System

Esercizio n°6

• creare un pool striped di due dischi

• creare 2 filesystem all’interno del pool

• popolare i filesystem con dati random

• creare una snapshot di entrambi i filesystem

• creare un clone di una delle due snapshot

Page 65: ZFS - Zettabyte File System

Esercizio n°7

• creare un backup su disco dei dati della snapshot

• creare un nuovo pool striped di due dischi

• replicare i dati della snapshot sul nuovo pool

Page 66: ZFS - Zettabyte File System

Esercizio n°8

• popolare i filesystem con altri dati random

• creare una nuova snapshot dei dati

• aggiornare incrementalmente la replica sul nuovo pool

Page 67: ZFS - Zettabyte File System

Esercizio n°9

• popolare i filesystem con altri dati random

• eseguire un rollback della snapshot originale

• distruggere il clone creato in precedenza

• distruggere le snapshot

Page 68: ZFS - Zettabyte File System

Esercizio n°10

• distruggere i filesystem creati in precedenza

• distruggere i pool creati in precedenza

Page 69: ZFS - Zettabyte File System

Domande ?

Page 70: ZFS - Zettabyte File System

Grazie !

Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribuzione 2.5 Italia. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by/2.5/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.