Ceci est une ancienne révision du document !


Logo de OpenZFS

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, sous forme de volumes (agrégats de plusieurs supports ou clusters de stockage) organisés par pools (descriptions de ces volumes, avec leurs caractéristiques et leurs snapshots).

Il est cependant particulièrement gourmand en mémoire vive (son cache en particulier 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 de type RAID1), ainsi que des fonctionnalités de snapshots, en apportant les notions de volumes de stockage (qui s'étendent sur un pool d'un ou plusieurs supports physiques), et de dataset, qui offrent une grande souplesse, au prix d'une importante complexité (abstractions à saisir).

Pour que les fonctionnalités de ZFS soient intéressantes (comparées à celles de Btrfs par ex.), il est nécessaire de disposer d'un certains nombre de supports de stockage, idéalement de performances similaires, d'avoir aussi beaucoup de RAM, de solides connaissances en informatique, et du temps.

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 volumes ZFS.

Si besoin, le paquet zfsutils-linux fournit des outils supplémentaires pour la gestion des pools et des volumes.

Vous trouverez aussi des informations en anglais concernant l'installation du support de ZFS sur Ubuntu sur le site officiel d'OpenZFS.

Il est aussi possible d'installer certaines versions d'Ubuntu directement sur un volume 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 un volume ZFS pour certaines de ses versions :

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 OKContinuer.

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.

Attention au fait qu'à cette étape il arrive que le verrouillage numérique du clavier ne soit pas activé.

Cliquer sur l'œil à droite d'un champs protégé permet de s'assurer des informations entrées.

  • La première partition de 512 Mo en FAT32 contient la structure EFI ainsi que GRUB.
  • 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 pool boot ZFS de 2 Go, qui contient les fichiers de démarrage du système (équivalent au répertoire /boot).
  • La quatrième "partition" est un pool root ZFS, dont le volume contient le système d'exploitation et les données.

Utilisation

Les pools ZFS gèrent les espaces de stockage en volumes qui offrent une plus grande souplesse que les partitions traditionnelles. Les principales différences sont qu'un même espace physique peut être utilisé pour un volume ou un autre en fonction des besoins de ceux-ci, et qu'un volume peut s'étendre sur plusieurs supports de stockage physiques différents.

Pour fonctionner correctement, un volume doit conserver au minimum 20% d'espace libre.

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 volumes

Voir la documentation officielle en français.
FIXME La suite de ce chapitre n'a pas encore été corrigée.

Avec GParted

Lancer GParted pour faire les créations des partitions. Elles seront de tailles identiques, de préférence sur des disques différents pouvant être externes. Le type de "système de fichiers" à retenir sera "non formaté" car l'exécution sera plus rapide. Mais ce n'est pas grave de mettre un autre type. Il y aura juste à accepter son écrasement au moment de la création.

Les utilisations principales seront lessuivantes

  • mirror. Si seulement deux partitions. (Le cas de ce chapitre).
  • raidz-1. Si trois partitions ou plus et on veut dupliquer en un seul exemplaire.
  • raidz-2. Si quatre partitions ou plus et on veut dupliquer en deux exemplaires.
  • raidz-3. Si cinq partitions ou plus et on veut dupliquer en trois exemplaires.

En ligne de commande

Fabrication en mode sécurisé avec par exemple cette commande :

sudo zpool create -f pool-test mirror  /dev/sda16 /dev/sda17
  • Il faut laisser l'option -f si les partitions avaient été formatées sinon elle est inutile.
  • Il faut supprimer l'option mirror si on veut du non sécurisé.

Il ne reste plus qu'à l'utiliser, par exemple :

sudo mkdir  /pool-test/MyDATA
sudo cp -Rv /DATA/R*/*  /pool-test/MyDATA

Et suive le taux de remplissage avec la commande standard df -h ou la commande zpool :

zpool list
NAME        SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
pool-test    61G  36,8G  24,2G        -         -     0%    60%  1.00x    ONLINE  -
 
df -h | grep pool
pool-test           60G     37G   23G  63% /pool-test

Si l'ordinateur s'arrête, il faut remonter le pool avec cette commande :

sudo zpool import pool-test

Un autre exemple compatible avec les applications snap

sudo zpool create -f -m   /media/ZFS -o feature@lz4_compress=enabled MesDonneesPersonnelles /dev/disk/by-label/ZFS
df -htzfs
Sys. de fichiers       Taille Utilisé Dispo Uti% Monté sur
MesDonneesPersonnelles   4,4G    128K  4,4G   1% /media/ZFS

Pour plus de détails voir (en) https://ubuntu.com/tutorials/setup-zfs-storage-pool#1-overview.

Création d'un pool

installons le logiciel manquant.

sudo apt install zfsutils-linux

La commande est, par exemple, la suivante :

zpool create MesDonnees mirror /dev/sdb8 /dev/sdc11

Puis fabriquons l'enveloppe qui convient.

sudo zpool create -f -m $HOME/data -O encryption=on -O keyformat=passphrase -O keylocation=prompt -o feature@lz4_compress=enabled MesDonneesPersonnelles mirror /dev/sdb8 /dev/sdc11

Il est exigé que la taille du mot de passe soit au minima de 8 caractères quelconques sans aucune autre contrainte.

Ne pas oublier que la perte de ce mot de passe entraine l'impossibilité définitive d'accéder aux données.

Activation de la compression

On va constater qu'actuellement, il est nécessaire, si on veut en profiter, d'activer la compression.

sudo zfs get compression
NAME                    PROPERTY     VALUE           SOURCE
MesDonneesPersonnelles  compression  off             default
 
sudo zfs set compression=on MesDonneesPersonnelles
 
sudo zfs get compression
NAME                    PROPERTY     VALUE           SOURCE
MesDonneesPersonnelles  compression  on              local

Voir aussi

Alternative


1)
RAID sur Wikipedia