Ceci est une ancienne révision du document !
ZFS
ZFS est un système de fichiers open source conçu par Sun Microsystem (société rachetée par Oracle) en 2004 pour la gestion de "très haute capacité de stockage".
C'est un système de fichiers moderne implémentant des fonctionnalités avancées :
- Il est compatible UNIX (permissions POSIX), ce qui en fait un bon candidat pour une infrastructure Linux (et un concurrent à Btrfs).
- Il implémente des fonctionnalités de chiffrement et de compression.
- Il fournit des fonctionnalités d'instantanés (snapshots), permettant de restaurer le stockage à un état antérieur, en nécessitant un minimum de ressources.
- À la place des traditionnelles partitions, il permet d'agréger de multiples supports de stockage sur une infrastructure, à la manière du RAID , mais en offrant davantage de souplesse que les autres solutions, car il repose sur des niveaux d'abstractions supplémentaires (voir Utilisation).
Il est cependant particulièrement gourmand en mémoire vive (son cache est stocké en RAM), et son utilisation est particulièrement complexe.
Il est principalement utilisé par des administrateurs système et devops pour faciliter la gestion de grappes de serveurs (clusters) en data centers, et éviter des coupures de service dans le cadre de services d'hébergement cloud (ou autre traitement de big data).
ZFS permet de mettre en place une redondance et/ou concaténation proche du RAID 51), en apportant les notions de vdev (virtual device), de pools et de datasets, qui offrent une grande souplesse, au prix d'une importante complexité (abstractions à saisir, voir Utilisation).
Installation
Contrairement à d'autres systèmes de fichiers comme ext4 ou Btrfs, le support de ZFS n'est pas inclus dans le noyau Linux. Un conflit de licence en empêche en effet son intégration native.
Ce support peut cependant être apporté sur n'importe quelle version et variante d'Ubuntu par l'installation du paquet zfs-dkms, qui permet donc d'accéder en lecture et écriture aux pools ZFS.
Si besoin, le paquet zfsutils-linux fournit des outils supplémentaires pour la gestion des pools et des vdevs.
Il est aussi possible d'installer certaines versions d'Ubuntu directement sur une structure ZFS. Cette méthode est parfois proposée par l'installateur d'Ubuntu :
Lors de l'installation d'Ubuntu
Ubuntu propose de s'installer sur une structure ZFS pour certaines de ses versions :
- de façon expérimentale en version Focal 20.04
- en version Noble 24.04
- incertain en version Resolute 26.04
Pour créer une infrastructure ZFS lors de l'installation d'Ubuntu (ici Jammy 22.04), à l'étape du choix du Type d'installation, choisir Effacer le disque et installer Ubuntu et cliquer sur le bouton Fonctions avancées…. Sur la fenêtre ainsi ouverte sélectionner Effacer le disque et utiliser ZFS. Choisir éventuellement de Chiffrer la nouvelle installation, puis OK → Continuer.
Dans le cas d'une installation chiffrée, un formulaire permet d'entrer sa clé de chiffrement (le mot de passe qu'il faudra entrer à l'ouverture de chaque session) et sa clé de récupération (recovery key). Vous devriez être en mesure de vous souvenir du mot de passe, mais il est impératif de noter ces informations, et particulièrement la clé, idéalement au moyen d'un gestionnaire de mots de passe.
Cliquer sur l'œil à droite d'un champs protégé permet de s'assurer des informations entrées.
- La seconde partition de 2 Go est formatée en linux-swap. En effet, ZFS ne gérerait pas correctement un fichier swap.
- La troisième "partition" est en fait un vdev de 2 Go utilisé par le pool boot, qui contient les fichiers de démarrage du système (équivalent au répertoire
/boot). - La quatrième "partition" est aussi vdev ZFS, cette fois utilisé par un pool root, qui contient le système d'exploitation et les données.
Utilisation
vdevs, zpools et datasets
- Les espaces de stockages ZFS sont organisés en pools équivalent à une partition, ou un volume utilisable pour l'utilisateur. Il s'agit de l'espace de stockage visible dans un gestionnaire de fichiers. Les pools sont des agrégats d'un ou plusieurs supports ou clusters de stockage, appelés vdevs.
- Les vdevs (pour virtual devices) correspondent à une partition pour le support matériel – ou à de la mémoire vive. Ils sont à disposition des pools.
Ceci permet aux pools d'offrir une plus grande souplesse que les partitions traditionnelles. Les principales différences sont qu'un même espace "physique" (vdev) peut être utilisé pour un pool ou un autre en fonction des besoins de ceux-ci, et qu'un pool peut s'étendre sur un ou plusieurs supports de stockage physiques (vdev) différents.
ZFS gère aussi un vdev cache de manière plus ou moins transparente pour l'utilisateur (si la RAM est saturée). Il existe aussi un vdev boot si le système lui-même est installé sur un pool ZFS.
- De plus, les datasets permettent de subdiviser chaque pool en sous-volumes, permettant de définir différentes politiques pour les snapshots, les sauvegardes, les permissions, etc.
Ils peuvent être considérés comme des répertoires qui contiennent différents types de données, et amènent à différentes manières de gérer le stockage.
On rencontre dans le cas contraire un message d'erreur de ce type :
Requesting to save current system state. ERROR couldn't save system state: Minimum free space to take a snapshot and preserve ZFS performance is 20%. Free space on pool "rpool" is 20%.
Création de vdevs
Avec GParted
GParted ne gère pas les vdevs ZFS, mais permet de créer des partitions non formatées qu'on pourra ensuite utiliser comme telles.
Création de pools
Les types de pool disponibles sont les suivants :
- pas de calcul de parité (pas de redondance)
mirror: deux partitions en miroir.raidz: un support de parité (supporte un support crashé), on perd un stockage d'espace.raidz2: deux supports de parité (supporte deux supports crashés), on perd deux stockages d'espace.raidz3: trois supports de parité (supporte trois supports crashés), on perd trois stockages d'espace.
On peut les utiliser en argument de zpool create pour ajouter de la parité (le choix par défaut, sans paramètre, est l'absence de parité).
Pour créer un pool monStockage qui s'étend sur les vdevs /dev/sdb1 et /dev/sdc12) :
zpool create monStockage /dev/sdb1 /dev/sdc1
On peut aussi choisir de chiffrer le pool avec l'option -O encryption=on. Le mot de passe doit être d'au moins 8 caractères.
Compression
On peut activer la compression avec la sous-commande zfs set :
sudo zfs set compression=on monStockage
La commande zfs get permet d'obtenir son état :
sudo zfs get compression monStockage
Voir aussi
- GitHub OpenZFS
- ZFS sur la page Système de fichiers
- (en) Documentation OpenZFS
- Présentation vidéo en français






