ZFS, l'avenir ?
Je profite de ce billet pour inaugurer une nouvelle catégorie, que je nomme "Veille technologique".
Le monde des systèmes de fichiers est très intéressant et très dynamique. Je vais aujourd'hui vous parler d'un petit nouveau qui pourrait bien faire le ménage : Zeta File System alias ZFS. C'est un système de fichiers créé par Sun Microsystems pour Solaris/OpenSolaris. Sun a choisit de libérer le code source de ZFS en plus de celui de Solaris (OpenSolaris). Pourquoi ZFS est il si intéressant ? Voyons en détails...
La gestion des volumes logique intégrée
Peu d'utilisateur basique connaisse la notion de volumes logique. Pourtant, elle est d'un intérêt très net. Imaginez que vous avez un disque-dur pour stocker vos données. Chaque jour il se remplit un peu plus. Un jour qu'il est plein, vous courrez en acheter un nouveau. Vous avez maintenant deux disques-dur qui sont totalement indépendant. Si, alors que vous avez un gros fichier de 3 Go à télécharger, vous n'avez plus que 1 Go sur un disque et 2 Go sur l'autre, vous ne pourrez par télécharger votre fichier. Pourtant vous avez suffisement de place. Rageant ! Plutôt que de jouer au jeu des vases communiquant en déplaçant les fichiers d'un disque-dur à l'autre, vous auriez dû utiliser un gestionnaire de volumes logique.
Un Logical Volume Manager est une couche d'abstraction entre le disque-dur et le système de fichiers. Les disques-dur (Physical Volume) sont découpés en chunks (morceaux) puis ajoutés à un groupe de volumes (Volumes Group). Un volume logique (Logical Volume, équivalent à une partition) est composé de un ou plusieurs chunks, répartis sur un groupe de volume (indépendamment du disque-dur). De cette façon, si vous créer un volume logique qui couvre tous les chunks du groupe de volumes, vous obtenez l'équivalent d'une partition qui a la taille de l'ensemble de vos disques-dur.
L'ajout d'un disque-dur à un volume logique se déroule en trois étapes. La première étape est l'ajout du disque-dur au groupe de volume adéquat. Cette opération peut être assimilée à l'agrandissement d'un disque-dur. Ensuite il faut agrandir le volume logique. Cela équivaut à redimensionner une partition (en l'agrandissant). Enfin, il agrandir le système de fichier qui se trouve sur le volume logique.
Cette technologie, séduisante, pose néanmoins un sérieux problème : les systèmes de fichiers et les volumes logique sont totalement indépendant. Si un de vos disques-dur lâche, le volume logique est tout simplement amputé. Le système de fichiers ne retrouve alors plus ses petits. La récupération des données intact relève alors du parcours du combattant.
ZFS résout simplement ce problème en intégrant sa propre gestion des volumes logique. L'ajout d'un disque-dur au système de fichiers ZFS se fait en une étape, l'importation du disque-dur :
# zpool import <groupe de volume> <disque>
De même, du fait du lien étroit entre gestion des volumes et système de fichiers, si un disque-dur disparait, ZFS masque simplement les données manquante, sans perturber le reste du système. Si par ailleurs, le disque-dur réapparaissait plus tard, il suffirait de le ré-importer pour que les données, elles aussi, ré-apparaissent.
Fiabilité des données
Vous ne le savez peut être pas, mais les disques-dur rencontrent de nombreuses erreurs chaque jour, les données sont régulièrement mal lues et donc corrompues. Les disques-dur intègrent leur propre gestion des erreurs et tente de relire les données mal lues. Mais si une donnée corrompue est transmise au système de fichiers, celui ci la fait suivre au reste du système (avec potentiellement des effets désastreux).
Pour chaque bloc de données ou méta-données, ZFS calcul une somme de contrôle. De cette façon, si les données sont corrompues, le système de fichier le détectera et retournera une erreur de lecture plutôt que de mauvaises données.
De plus, si ZFS est utilisé dans le cadre d'un RAID, il ira automatiquement lire les données valides sur un autre disque-dur afin de corriger l'erreur sur le disque-dur défaillant. Un RAID classique se contente de retourner les mauvaises données puisqu'il ne peut détecter le problème.
Système de fichiers transactionnel
Un des problèmes des systèmes de fichiers classique, c'est qu'ils doivent effectuer les opérations en deux étapes : écrire les données en écrasant les anciennes puis lier ces données à un répertoire. Si une coupure de courant intervient entre les deux étapes, le constat est simple : données perdues. Pour pallier ce problème, la commande fsck a été conçue afin de tenter de retrouver des données n'étant pas encore liées à un répertoire. L'opération est malheureusement aléatoire et, avec l'accroissement de la taille des disques-dur, de plus en plus longue.
ZFS est un système de fichiers transactionnel, ce qui veut dire qu'il est à tout moment dans un état stable. La commande fsck est donc tout simplement inutile. ZFS fait en sorte de ne jamais écraser d'anciennes données, il écrit ses nouvelles données dans un emplacement inutilisé. Ensuite, il valide l'opération en écrivant les nouvelles informations d'emplacement. De cette façon, si une coupure de courant intervient, les anciennes données sont intact et le positionnement correct : le système de fichiers est stable.
Snapshot
Un snapshot est la création à un instant t de l'image du système de fichiers. Un snapshot n'est pas modifiable. L'intérêt principal du snapshot est de sauver un état avant d'entreprendre des modifications de données. Lorsque l'on tente de modifier un fichier qui a été capturé par un snapshot, les deux versions sont enregistrées sur le volume, la nouvelle version et la version du snapshot.
ZFS permet la création rapide et indolore de snapshot. Rapide parce que l'opération ne prend pas plus de quelques secondes et indolore car elle ne prend presque pas de place sur le volume. Bien sûr, ce n'est valable qu'après la création du snapshot. Si vous modifiez des données, les deux versions cohabiterons et donc, chaque fichier modifié prendra en réalité le double de la place nécessaire. Une bonne gestion des snapshots est donc indispensable (pas la peine de garder des snapshots vieux de plusieurs mois !).
Administration simplifiée
Merci de penser à nous, pauvres administrateurs système. La gestion de ZFS s'effectue avec deux commandes : zpool et zfs. La syntaxe est claire et simple, que demander de plus ?
Créer un groupe de volumes nommé data avec deux disques-dur en RAID-1 :
# zpool create data mirror <disque 1> <disque 2>
Une fois cette commande exécutée, le groupe de volume est immédiatement opérationnel. Par défaut, un volume logique qui couvre tout le groupe de volumes est créé.
Ajouter trois disques-dur en RAID-Z au groupe de volumes data :
# zpool add data raidz <disque 1> <disque 2> <disque 3>
La place créée par les trois disques-dur est automatiquement ajoutée au groupe de volumes.
Créer un nouveau volume logique nommé music sur le groupe de volumes data :
# zfs create data/music
Un nouveau volume logique est créé. L'espace libre est partagé entre les différents volumes logique existant.
Conclusion
Je ne vais bien sûr pas couvrir l'ensemble des fonctionnalités de ZFS ici, ce serait bien trop long. Je pourrais encore parler des quotas, de l'export NFS, de la cryptographie, de la compression intégrée etc... Mais j'ai juste envie de vous faire découvrir ce très intéressant système de fichiers. La prochaine fois que vous intallerez un ou plusieurs disques-dur, pensez-y...
ZFS est déjà disponible sur Solaris et OpenSolaris. Des projets de portage sont en cours pour Linux (ZFS-on-FUSE) et FreeBSD. Des rumeurs circulent quant à l'intégration de ZFS dans la prochaine version de Mac OS X (Léopard)
Commentaires
Le fait que ZFS soit porté sur plusieurs OS en fait une solution extrèmement intéressante. Actuellement, chaque OS a son système de fichiers et son gestionnaire de volumes logique. Grâce à ZFS, il sera possible de changer d'OS sans se soucier de l'accès à ses données.
