ZFS - Zettabyte File System

5,142 views

Published on

ZFS Il filesystem del futuro
http://cigliola.eu.org

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total views
5,142
On SlideShare
0
From Embeds
0
Number of Embeds
133
Actions
Shares
0
Downloads
238
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

ZFS - Zettabyte File System

  1. 1. ZFS - Zettabyte File System Il filesystem del futuro v. 1.0 - a cura di Cataldo Cigliola
  2. 2. Agenda • Introduzione al filesystem • Strutture RAID • ZFS • Esercitazioni • Q&A • Questionario di chiusura image under creative commons license © arquera
  3. 3. 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.
  4. 4. 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.
  5. 5. 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.
  6. 6. 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
  7. 7. 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.
  8. 8. Strutture RAID / RAID-0 Vantaggi 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 )
  9. 9. 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
  10. 10. Strutture RAID / RAID-1 Vantaggi 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
  11. 11. 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.
  12. 12. Strutture RAID / RAID-5 Vantaggi 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
  13. 13. 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
  14. 14. 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
  15. 15. Strutture RAID / RAID-Z Vantaggi 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
  16. 16. 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
  17. 17. 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
  18. 18. 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
  19. 19. 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 corrotto images credits http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf
  20. 20. 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
  21. 21. Clone Il 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.
  22. 22. 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
  23. 23. 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
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. 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 !
  28. 28. Gestione dei pool Per verificare lo stato di un pool è possibile usare il comando zpool status nome_pool
  29. 29. Gestione dei pool zpool status tank
  30. 30. 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
  31. 31. Gestione dei pool Il comando per la distruzione di un pool di dischi è zpool destroy nome_pool
  32. 32. Esercitazioni
  33. 33. 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
  34. 34. Esercizio n°2 • Aggiungere un disco al pool striped • Rimuovere un ramo del mirror dal pool mirrored • Distruggere i pool creati in precedenza
  35. 35. 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
  36. 36. Filesystem ZFS zfs get all tank
  37. 37. Filesystem ZFS Per modificare le caratteristiche di un filesystem ZFS si utilizza il comando zfs set variabile=valore filesystem
  38. 38. Filesystem ZFS zfs set mountpoint=/tank_new tank
  39. 39. Filesystem ZFS All’interno di un pool è possibile creare nuovi filesystem ZFS utilizzando il comando zfs create pool/filesystem
  40. 40. Filesystem ZFS zfs create tank/tank_2 zfs set mountpoint=/ tank_2 tank/tank_2
  41. 41. 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/filesystem zfs set reservation=xx pool/filesystem
  42. 42. Filesystem ZFS zfs set quota=10G tank/ tank_2 zfs set reservation=5G tank/tank_2
  43. 43. Filesystem ZFS dd if=/dev/zero of=./ file_virtuale bs=1024 count=6000000
  44. 44. 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
  45. 45. Filesystem ZFS zfs set compression=on tank/tank_2 dd if=/dev/zero of=./ file_virtuale bs=1024 count=6000000
  46. 46. Filesystem ZFS Per montare e smontare un filesystem ZFS è possibile usare il comando zfs mount pool/filesystem zfs umount pool/filesystem
  47. 47. Filesystem ZFS Per eliminare un filesystem ZFS è sufficiente usare il comando zfs destroy pool/filesystem
  48. 48. Esercitazioni
  49. 49. 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)
  50. 50. 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
  51. 51. Esercizio n°5 • distruggere il filesystem /mionome • distruggere i pool creati in precedenza
  52. 52. Gestione dei pool Un 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
  53. 53. Gestione dei pool Per importare un pool esportato da un altro sistema basta usare il comando zpool import [-R alt_root] nome_pool
  54. 54. 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.
  55. 55. Snapshot e Cloni E’ possibile ottenere un elenco delle snapshot disponibili con il comando zfs list -t snapshot
  56. 56. 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
  57. 57. 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
  58. 58. 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
  59. 59. 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
  60. 60. Snapshot e Cloni zfs send pool/fs@snap1 > /backup/snap1 • Backup full su filesystem
  61. 61. Snapshot e Cloni zfs send -i pool/fs@snap1 pool/fs@snap2 > /backup/ snap_inc • Backup incrementale su filesystem ( modello Time Machine )
  62. 62. Snapshot e Cloni zfs send -i tank/fs@11:31 tank/fs@11:32 | ssh remote_host zfs receive -d /tank/fs • Replicazione remota dei dati
  63. 63. Esercitazioni
  64. 64. 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
  65. 65. 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
  66. 66. Esercizio n°8 • popolare i filesystem con altri dati random • creare una nuova snapshot dei dati • aggiornare incrementalmente la replica sul nuovo pool
  67. 67. 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
  68. 68. Esercizio n°10 • distruggere i filesystem creati in precedenza • distruggere i pool creati in precedenza
  69. 69. Domande ?
  70. 70. 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.

×