zfs - zettabyte file system

Post on 25-May-2015

4.591 Views

Category:

Technology

9 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

ZFS - Zettabyte File System

Il filesystem del futuro

v. 1.0 - a cura di Cataldo Cigliola

Agenda

• Introduzione al filesystem

• Strutture RAID

• ZFS

• Esercitazioni

• Q&A

• Questionario di chiusura

image under creative commons license © arquera

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.

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.

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.

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

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.

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 )

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

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

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.

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

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

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

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

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

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

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

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

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

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.

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

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

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

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

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

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 !

Gestione dei pool

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

zpool status nome_pool

Gestione dei pool

zpool status tank

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

Gestione dei pool

Il comando per la distruzione di un pool di dischi è

zpool destroy nome_pool

Esercitazioni

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

Esercizio n°2

• Aggiungere un disco al pool striped

• Rimuovere un ramo del mirror dal pool mirrored

• Distruggere i pool creati in precedenza

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

Filesystem ZFS

zfs get all tank

Filesystem ZFS

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

zfs set variabile=valore filesystem

Filesystem ZFS

zfs set mountpoint=/tank_new tank

Filesystem ZFS

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

zfs create pool/filesystem

Filesystem ZFS

zfs create tank/tank_2

zfs set mountpoint=/tank_2 tank/tank_2

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

Filesystem ZFS

zfs set quota=10G tank/tank_2

zfs set reservation=5G tank/tank_2

Filesystem ZFS

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

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

Filesystem ZFS

zfs set compression=on tank/tank_2

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

Filesystem ZFS

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

zfs mount pool/filesystemzfs umount pool/filesystem

Filesystem ZFS

Per eliminare un filesystem ZFS è sufficiente usare il comando

zfs destroy pool/filesystem

Esercitazioni

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)

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

Esercizio n°5

• distruggere il filesystem /mionome

• distruggere i pool creati in precedenza

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

Gestione dei pool

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

zpool import [-R alt_root] nome_pool

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.

Snapshot e Cloni

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

zfs list -t snapshot

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

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

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

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

Snapshot e Cloni

• Backup full su filesystem

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

Snapshot e Cloni

• Backup incrementale su filesystem ( modello Time Machine )

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

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

Esercitazioni

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

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

Esercizio n°8

• popolare i filesystem con altri dati random

• creare una nuova snapshot dei dati

• aggiornare incrementalmente la replica sul nuovo pool

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

Esercizio n°10

• distruggere i filesystem creati in precedenza

• distruggere i pool creati in precedenza

Domande ?

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.

top related