Systèmes de fichiers : (Open)ZFS, ses grandes capacités et ses mystères
-
=> Article complet : nextinpact.com <=
Après les principaux systèmes de fichiers trouvés chez Microsoft, Apple et dans le monde Linux, nous nous penchons sur ZFS. Développé initialement par Sun, on le trouve dans plusieurs UNIX, quelques distributions, certaines gammes de NAS et même dans macOS pendant un temps. Ses caractéristiques sont nombreuses.
Alors que tous les noms de systèmes de fichiers sont composés généralement d’un sigle ayant un sens, ZFS n’en a pas particulièrement. Le « Z » renvoie, selon les personnes qui en parlent, à plusieurs significations, notamment zettabyte (zettaoctet) ou comme dernière lettre de l’alphabet, soulignant l’idée qu’il serait en quelque sorte l’aboutissement de ce que l’on peut faire de mieux dans le domaine.
Parmi tous les systèmes de fichiers déjà vus, ZFS est l’un des plus récents, avec APFS. Son développement a débuté en 2001. Il a été présenté et annoncé par Sun pour septembre 2004, mais il est arrivé six mois plus tard, intégré à Solaris, l’UNIX maison, puis dans OpenSolaris à la fin de la même année.
Dès le départ, ses caractéristiques ont fait de ZFS un système de fichiers à part. Il pourrait techniquement être la réponse à bien des problématiques de stockage, mais son fonctionnement particulier l’a réservé à certains scénarios. Des décisions justifiées ?
Lire notre dossier sur les systèmes de fichiers :
- | Qu’est-ce qu’un système de fichiers ?
- | Systèmes de fichiers : FAT12 à 32 et exFAT, conçus pour le grand public
- | Systèmes de fichiers : NTFS et ReFS, pensés d’abord pour l’entreprise
- | Systèmes de fichiers : de HFS et ses évolutions à APFS chez Apple
- | Systèmes de fichiers : ext4 et Btrfs, les « frères ennemis » du monde Linux
ZFS, un système de fichiers hors normes
Les caractéristiques de ZFS sont peu communes. Dans les articles précédents, vous vous souvenez peut-être que l’arrivée du 64 bits avait profondément modifié les capacités des systèmes de fichiers concernés, comme dans NTFS et ext4. Dans le cas de ZFS, on parle de 128 bits.
Techniquement, la taille maximale des volumes et des fichiers est de 16 Eo, soit 16 millions de To. Un volume peut embarquer 2⁴⁸ fichiers, soit plus de 280 millions de milliards, ce qui correspond également au nombre maximal dans un répertoire. Il n’y a virtuellement aucune limite au nombre de fichiers qu’un volume peut ainsi stocker.
Des chiffres si élevés qu’ils ont fait dire au concepteur de ZFS, Jeff Bonwick, que « remplir en totalité un espace de stockage 128 bits consommerait, littéralement, plus d’énergie que de faire bouillir les océans ». Une phrase et une explication restées célèbres.
Comme on peut s’en douter, ZFS gère les noms longs (255 caractères). Pensé avant tout pour le monde UNIX, il reprend les autorisations POSIX (comme ext4 et Btrfs), auxquelles il ajoute les ACL (NFSv4). La hiérarchie de ZFS est en arbre B, comme la plupart des systèmes de fichiers modernes.
Bien que la taille des blocs soit par défaut de 128 ko, elle est en fait variable. Elle peut être adaptée selon les besoins au sein d’un même volume, que ce soit par l’administrateur ou par des processus automatisés. En cas de compression des données, elle est ainsi automatiquement activée.
Des caractéristiques bien spécifiques
L’approche retenue dès le départ tranche avec ce que l’on a pu voir jusqu’ici. ZFS virtualise partiellement la gestion du stockage, notamment celle des disques, ce que l’on peut rapprocher du fonctionnement des volumes logiques, que l’on retrouve par exemple dans APFS. Dans ZFS, il s’agit du Volume Manager, qui ajoute une couche d’abstraction intermédiaire entre les disques et le système de fichiers, donc avec le système d’exploitation. On parle ainsi parfois de ZFS comme d’une plateforme, car il reprend à son compte des fonctions trouvées habituellement dans le système d’exploitation lui-même.
Ce dernier verra ainsi des volumes mis à disposition depuis le Storage Pool. C’est à l’administrateur de déterminer quels vont être les besoins de stockage pour configurer des vdev (virtual device, ou appareil virtuel), c’est-à-dire des agrégats de disques ou de partitions. Chaque vdev peut être configuré avec ou sans redondance des données (choix du niveau de RAID) et selon des critères de performances spécifiques.
La gestion des vdev est souple, puisqu’ils peuvent être reconfigurés. On peut ainsi modifier le nombre de disques ou de partitions dans chaque vdev, augmenter ou diminuer sa capacité en ajoutant ou supprimant des disques, on peut déclarer un ou plusieurs disques en spare (redondance) dans chaque pool, etc.
Dans la gestion de l’ensemble, on trouve deux commandes essentielles. La première, zpool s’occupe des pools (agrégats). La seconde, zfs, gère les volumes et les datasets. Par exemple, si l’on souhaite créer un agrégat « nxi » de huit disques (nommés de a à h), dont deux utilisés en redondance, la commande est la suivante :
zpool create nxi raidz2 sd[abcdefgh]
ici, raidz2 est le type de RAID choisi pour établir la redondance. Avant d’aller plus loin, il faut donc aborder la manière dont ZFS s’occupe de l’intégrité des données.
Crédits : GT-ZFS
Intégrité des données : c’est parti
C’est l’une des fonctions principales de ZFS : protéger l’intégrité des données. Des caractéristiques qui l’ont rendu populaire notamment auprès de certains constructeurs de NAS.
Premièrement, ZFS fait une utilisation différente des sommes de contrôle (checksum) en SHA-256. Comme dans Btrfs, elles sont utilisées aussi bien pour les données que les métadonnées. Mais au lieu d’être stockée dans le bloc de données concerné, une somme sera stockée dans le pointeur de ce bloc (bloc parent). Ce fonctionnement est répliqué dans l’intégralité de la hiérarchie du système de fichiers.
Ensuite, ZFS fonctionne – sans surprise cette fois – sur la base du copy-on-write. Comme nous l’avons expliqué plusieurs fois, cela signifie que les modifications sur des fichiers sont faites sur des copies de ces derniers, plutôt que sur les données originales. Ce qui signifie une augmentation de l’espace requis, mais pérennise les informations, puisqu’une opération échouée pourra être retentée ou des données pourront être restaurées.
Ce mécanisme est à la base des clones et snapshots, exactement comme dans Btrfs. Dans ZFS, on peut virtuellement créer autant d’instantanés que l’on souhaite, puisque leur nombre maximal est égal à celui du nombre maximal de fichiers dans un volume, soit 2⁴⁸. Ce fonctionnement peut être automatisé pour que ZFS crée de lui-même des snapshots ou des clones (les premiers sont en lecture seule, les seconds permettent l’écriture) à intervalles réguliers, avec suppression ou non des anciens.
ZFS a ses solutions RAID bien à lui
La gestion des modes RAID dans ZFS est particulière. Plutôt que d’employer des solutions matérielles, il est conseillé de laisser faire ZFS, qui a son propre fonctionnement logiciel.
ZFS peut utiliser les modes RAID classiques, mais on leur préfèrera RAID-Z, spécifique au système de fichiers. Semblable au RAID-5 (même schéma de parité), il tolère donc la panne d’un disque. Il dispose cependant d’un gros avantage sur son modèle : il permet d’éviter les trous d’écriture.
- | siteStockage : c’est quoi un RAID et comment ça marche
- | Stockage : on grimpe d’un cran avec les RAID 6, 10, 50, 60…
Dans une configuration RAID-Z, ZFS se sert de la copie sur écriture pour ajouter les nouvelles données aux côtés des anciennes, sans réécrire sur ces dernières. En outre, tout fichier, quelle que soit sa taille, a sa propre bande (full-strip, entrelacement total). En configuration RAID-Z, la séquence habituelle lecture-modification-écriture n’est pas utile. En cas de reconstruction, ZFS parcourt les métadonnées, une opération rendue possible car système de fichiers et matrice RAID se confondent, ZFS ayant une vue intégrée des vues logique et physique. Chaque bloc de données est alors validé par sa somme de contrôle.
Les checksums sont également utilisées pour effectuer de la « guérison automatique », quand des corruptions silencieuses de données se sont installées. Pour y remédier, ZFS compare chaque bloc lu à sa somme de contrôle. Si la réponse n’est pas bonne, le système de fichiers va lire les informations de parité correspondantes et répare les données. Une fois corrigées, elles sont envoyées au processus qui en a fait la demande.
Pour reprendre la commande donnée plus haut en exemple, raidz2 renvoie simplement à la configuration RAID-Z2, équivalente au RAID 6. Il existe une variante Z3, tolérant la panne de trois disques au sein d’une configuration RAID. RAID-Z supporte également le striping simple (RAID 0) et le mirroring (RAID 1).
À noter qu’une autre capacité est en cours de déploiement, après des années de travail : Raid-Z Expansion. Particulièrement attendue, elle permet d’ajouter un disque à une configuration RAID-Z déjà en place, opération impossible actuellement. Cette technologie fonctionne avec les configurations Z1, Z2 et Z3. La fonction est très récente. Elle est par exemple présente dans QuTS hero 5.1 (QNAP), sorti il y a un mois.
Pour les personnes comprenant bien l’anglais (ou sachant lire très rapidement les sous-titres sur YouTube), la chaine Lawrence Systems avait publié plusieurs vidéos sur ZFS, dont une portant sur la configuration des pools de stockage ZFS et de ses modes RAID-Z :
Des fonctions multiples et des caches à gogo
[…]
Source et suite : nextinpact.com