| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| zfs [Le 14/02/2026, 04:46] – [Installation] TODO à vérifier krodelabestiole | zfs [Le 01/04/2026, 21:42] (Version actuelle) – [Alternative] geole |
|---|
| {{tag>installation administration système partitions cloud brouillon}} | {{tag>installation administration système partitions cloud}} |
| |
| {{ :logo:openzfs.png?100|Logo de OpenZFS}} | {{ :logo:openzfs.png?100|Logo de OpenZFS}} |
| ====== ZFS ====== | ====== ZFS ====== |
| |
| **[[wpfr>ZFS]]** est un [[:système de fichiers]] //[[wpfr>open source]]// pour la gestion de "très haute capacité de stockage". | **[[wpfr>ZFS]]** est un [[:système de fichiers]] //[[wpfr>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 : | C'est un système de fichiers moderne implémentant des fonctionnalités avancées : |
| * Il permet d'agréger de multiples supports de stockage sur une infrastructure, à la manière du [[:RAID]], sous forme de //pool// (agrégat de plusieurs supports ou //clusters// de stockage). | |
| * Il fournit des fonctionnalités d'instantannés (//snapshots//), permettant de restaurer le stockage à un état antérieur, en nécessitant un minimum de ressources. | |
| * Il est compatible [[wpfr>UNIX]] ([[:permissions]] [[wpfr>POSIX]]), ce qui en fait un bon candidat pour une infrastructure Linux (et un concurrent à [[:Btrfs]]). | * Il est compatible [[wpfr>UNIX]] ([[:permissions]] [[wpfr>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, et son utilisation est relativement complexe. | 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 //[[wpfr>devops]]// pour faciliter la gestion de grappes de serveurs (//clusters//) en //[[wpfr>Centre_de_données|data centers]]//, et éviter des coupures de service dans le cadre de services d'hébergement //[[:cloud]]// (ou autre traitement de //[[wpfr>big data]]//). | Il est principalement utilisé par des [[:administration|administrateurs]] système et //[[wpfr>devops]]// pour faciliter la gestion de grappes de serveurs (//clusters//) en //[[wpfr>Centre_de_données|data centers]]//, et éviter des coupures de service dans le cadre de services d'hébergement //[[:cloud]]// (ou autre traitement de //[[wpfr>big data]]//). |
| | |
| | **[[:ZFS]]** permet de mettre en place une redondance et/ou concaténation proche du [[:RAID|RAID 5]](([[wpfr>RAID_(informatique)#RAID-Z|RAID-Z]] sur Wikipedia)), 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]]//). |
| | |
| | <note warning> |
| | 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 certain nombre de supports de stockage, idéalement de performances similaires, d'être prêt à sacrifier entre 20% et la moitié de leur capacité, d'avoir aussi beaucoup de RAM disponible, de solides connaissances en informatique, et du temps. |
| | </note> |
| |
| ===== Installation ===== | ===== Installation ===== |
| Contrairement à d'autres [[:système de fichiers|systèmes de fichiers]] comme **[[:ext4]]** ou **[[:Btrfs]]**, le support de **ZFS** n'est pas inclus dans le [[:kernel|noyau Linux]]. Un conflit de licence en empêche en effet son intégration native. | Contrairement à d'autres [[:système de fichiers|systèmes de fichiers]] comme **[[:ext4]]** ou **[[:Btrfs]]**, le support de **ZFS** n'est pas inclus dans le [[:kernel|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'[[:deb#installer un paquet deb|installation du paquet]] ''[[apt>zfs-dkms]]'', qui permet donc d'accéder en lecture et écriture aux partitions formatées en **ZFS**. | Ce support peut cependant être apporté sur n'importe quelle version et [[:variante]] d'Ubuntu par l'[[:deb#installer un paquet deb|installation du paquet]] ''[[apt>zfs-dkms]]'', qui permet donc d'accéder en lecture et écriture aux //pools// ZFS. |
| |
| Si besoin, le [[:deb|paquet]] ''[[apt>zfsutils-linux]]'' fournit des outils supplémentaires pour la gestion des [[:partitions]] et des volumes (//pools//). | Si besoin, le [[:deb|paquet]] ''[[apt>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 partition **ZFS**. Cette option est parfois donnée par l'installateur d'Ubuntu : | <note> |
| | Vous trouverez aussi des informations en anglais concernant l'installation du support de **ZFS** sur Ubuntu sur le [[https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/index.html#installation|site officiel]] d'**OpenZFS**. |
| | </note> |
| | |
| | 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 ==== | ==== Lors de l'installation d'Ubuntu ==== |
| |
| Ubuntu propose propose de s'installer sur [[:partitions|partition]] **ZFS** pour certaines de ses [[:versions]] : | Ubuntu propose de s'installer sur une structure **ZFS** pour certaines de ses [[:versions]] : |
| * de façon expérimentale en version [[:focal|Focal 20.04]] | * de façon expérimentale en version [[:focal|Focal 20.04]] |
| * en version [[:jammy|Jammy 22.04.2]]\\ {{:zfs:zfs.png?200|Capture d'un écran d'installation d'Ubuntu.}} | * en version [[:jammy|Jammy 22.04.2]]\\ {{:zfs:zfs.png?500|Capture d'un écran d'installation d'Ubuntu.}} |
| * en version 21.10 voir [[https://www.tremplin-numerique.org/comment-installer-et-configurer-zfs-sur-ubuntu-cloudsavvy-it|ce guide]] | |
| * Non proposé par la version 23.04 | |
| * Non proposé par la version 23.10 | |
| * en version [[:noble|Noble 24.04]] | * en version [[:noble|Noble 24.04]] |
| * incertain en version [[:resolute|resolute 26.04]] | * incertain en version [[:resolute|Resolute 26.04]] |
| |
| Exemple pour la partie spécifique **ZFS** lors d'une installation 22.04. | {{:zfs:zfsinstal01.png?500}} |
| |
| Sur la page du type d'installation, pour créer une [[:partitions|partition]] **ZFS**, il faut sélectionner la seconde option donnant accès aux //Fonctions avancées//. Sélectionner //Effacer le disque et utiliser ZFS//. Éventuellement, cliquer sur //Chiffrer la nouvelle installation...//. Cliquer sur //Continuer//. | Pour créer une infrastructure **ZFS** lors de l'installation d'Ubuntu (ici [[:jammy|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//. |
| |
| {{:zfs:zfsinstal01.png?800}} | {{:zfs:zfsinstal02.png?500}} |
| |
| Éventuellement, la grille de saisie de la clé de chiffrement est affichée. Il est possible de choisir moins de six caractères en ignorant le message d'avertissement de taille insuffisante. | 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 utilisateur|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 [[:securite#gestionnaires_de_mots_de_passe|gestionnaire de mots de passe]]. |
| |
| Attention au moment de la saisie de la clé lors du démarrage, le clavier numérique n'est pas activé. Il faut donc utiliser les chiffres du clavier normal. | <note tip> |
| | Attention au fait qu'à cette étape il arrive que le verrouillage numérique du clavier ne soit pas activé. |
| |
| Par défaut, le stockage est proposé sur le support d'installation qui est souvent une clé USB. C'est déconseillé par l'installateur. Si le support d'installation n'a pas été fait en mode persistant, le fichier sera détruit à l'arrêt de l'installation. Il n'est pas obligatoire de générer la clé de sécurité. Cliquer sur **Installer maintenant.** | Cliquer sur l'œil à droite d'un champs protégé permet de s'assurer des informations entrées. |
| | </note> |
| |
| {{:zfs:zfsinstal02.png?800}} | {{:zfs:zfsinstal03.png?500}} |
| |
| L'installateur va maintenant inspecter les supports connectés, y compris les clés USB, et les proposer pour faire la sélection du bon. | {{:zfs:zfsinstal04.png?500}} |
| |
| Le disque interne SDA est le premier de la liste. Faire donc bien attention au choix. Si deux disques sont de même taille et du même constructeur, la confusion reste possible. Après avoir fait le bon choix, cliquer sur **Installer maintenant**. | * La première partition de 512 Mo en **[[:systeme de fichiers#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 [[:swap#creer_un_fichier_d_echange|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 ''[[:arborescence#la_norme_selon_la_fhs|/boot]]''). |
| | * La quatrième "partition" est aussi //vdev// **ZFS**, cette fois utilisé par un //[[https://docs.oracle.com/cd/E37927_01/html/E36654/gjtuk.html|pool root]]//, qui contient le système d'exploitation et les données. |
| |
| Installer sur clé USB est possible. Il faut compter une douzaine d'heures. Mais booter depuis une clé USB est impossible. Environ 80% des applications de base ne sont pas opérationnelles pour cause de temps de chargement trop long. En effet, maintenant, au démarrage, plein d'opérations sont faites en parallèle et il n'est pas évident de modifier le temps d'attente avant de déclarer l'action en échec. | ===== Utilisation ===== |
| |
| {{:zfs:zfsinstal03.png?800}} | ==== vdevs, zpools et datasets ==== |
| |
| La grille de confirmation est affichée. À ce niveau, il n'y a plus que le N° du SCSI et la lettre du disque qui sont repérables. | * Les espaces de stockages **ZFS** sont organisés en **//pools//** équivalent à une [[:partitions|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//. |
| Il est indiqué que 4 partitions seront créées. | * Les **//vdevs//** (pour //virtual devices//) correspondent à une [[:partitions|partition]] //pour le support matériel// -- ou à de la mémoire vive. Ils sont à disposition des //pools//. |
| |
| {{:zfs:zfsinstal04.png?800}} | 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. |
| |
| La table de partition GPT ou MSDOS est supprimée pour fabriquer du **ZFS**. | <note> |
| | Il s'agit ici de //vdev data// (de données). |
| |
| La première partition fait 512 Mo et est en FAT 32. Elle contient la structure de BOOT EFI **ainsi que** la structure de boot du GRUB | **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**. |
| | </note> |
| |
| La seconde partition fait 2 Go et est formatée en linux-swap. En effet **ZFS** ne sait pas gérer un fichier swap. | * De plus, les **//datasets//** permettent de subdiviser chaque //pool// en sous-volumes, permettant de définir différentes politiques pour les //snapshots//, les [[:sauvegarde|sauvegardes]], les permissions, etc.\\ Ils peuvent être considérés comme des [[:arborescence|répertoires]] qui contiennent différents types de données, et amènent à différentes manières de gérer le stockage. |
| |
| Ces deux partitions sont standard, du point de vue GPARTED. | <note important> |
| | Pour fonctionner correctement, un //pool// doit conserver au minimum 20% d'espace libre. |
| |
| La troisième partition fait 2 Go et est en **ZFS**. Elle contient les fichiers de boot de ubuntu | On rencontre dans le cas contraire un message d'erreur de ce type : |
| | |
| La quatrième partition fait le reste de la taille disque. Elle contient le système d'exploitation et les données. | |
| | |
| Ces deux dernières partitions sont bien vues par GPARTED. Il ne sait pas les rétrécir. Il sait juste les supprimer. Si la décision de supprimer la quatrième partition est prise, les trois autres partitions sont supprimées, et on obtient un disque **ZFS** totalement vide. | |
| | |
| ===== Utilisation ===== | |
| | |
| <note warning>Ce chapitre n'est pas développé.</note> | |
| | |
| ==== Contraintes ==== | |
| | |
| Pour bien fonctionner, il faut au moins 20% d'espace libre sinon message d'avertissement : | |
| <code>Requesting to save current system state. | <code>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%. | 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%.</code> | Free space on pool "rpool" is 20%.</code> |
| | </note> |
| |
| ==== Créations des partitions ==== | ==== Création de vdevs ==== |
| |
| 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. | === Avec GParted === |
| |
| Les utilisations principales seront les[[https://pve.proxmox.com/wiki/ZFS_on_Linux|suivantes]] | [[: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. |
| * 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 === | ==== Création de pools ==== |
| |
| installons le logiciel manquant. | <note tip>Voir la [[https://docs.oracle.com/cd/E24843_01/html/820-2315/gayob.html|documentation officielle]] en français.</note> |
| <code bash>sudo apt install zfsutils-linux</code> | |
| La commande est, par exemple, la suivante : | |
| <code bash>zpool create MesDonnees mirror /dev/sdb8 /dev/sdc11</code> | |
| Puis fabriquons l'enveloppe qui convient. | |
| <code bash>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</code> | |
| |
| Il est exigé que la taille du mot de passe soit au minima de 8 caractères quelconques sans aucune autre contrainte. | 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. |
| |
| Ne pas oublier que la perte de ce mot de passe entraine l'impossibilité définitive d'accéder aux données. | On peut les utiliser en argument de ''[[man>zpool-create|zpool create]]'' pour ajouter de la parité (le choix par défaut, sans paramètre, est l'absence de parité). |
| |
| === Activation de la compression === | Pour créer un //pool// ''monStockage'' qui s'étend sur les //vdevs// ''/dev/sdb1'' et ''/dev/sdc1''((Voir //[[:partitions#Règle de dénomination]]//.)) : |
| | <code bash>zpool create monStockage /dev/sdb1 /dev/sdc1</code> |
| |
| On va constater qu'actuellement, il est nécessaire, si on veut en profiter, d'activer la compression. | 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. |
| <code bash> | |
| sudo zfs get compression | |
| NAME PROPERTY VALUE SOURCE | |
| MesDonneesPersonnelles compression off default | |
| |
| sudo zfs set compression=on MesDonneesPersonnelles | <note warning> |
| | Si vous chiffrez votre //pool//, notez votre mot de passe, idéalement avec un [[:securite#gestionnaires_de_mots_de_passe|gestionnaire]] : sa perte entraîne l'impossibilité définitive d'accéder aux données. |
| | </note> |
| |
| sudo zfs get compression | === Compression === |
| NAME PROPERTY VALUE SOURCE | |
| MesDonneesPersonnelles compression on local</code> | On peut activer la compression avec la sous-commande ''[[man>zfs-set|zfs set]]'' : |
| | <code bash>sudo zfs set compression=on monStockage</code> |
| | |
| | La commande ''[[man>zfs-get|zfs get]]'' permet d'obtenir son état : |
| | <code bash>sudo zfs get compression monStockage</code> |
| |
| ===== Voir aussi ===== | ===== Voir aussi ===== |
| |
| * [[:systeme_de_fichiers#ZFS]] sur la page //[[:Système de fichiers]]// | * [[https://www.oracle.com/fr/storage/nas/|Site officiel]] |
| * [[https://github.com/openzfs/zfs|GitHub]] OpenZFS | * [[https://github.com/openzfs/zfs|GitHub]] OpenZFS |
| | * [[:systeme_de_fichiers#ZFS]] sur la page //[[:Système de fichiers]]// |
| * **(//en//)** [[https://openzfs.github.io/openzfs-docs/|Documentation]] OpenZFS | * **(//en//)** [[https://openzfs.github.io/openzfs-docs/|Documentation]] OpenZFS |
| * [[https://www.lmgc.univ-montp2.fr/perso/norbert-deleutre/2017/09/08/zfs-terminologie-et-commandes-de-bases/|ZFS terminologie et commandes de bases sur lmgc.univ-montp2.fr par Norbert Deleutre]] | * [[https://www.lmgc.univ-montp2.fr/perso/norbert-deleutre/2017/09/08/zfs-terminologie-et-commandes-de-bases/|ZFS terminologie et commandes de bases sur lmgc.univ-montp2.fr par Norbert Deleutre]] |
| * **(//en//)** [[https://pthree.org/2012/12/05/zfs-administration-part-ii-raidz/|ZFS Administration, Part II- RAIDZ - Aaron Toponce]] | * [[https://www.youtube.com/watch?v=Vc1PXMkd1vY|Présentation vidéo]] en français |
| * [[https://forum.ubuntu-fr.org/viewtopic.php?id=2071553|échanges sur le forum]] | * [[https://forum.ubuntu-fr.org/viewtopic.php?id=2071553|échanges sur le forum]] |
| * **(//en//)** [[https://wiki.ubuntu.com/ZFS]] | |
| |
| ==== Alternative ==== | ==== Alternative ==== |
| * [[:Btrfs]] | * [[:Btrfs]] |
| |
| ----- | ---- |
| * [[https://forum.ubuntu-fr.org/viewtopic.php?id=2094391|Discussion]] au sujet de cette page sur le forum. | * [[https://forum.ubuntu-fr.org/viewtopic.php?id=2094391|Discussion]] au sujet de cette page sur le forum. |
| * //[[:Contributeurs]] : [[:utilisateurs:bcag2]], geole, [[:utilisateurs:krodelabestiole]].// | * //[[:Contributeurs]] : [[:utilisateurs:bcag2]], [[:utilisateurs:krodelabestiole]].// |