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 aussi 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, et son utilisation est 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).

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 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 ses information, 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 des volumes

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

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.

Création du regroupement

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