Une analyse détaillée du système de fichiers ZFS

 
ZFS ou le Zettabyte File System représente une évolution considérable par rapport à de nombreux systèmes de fichiers existants. Il permet un stockage aux dimensions quasi illimitées, simplifie énormément l'administration et la sécurité de vos systèmes de fichiers. 
 
Ce système de fichiers (FS) est disponible sous FreeBSD et FreeNAS depuis la version 8. Il est aussi disponible dans les systèmes Solaris et leurs dérivées (Illumos, OpenIndiana, SmartOS, …). 
 
Ce système est passé dans l'OpenSource peu de temps avant qu'Oracle ne rachète Sun Microsystem. Ses avantages sont si impressionnants qu'il est maintenant porté sur de nombreux systèmes Linux / Unix et BSD. Les systèmes les plus stables sont FreeBSD Illumos  OpenIndiana
 
La dernière version Linux en date qui est maintenant stable est ZFS On Linux
 
 

Pourquoi ZFS est-il un excellent système de fichier ? 

Nous vous proposons donc une analyse détaillée cet Operating System en se penchant sur différents aspects de son architecture. 

  • Les origines de ZFS 
  • L'intégrité des données 
  • Les pools de stockage 
  • Un système de vérification des disques "auto imune"
  • Un puissant système de Snapshots
  • Les fonctions modernes de l'OS 
 

Les origines de ZFS :

A l'origine de la création de ZFS (les premiers développements ont démarré en 2001), les ingénieurs de Sun Microsystem sont partis du constat que les concepts qui soutenaient les systèmes de fichiers n'avaient pas trop évolués depuis la création de l'informatique moderne dans les années 70/80. A l'époque un ordinateur avait connaissance de son ou ses disques et des fichiers qui pouvaient être stockés dessus. Un système de fichiers était associé à un seul disque. Sur les ordinateurs modernes, cette approche est souvent conservée. 
 
Ainsi pour fournir plus d'espace de stockage, un niveau d'abstraction intermédiaire a été ajouté entre le système de fichier et les disques. C'est le Volume Manager, qui permet la virtualisation d'un certain nombre de disques en un Volume.
 
ZFS est parti du constat que les PC et les serveurs disposaient de nombreux disques et que le bon endroit pour commencer à optimiser ce stockage était au niveau de l'Operating System : l'interface qu'offre le File System. ZFS met donc à disposition du Système de Fichiers un ou plusieurs Volume qui eux-même proviennent du gestionnaire de "pool" (ZFS Storage Pool). 
 
 

L'intégrité des données : 

L'intégrité des données est assurée grâce à l'utilisation d'un algorithme de checksum (sha-256) utilisé dans tout l'arbre du file system. Chaque bloc de données fait l'objet d'un checksum qui est stocké dans le pointeur du block (plutôt que dans le block en lui même). Ceci est répliqué à travers tout le système. 
 
De nombreux autres mécanismes de protection des données entrent en jeu dans ZFS, permettant ainsi d'éviter la corruption des données dans les cas les plus standards (bug dans le firmware des disques, écritures fantômes, mauvais accès au niveau block, erreur de parité entre la mémoire et le disque, …). Ce type de vérifications est assez unique et place ZFS devant la plupart des systèmes tels qu'UFS, Ext, XFS, JFS, ou NTFS. 
 
ZFS a adopté le modèle de "copie lors de l'écriture" ou "copy on write" qui permet de limiter les erreurs lors de l'écriture des données. 
 
 

Les pools de stockage :

C'est la commande "zpool" qui permet de gérer cette interaction.
 
Ainsi les Zpools de ZFS sont construits à partir de devices virtuels (vdevs) qui sont eux même composés de partitions ou de disques (l'utilisation de disques étant recommandée). Chaque "vdev" peut être configuré suivant les besoins de redondance et de performance qui vous sont propres. Sans redondance (équivalent RAID 0), en miroir de deux ou plusieurs disques (équivalent RAID 1) ou en RAID-Z (équivalent au RAID-5), RAID-Z2 (équivalent RAID-6) ou RAID-Z3 (RAID avec triple parité). 
 
A partir de ces "vdevs", de nombreuses opérations sont possibles : il est possible de modifier le nombre de disques dans un vdev, il est possible d'augmenter la capacité d'un vdev en y ajoutant des disques. Les pools de disque peuvent avoir des disques en spare en cas de défaillance d'un disque… 
 
 
Il est préférable de confier la configuration des disques à ZFS afin qu'il gére lui-même ses pools de disques (conformément à ce que nous avons vu). C'est la raison pour laquelle l'installation de ZFS au dessus d'un gestionnaire de disques existant est fortement déconseillé. Tous les serveurs que nous proposons à la vente tiennent compte de cet état de fait et utilisent des cartes contrôleur adaptées à ZFS. 
 
 

Plus de fsck pour la vérification des disques :

Avec ZFS, fsck a été relégué aux oubliettes de l'informatique ! 
 
A la place ZFS dispose de la commande "scrub" qui permet d'assurer des fonctions de vérifications régulières des disques.  
 
  • fsck doit être opéré sur un FS qui est démonté… scrub peut lui travailler sur un FS monté. 
  • fsck ne vérifie que les metadatas (comme les journaux de log), mais jamais les données en elle même ce qui signifie que ces dernières peuvent toujours être corrompues après un fsck ! scrub lui vérifie les données et les méta-données. 
  • avec un volume en RAIDZ ou en MIRROIR scrub répare automatiquement les défaillances rencontrées pendant l'examen des données. 
 
Il est recommandé d'utiliser scrub tous les mois avec des disques de type professionnel et un peu plus souvent si vous utilisez des disques de moins bonne qualité (" zpool scrub "). 
 
 

Un puissant système de snapshot : 

Tout système de fichiers n'étant pas à l'abris d'une défaillance hardware, ZFS dispose d'un puissant mécanisme de sauvegarde plus connu sous le nom de "snapshot". Un snapshot est donc une image disponible en lecture seule d'un système de fichier à un instant donné. Les snapshots sont visibles avec la commande "zfs list -t snapshot" et ils sont présentés sous la forme filesystem@name 
 
Il faut noter qu'un snapshot ne consomme pas (initialement) plus d'espace disque que le volume ou le système de fichiers auquel il correspond. Seule la différence du système de fichiers ou du volume entre l'instant du Sanpshot1 (S1) et du Snapshot2 (S2) est ensuite stockée sur le volume. Ceci permet donc d'obtenir des snapshots très performants et rapides ou seul le ∆ entre deux snapshot est stocké. 
 
Les snapshots peuvent être clonés ou rétablis à un état passé (rollback). 
 
En plus de cela il est possible d'envoyer les snapshots à distance avec les commandes " zfs send " et " zfs receive ". Couplé à ssh, cela permet un backup rapide, simple et efficace. 
 
 
 

Les fonctions modernes de l'OS : 

Les fonctions listées ci-après sont souvent vendues par les fabricants de NAS pour des montants exorbitants alors qu'ils sont gratuits sous ZFS. 
 
  • La déduplication permet d'éviter que des copies de données similaires ne soient stockées deux ou "n" fois sur le FS. 
  • Le Stripping dynamique qui permet de répartir les écritures sur tous les disques lors de l'ajout d'un nouveau disque à un pool 
  • La manipulation du système de fichier est grandement simplifiée et elle s'apparente plus à la création / modification  d'un répertoire sous un système classique qu'à la modification du FS en lui même. 
  • Les systèmes de cache sont optimisés grâce à l'utilisation de ARC. 
  • L'encryption qui a récemment fait son apparition sur FreeNAS permet de sécuriser les données stockées sur les différents volumes en permettant leur encryption. 
  • La pré-allocation de ressources 
  • La gestion de différents niveaux de compressions au niveau du FS avec différents algorythmes (lzjb et gzip avec n niveau pour la compression gzip). 
 
 
 

En conclusion : 

Enfin je gardais le meilleur pour la fin, ZFS étant un système de fichier qui stock ses données sous 128-bit, il dispose de capacité de stockage qui sont de quasi illimitées. Couplé à une manipulation du File Système particulièrement riche, cela en fait l'un des Système de Fichier le plus intéressant au monde.  
 
Il a ainsi été dit : "qu'il faudrait pour remplir un système de fichiers 128-bit plus d'énergie que celle qui serait nécessaire pour faire bouillir tous les océans de notre planète !" 
 
 
Si cet article vous a plu, vous pouvez jeter un coup d'œuil à nos serveurs NAS qui sont optimisés pour fonctionner sous ZFS (avec FreeNAS) : 
 
 

Pour approfondir le sujet : 

Vous pouvez vous reporter aux liens suivants pour avoir plus d'informations sur ZFS : 

L'incontournable Wikipédia en Anglais : http://en.wikipedia.org/wiki/ZFS 

Et un autre lien sur la déduplication : http://en.wikipedia.org/wiki/Data_deduplication

Du côté d'Oracle : http://docs.oracle.com/cd/E19082-01/817-2271/6mhupg6hh/index.html

La documentation originale complète sur ZFS - indispensable : http://docs.oracle.com/cd/E19253-01/819-5461/gbscy/index.html

La documentation ZFS de FreeBSD : https://www.freebsd.org/doc/handbook/zfs.html

La documentation ZFS d'OpenZFS : http://open-zfs.org/wiki/System_Administration

Et finalement celle de Aaron Toponce : https://pthree.org/2012/04/17/install-zfs-on-debian-gnulinux/