Sortie de ZFS sur Linux 0.8.0, implémentations de ZFS pour le noyau Linux

Après près de deux ans de développement soumis libération ZFS sur Linux 0.8.0, une implémentation du système de fichiers ZFS sous forme de module pour le noyau Linux. Le module a été testé avec les noyaux Linux de 2.6.32 à 5.1. Packages d'installation prêts à venir sera préparé pour les principales distributions Linux, notamment Debian, Ubuntu, Fedora, RHEL/CentOS. Le module ZFS sur Linux est déjà inclus dans les distributions Debian, Ubuntu, Gentoo, Sabayon Linux et ALT Linux.

Dans le cadre de ZFS sur Linux, une implémentation des composants ZFS liés à la fois au fonctionnement du système de fichiers et au fonctionnement du gestionnaire de volumes a été préparée. En particulier, les composants suivants sont implémentés : SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) et ZPL (ZFS POSIX Layer). De plus, le projet offre la possibilité d'utiliser ZFS comme backend pour le système de fichiers du cluster Lustre. Le travail du projet est basé sur le code ZFS original importé du projet OpenSolaris et amélioré avec des améliorations et des correctifs de la communauté Illumos. Le projet est développé avec la participation d'employés du Livermore National Laboratory dans le cadre d'un contrat avec le département américain de l'Énergie.

Le code est distribué sous une licence CDDL gratuite, incompatible avec la GPLv2, qui ne permet pas d'intégrer ZFS sous Linux dans la branche principale du noyau Linux, puisque le mélange de code sous licence GPLv2 et CDDL n'est pas autorisé. Pour contourner cette incompatibilité de licence, il a été décidé de distribuer l'intégralité du produit sous la licence CDDL en tant que module chargeable séparément, qui est fourni séparément du noyau. La stabilité de la base de code ZFS sur Linux est considérée comme comparable à celle d'autres systèmes de fichiers pour Linux.

Les principaux changements:

  • Ajout de la prise en charge intégrée du chiffrement des données stockées au niveau du système de fichiers et des partitions. L'algorithme de chiffrement par défaut est aes-256-ccm. La commande « zfs load-key » a été proposée pour charger les clés de chiffrement ;
  • Implémentation de la possibilité de transférer des données chiffrées lors de l'exécution des commandes 'zfs send' et 'zfs receive'. Lorsque vous spécifiez l'option "-w", les données déjà chiffrées dans le pool sont transférées telles quelles vers un autre pool, sans déchiffrement intermédiaire. Avec une telle copie, les données restent protégées par la clé de l'expéditeur, ce qui permet d'utiliser ce mode pour la sauvegarde vers des systèmes non fiables (en cas de compromission du destinataire, l'attaquant ne pourra pas accéder aux données sans la clé) ;
  • Ajout de la prise en charge de la suppression des disques principaux d'un pool de stockage, connectés à la fois individuellement et dans le cadre d'un miroir. La suppression est effectuée avec la commande "zpool remove". Le processus de suppression copie les données du lecteur exclu vers les lecteurs principaux restants du pool ;
  • Ajout de la commande "zpool checkpoint" pour enregistrer l'état actuel du pool avec la possibilité d'annuler d'autres modifications au moment enregistré (un instantané de l'ensemble du pool est créé). Cette fonctionnalité peut être utile dans le processus d'exécution de tâches administratives complexes potentiellement dangereuses, qui, dans des conditions normales, entraînent des modifications irréversibles (par exemple, l'activation d'indicateurs pour une nouvelle fonctionnalité ZFS ou la suppression de données) ;
  • La commande "zpool trim" a été ajoutée pour informer les lecteurs utilisés dans le pool des secteurs qui ne sont plus utilisés. L'utilisation de l'opération TRIM permet d'augmenter l'efficacité des SSD et d'éviter la dégradation de leurs performances. Une nouvelle propriété "autotrim" a été proposée pour activer le processus continu en arrière-plan de transmission des commandes TRIM ;
  • Ajout de la commande "zpool initialize" pour initialiser tout l'espace disque non alloué, ce qui lui permet d'être instantanément prêt à l'emploi, sans dégradation des performances lors du premier accès (par exemple, lors de l'hébergement de stockages virtualisés tels que VMware VMDK) ;
  • Ajout de la prise en charge des quotas au niveau de la comptabilité et du projet, en plus des quotas au niveau des utilisateurs et des groupes précédemment disponibles. Essentiellement, les projets sont un espace séparé d'objets associés à un identifiant séparé (ID de projet). La liaison est définie via l'opération 'chattr -p' ou via l'héritage d'attribut. Pour la gestion de projet, les commandes « zfs project » et « zfs projectspace » sont présentées, qui permettent de gérer la création de projets et de leur fixer des limites d'espace disque ;
  • Ajout de la possibilité de créer des scripts Lua pour automatiser divers travaux avec ZFS. Les scripts sont exécutés dans des environnements isolés spéciaux à l'aide de la commande "zpool program" ;
  • Nouvelle bibliothèque mise en place pyzfs, qui fournit une API stable pour administrer ZFS à partir d'applications Python. La bibliothèque est un wrapper autour de libzfs_core et fournit un ensemble identique de fonctions, mais utilise des types Python plus proches ;
  • Les utilitaires arcstat, arcsummary et dbufstat ont été rendus compatibles avec Python 3. Les utilitaires arcstat.py, arc_summary.py et dbufstat.py ont été renommés en versions sans l'extension « .py » ;
  • Ajout de la prise en charge de l'interface du noyau Linux Direct IO (O_DIRECT), qui permet d'accéder aux données sans mise en mémoire tampon ni contournement du cache ;
  • Optimisations des performances introduites :
    • Le travail des commandes "scrub" et "resilver" a été accéléré en raison de la division en deux phases (une phase distincte a été allouée pour scanner les métadonnées et déterminer l'emplacement des blocs avec des données sur le disque, ce qui permet une vérification plus poussée à l'aide de données séquentielles en lisant);
    • Ajout de la prise en charge des classes d'allocation,
      permettre à des SSD relativement petits d'être regroupés et utilisés pour stocker uniquement certains types de blocs couramment utilisés, tels que les métadonnées, les données DDT et les petits blocs de fichiers ;

    • Amélioration des performances des commandes d'administration telles que
      « zfs list » et « zfs get », en mettant en cache les métadonnées nécessaires à leur fonctionnement ;

    • Ajout de la prise en charge de la parallélisation des opérations d'allocation de blocs en exécutant des processus d'allocation distincts pour chaque groupe de métaslabs. Sur les systèmes conventionnels, il y a une augmentation des performances de 5 à 10 %, mais sur les grands (SSD 8 128 Go, NUMA 24 cœurs, 256 Go de RAM), l'augmentation des opérations d'allocation de blocs peut atteindre 25 % ;
    • Ajout de la possibilité d'exécution différée de la commande "resilver" (reconstruction de la distribution des données en tenant compte des modifications de la configuration des lecteurs) - si la précédente n'est pas encore terminée lors du démarrage d'une nouvelle opération, le nouveau gestionnaire ne commencera à s'exécuter qu'après la fin du précédent;
    • Des optimisations ont été ajoutées au ZIL (ZFS Intent Log) pour permettre la création et le traitement de blocs en présence de blocs encore en cours de traitement par le stockage ;
    • Réduction du temps d'enregistrement des partitions (zvol) dans le système. Lorsqu'un pool contient un grand nombre de partitions, elles sont désormais disponibles immédiatement après avoir effectué "zpool import" ;
    • Ajout de la prise en charge du calcul accéléré par le matériel des hachages SHA256 et des opérations de cryptage AES-GSM à l'aide de puces Intel QAT (Quick Assist Technology). Ajout de la prise en charge de l'accélération matérielle du chipset Intel C62x et du CPU Atom C3000.

Source: opennet.ru

Ajouter un commentaire