Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Le ZFS et la nouvelle génération de systèmes de fichiers pour système UNIX

Par Anaïde TCHATALIAN Publié le 27/09/2017 à 22:33:18 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Lorsque nous stockons des données (sur un disque dur, un CD-ROM, une mémoire flash, …), notre fichier s’écrit sur une partition formatée à l’aide d’un système de fichiers. Celui-ci régule la façon dont nos fichiers sont stockés.

Dans l’univers de Windows, les trois grands systèmes de fichiers sont le FAT32 (format étant le plus universel, mais souffrant de limitations…), le NTFS et le ExFAT. Ces trois systèmes de fichiers ont été écrits par Microsoft afin de répondre à différents besoins.

Néanmoins, de très nombreuses évolutions ont également eu lieu dans le domaine des systèmes de fichiers sur d’autres systèmes d’exploitation, et sous Linux et UNIX. Nous commençons à pouvoir approcher de plus en plus une nouvelle génération qui tend à résoudre des problématiques présentes sur les précédents systèmes de fichiers, mais aussi à implémenter des fonctionnalités au plus proche du système de fichier lui-même que dans son exploitation par des logiciels tiers.

Résumé des évolutions du côté de Microsoft (non-UNIX)

Le FAT32 est une évolution du FAT16 afin de répondre aux besoins des utilisateurs en 1996. Il souffre aujourd’hui de sa limitation en terme de fichiers, ne pouvant supporter le stockage d’un fichier d’une certaine taille (4 gigaoctets dans une implémentation idéale, 2 gigaoctets dans de nombreuses implémentations).

Le NTFS est un système de fichiers journalisés, ce qui le rend plus sûr face aux pannes. Il permet de dépasser les limites du FAT32, bien que son existence remonte à 1993 et qu’il soit issu du développement du HPFS pour OS/2 (conjointement développé entre Microsoft et IBM) remontant aux années 80. Il est aujourd’hui le système de fichiers utilisé par défaut par les systèmes Windows, et il a connu différentes versions lui apportant de nouvelles fonctionnalités, comme par exemple depuis Windows Vista, les liens symboliques.

Enfin, l’ExFAT est un système de fichiers apparu en 2006. Il vise à dépasser les limitations du FAT32 afin de pouvoir stocker des fichiers volumineux, tout en évitant la complexité du NTFS. Il n’est, dans son implémentation standard, pas journalisé.

Microsoft travaille actuellement sur le ReFS pour ses usages serveurs afin de tenir tête à la nouvelle génération apparaissant sous les systèmes UNIX.

Du côté d’UNIX et de Linux

En parallèle, les systèmes UNIX ou inspiré d’UNIX évoluent également au niveau de leurs systèmes de fichiers. De plus, du fait de la pluralité de ses descendants pour UNIX et des principes de l’open-source pour Linux, de nombreux systèmes de fichiers différents apparaissent.

Sous UNIX, le principal système de fichier est l’UFS (pour Unix File System). Parfois, il est également appelé FFS pour « Berkeley/BSD Fast File System » dans ses implémentations BSD.

De la même manière que le FAT et le NTFS chez Microsoft, l’UFS aura subi de nombreuses évolutions. Si sous UNIX tout est fichier, on comprend que son existence remonte à 1969 et à une version expérimental d’UNIX. Il évoluera au côté d’UNIX lui-même, sa version pour Unix 6 naitra en 1972 appelé aussi « V6FS », suivi d’une V7FS en 1979, puis le FFS de l’implémentation BSD n’arrivera qu’en 1983.

Aujourd’hui encore, c’est un système de fichiers utilisé sous les systèmes *BSD modernes, bien que certains commencent à évoluer pour une nouvelle génération.

Une exception dans les descendants d’UNIX et BSD est le cas des systèmes Apple. En effet, Mac OS X, bien qu’étant né du code de FreeBSD et de NeXTSTEP, a utilisé surtout le système de fichiers HFS développé par Apple, ainsi que le système de fichier HFS+.

Le HFS+ étant comme le NTFS un système de fichier journalisé, il est également davantage résistant aux pannes matérielles que les systèmes de fichiers standards.

Enfin, du côté de Linux, un système de fichier fortement inspiré de l’UFS est apparu : l’« ext » en 1992. Développé à l’origine par le développeur français Rémy Card, ce dernier a connu différentes versions : l’ext2 en 1993 (s’inspirant de l’implémentation de l’UFS des BSD), l’ext3 en 2001 (apportant la journalisation, mettant ce système en concurrence avec le NTFS et le HFS+) puis enfin l’ext4 en 2006 (amenant diverses améliorations visant à l’origine à améliorer l’ext3).

De nouveaux systèmes de fichiers

Néanmoins, d’autres systèmes sont apparus dans le but parfois de surpasser les systèmes existants ou de se concentrer sur un usage précis (optimisé spécialement pour les disques SSD, les cartes SD, les mémoires flash de nos smartphones, …).

On peut citer le cas du ReiserFS qui, en 2001, voulait prétendre à remplacer l’ext2 et l’ext3, avec des performances parfois meilleures. Son évolution, le Reiser4 aurait également dû améliorer les performances et la fiabilité de ce système de fichiers, jusqu’à ce que le lead développeur Hans Reiser soit inculpé du meurtre de sa femme en 2008. Bien que le système de fichiers soit maintenu, son futur est depuis très incertain et ne prévoit pas d’être prochainement rattaché au noyau Linux.

On trouve occasionnellement des systèmes de fichiers provenant d’anciens dérivés de UNIX, tel que le XFS datant de 1993 pour le système IRIX, du fait de portabilités vers Linux, et de caractéristiques intéressantes, ainsi que de possibles évolutions.

Trois grands prétendants pour révolutionner le système de fichier sous UNIX

Sous UNIX, les systèmes de fichiers ont souvent été fortement liés au système lui-même et ont répondu à différents standards permettant de définir des points de montages à l’aide du fichier /etc/fstab, …

Cependant, de nouveaux systèmes de fichiers tendent à rendre du contrôle au système de fichier lui-même, plus qu’au système d’exploitation l’utilisant, et sans passer par un intermédiaire comme le LVM en se l’appropriant également.

De plus, ces derniers cherchent à répondre aux limitations des systèmes de fichiers journalisés, tels que par l’exploitation d’une fonctionnalité « Copy-on-Write », permettant de fournir la même sécurité pour les données stockées que les systèmes journalisés, tout en optimisant l’écriture sur le disque. On trouve trois principaux systèmes, dont deux cherchant à s’imposer dans le monde moderne de Linux et UNIX :

  • Le ZFS, pour Zettabyte File System, développé à l’origine par Sun Microsystem pour les systèmes d’exploitation Solaris, et dont les débuts du développement remontent à 2001.

  • HAMMER/HAMMER2, système de fichiers spécialement développé pour DragonFlyBSD depuis 2008, mais dont le code rend difficile son intégration hors de DragonFlyBSD.

  • Le Btrfs, développé à l’origine par Oracle en 2007.

Le ZFS, différentes implémentations, une longue route jusqu’à Linux

Le ZFS se caractérise par le montage d’une « zpool » (pool de ressources disques). On lui alloue des devices, et ce dernier les exploite de façon transparente, autorisant la création de point de montage basé sur sa zpool.

ZFS a, comme de nombreux autres, évolué à travers différentes versions. Il y a eu 6 différentes versions du système de fichier en lui-même, mais plusieurs dizaines de versions de sa « zpool » qui représente la plupart des implémentations de nouveautés pour ce format.

Différents portages des versions propriétaires ont ainsi existé au fil du temps (FreeBSD commence à supporter un portage de ZFS dans sa version FreeBSD-7.0). Les développeurs autour de Linux, pour tenter de contourner les incompatibilités légales du code du ZFS vis-à-vis de sa licence GPL, ont effectué un portage au travers de FUSE (fonctionnant donc au niveau « userland » et non au niveau du noyau, souffrant en conséquent de gros problèmes de performances) en 2006.

Cependant, les versions libres utilisés par FreeBSD depuis la version 9.0 (versions également nommés OpenZFS) dérivent d’une version précise de ZFS et non pas de la dernière. En effet, l’histoire se répète du côté des *BSD. Leur implémentation de ZFS profitera d’un passage éphémère des sources sous licence libre, avant d’être refermé de nouveau sous une licence propriétaire. Ainsi la dernière version « libre » du système de fichiers est la version 5, et la dernière version libre de la « zpool » est la version 28 (alors que la zpool a continué à évoluer sous licence propriétaire et en est à la version 37).

Cependant, afin de continuer d’évoluer tout en ne rentrant pas en conflit avec les versions propriétaires (et donc en créant également une version différente de la 28 officielle), OpenZFS a attribué à sa zpool la version 5000, considérant que ce nombre ne serait probablement jamais atteint par les versions propriétaires, tout en mettant en place une nouvelle fonctionnalité « feature flags ». Cela permet à toute les mises à jours futurs de rester sur cette version 5000, mais de pouvoir retourner l’ensemble des fonctionnalités supportés par la zpool. Ainsi, si de nouvelles fonctionnalités voient le jour, elles seront implémentées au sein de la version 5000, et seront annoncées par un flag.

OpenZFS ne voit cependant le jour qu’en 2013. Il permet cependant de donner naissance à une version stable d’un « ZFS on Linux » présent au niveau Kernel, et profitant donc de bonnes performances.

Il faut cependant attendre Ubuntu 16.04 pour voir une implémentation native intégrée d’office en module noyau à une distribution Linux grand publique.

En effet, cette implémentation soulève des questions légales autour des licences GPL (pour le noyau Linux) et CDDL (pour la version libre de ZFS). Et bien que Canonical ait avancé et que cela rentrait dans un cadre légal, des entités, comme la Software Freedom Conservancy ( https://sfconservancy.org ), considèrent au contraire que ceci est une violation de la GPL et de la CDDL.

Néanmoins, cette avancée étant salutaire à Linux, personne ne cherche spécialement à freiner cette avancée, bien que beaucoup voudrait qu'Oracle (qui dispose désormais des droits sur le ZFS initialement développé par Sun Microsystems) change la licence du ZFS vers une licence ouvertement compatible GPL.

Le ZFS se manipule ainsi que sa zpool avec des outils dédiés. Il faut fournir du matériel de stockages (des disques durs, …) à la pool pour la créer, puis ensuite, attacher des sous-volumes à cette pool. Il est également possible via ces outils d’effectuer des snapshots ou différentes actions comme définir les points de montages de ces volumes, …

Le Btrfs, favoris pour Linux et sous licence GPL

Oracle est également derrière un autre format de fichier, le Btrfs. Cependant, ce dernier est distribué sous licence GPL, le rendant compatible avec une implémentation au niveau du noyau de Linux. Ce dernier continue d’évoluer fortement, et en est aujourd’hui à sa version 4.13, sortie en Septembre 2017.

Comme ZFS, Btrfs profite du Copy-on-write (au lieu de la journalisation), intègre directement à son niveau un support RAID logiciel pour utiliser plusieurs disques ensembles, des découpages en sous-volume et la gestion de snapshots.

Cependant, comparé à ZFS, le Btrfs n’implémente pas tout au travers de sa pool et se combine avec des pratiques déjà connu sous Linux, tel que le fichier /etc/fstab, bien qu’il soit également nécessaire pour certains usages d’utiliser une commande dédié « btrfs » de la même façon qu’avec le ZFS, pour faire par exemple des snapshots, audité le système de fichier et recueillir diverses informations sur son état, faire des RAIDs logicielles, …

HAMMER, un cas à part…

HAMMER rentre dans la catégorie de ces systèmes de nouvelles générations. Il a, cependant, un fonctionnement bien à lui. Si ses performances, pour des usages base de données SQL, sont dites « phénoménales » et que sa déduplication est très peu gourmande en RAM, à l’inverse de celle de ZFS, il souffre de différentes limitations dans sa version 1 et sa version 2 n’est pas considéré comme stabilisée à l’heure actuelle. Enfin, et c’est son plus gros défaut, il n’est pas considéré comme portable. Malgré la très permissive licence BSD, HAMMER se retrouve non-portable techniquement, du fait de sa spécificitée le liant à DragonflyBSD, au point même que FreeBSD (qui est l’origine de DragonFlyBSD) en est arrivé à cette conclusion en réfléchissant à un portage pour leur système.

Si HAMMER n’arrive donc pas à tenir tête aujourd’hui à ZFS ou Btrfs, en terme de popularité (partant de la difficulté initiale de n’exister que pour DragonFlyBSD qui est très loin d’être le plus utilisé des systèmes d’exploitation *BSD). Il se pourrait que sa version 2 arrive à mériter sa place à l’avenir (peut-être en devenant alors un argument pour faire basculer des entreprises sous DragonFlyBSD).

Exemple pratique : Comment utiliser le système de fichier ZFS sous Ubuntu

Nous allons, afin de montrer en pratique l’utilisation d’un de ces systèmes de fichier, présenter l’utilisation de ZFS sous Ubuntu 16.04 et les versions ultérieures :

Pré-requis : Disposer une machine ou d’une VM sous Ubuntu 16.04 (ou supérieure), avec au moins un disque dur vide en plus de celui où est installé Ubuntu (vous pouvez sous une machine virtuelle simplement ajouter un nouveau disque dur, sans l’avoir formater ni utilisé par exemple).

Si vous ne pouvez absolument pas utiliser de disque dur supplémentaire, il reste possible d’appliquer les commandes qui suivront avec un fichier vide de taille préalloué généré à l’aide de la commande « dd », en pointant sur ce fichier au lieu de « /dev/sdb ». Ceci n’a néanmoins d’intérêt que dans l’objectif d’expérimenter le ZFS plus que de réellement l’utiliser. Tout d’abord, il est nécessaire d’installer des outils primordiaux à la manipulation du ZFS :

Sous Ubuntu 16.04 et 16.10 :

sudo apt-get install zfs

Sous Ubuntu 17.04 et + :

sudo apt-get install zfsutils

Ensuite, il va falloir générer la zpool. Nous allons partir du principe que votre Ubuntu est installé sur le disque /dev/sda (par exemple sur la partition /dev/sda1) et que le disque que nous voulons utiliser dans la zpool est /dev/sdb :

sudo zpool create ma-pool /dev/sdb

Si le message « /dev/sdb does not contain an EFI label but it may contain partition information in the MBR. » apparait, vous devez forcer la création de la zpool à l’aide du flag -f, ainsi :

sudo zpool create ma-pool /dev/sdb -f

La zpool sera alors correctement créée.

Notez qu’il est possible également de combiner différents disques durs ainsi :

sudo zpool create ma-pool /dev/sdb /dev/sdc /dev/sdd

Ils seront par défaut unifiés (dit « Striped ») comme un RAID0. Notez cependant qu’ils peuvent être combiné de façon similaire à différents types de RAID, par exemple en miroir (comme un RAID1) :

sudo zpool create ma-pool mirror /dev/sdb /dev/sdc

Il existe également d’autres variantes, comme les « RAIDZ » qui représentent des utilisations similaires aux RAID5, 6, 50 et 60.

Une fois la zpool créée, vous remarquerez qu’elle a créé un dossier à son nom dans la racine de votre système : /ma-pool. Vous pouvez cependant décider de la déplacer dans un endroit plus approprié. En effet, /ma-pool n’est qu’un point de montage par défaut. Vous pouvez choisir le vôtre avec une commande. Par exemple, si vous désirez faire apparaitre « ma-pool » dans /mnt, vous devrez faire :

sudo zfs set mountpoint=/mnt/ma-pool ma-pool

Le dossier /ma-pool disparaitra alors et le dossier /mnt/ma-pool prendra sa place.

Maintenant, s’il est possible de directement stocker des choses dans la pool, il est surtout possible d’y concevoir des « sous-volumes », dit « zvol ». Nous pouvons les utiliser de façon similaire à différentes partitions. Vous pouvez, par exemple, créer un sous-volume au sein de votre zpool de cette façon :

sudo zfs create ma-pool/mon-zvol

Cette partition sera, par défaut, automatiquement montée dans un sous-dossier dans le point de montage de sa zpool parente. Ainsi si vous avez déplacé votre zpool dans /mnt, votre sous-volume sera monté sur /mnt/ma-pool/mon-zvol .

Maintenant, vous vous demandez sûrement « mais quel taille fait ma partition ? Et si j’en créais plusieurs ? ». La réponse est simple : l’espace disque en l’état est par défaut « élastique » à l’espace disque totale de votre zpool. Ainsi, si la zpool utilise un disque dur de 1 Tb, vous pouvez considérer que vos partitions cumulées peuvent exploiter 1 Tb d’espace disque. Cependant, il est possible de limiter ce fonctionnement à l’aide de quotas et de réservations d’espace disque avec les commandes suivantes :

sudo zfs set quota=512mb ma-pool/mon-zvol
sudo zfs set reservation=512mb ma-pool/mon-zvol

La première commande limitera votre sous-volume à une contenance maximale de 512MB, tandis que la seconde réservera ces mêmes 512MB à votre sous-volume (vous permettant ainsi de prévoir et éviter la situation où il ne serait pas possible d’exploiter l’ensemble du quota de votre sous-volume, si une partie de la capacité totale de votre zpool venait à être exploité par d’autres sous-volumes par exemple.)

Bien entendu, le point de montage de votre sous-volume reste modifiable, et il n’est pas obligatoire qu’un sous-volume soit monté à l’intérieur du point de montage de sa zpool. Nous pourrions ainsi faire en sorte d’avoir un sous-volume ma-pool/docker et faire que ce sous-volume soit monté sur /var/lib/docker d’une façon proche de ce qui est expliqué dans une partie de cette page du guide de Docker pour son utilisation sur une partition ZFS :

https://docs.docker.com/engine/userguide/storagedriver/zfs-driver/#configure-docker-with-the-zfs-storage-driver

Notez que vous pouvez à tout moment consulter l’état général de vos zpools et zvols avec la commande suivante :

sudo zfs list

Par exemple, après ces différentes étapes, elle pourrait ressembler à ceci :

Enfin, il est possible d’activer de nombreuses autres fonctionnalités propre à ce système de fichier à l’aide de commandes pour activer la déduplication ou la compression, effectuer des snapshots, … Vous pouvez vous renseigner davantage sur ces différentes commandes sur la page suivante :

https://wiki.ubuntu.com/Kernel/Reference/ZFS

Conclusion

Comme nous venons de le voir dans l’exemple de ZFS, de nouvelles fonctionnalités sont présentes et très proche de l’implémentation même du système de fichier. Il n’y a plus besoin de logiciels tiers pour effectuer des snapshots de données. Il est possible d’avoir des sous-volumes divisés avec différents points de montage, mais un espace disque partagé et de reproduire des « RAID logiciel » directement géré sans autre couche par la « pool » du système de fichier.

Bien entendu, il y a des différences entre ce que peut faire ZFS, Btrfs et HAMMER. Et chacun a ses particularités propres. Nous remarquons cependant qu’il y a de réels avancés, et avec la mise en avant du ZFS par Canonical, en plus du support du Btrfs, nous pouvons nous attendre à voir ces systèmes de fichiers se répandre à l’avenir et prendre la place des « ext2/3/4 » dans le monde des systèmes UNIX.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels