Après plus d'un an de développement, la version 2.3.0 du projet OpenZFS a été publiée, qui développe l'implémentation du système de fichiers ZFS pour Linux et FreeBSD. Le projet est devenu célèbre sous le nom de « ZFS sur Linux » et était auparavant limité au développement d'un module pour le noyau Linux, mais après la fusion avec le code de FreeBSD, il a été reconnu comme l'implémentation principale de OpenZFS et rebaptisé.
OpenZFS a été testé avec les noyaux Linux de la version 4.18 à 6.12 et toutes les branches de FreeBSD, à partir de la version 13.3. Le code est distribué sous la licence libre CDDL. OpenZFS est déjà utilisé dans FreeBSD et fait partie des distributions Debian, Ubuntu, Gentoo, NixOS et ALT Linux. Des paquets avec la nouvelle version seront bientôt préparés pour les principales distributions Linux, y compris Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS fournit une implémentation des composants ZFS, liés à la fois au fonctionnement du système de fichiers et à la gestion des volumes. Les composants suivants ont été implémentés : SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) et ZPL (ZFS POSIX Layer). Le projet permet également d'utiliser ZFS comme backend pour le système de fichiers clusterisé Lustre. Les contributions d'OpenZFS sont basées sur le code original de ZFS, importé du projet OpenSolaris et amélioré par des enrichissements et corrections de la communauté Illumos. Le projet se développe avec la participation d'employés du Lawrence Livermore National Laboratory sous contrat avec le Département de l'énergie des États-Unis.
Le code est distribué sous la licence libre CDDL, qui est incompatible avec la GPLv2, ce qui empêche l'intégration d'OpenZFS dans la branche principale du noyau Linux, car le mélange de code sous les licences GPLv2 et CDDL est inadmissible. Pour contourner l'incompatibilité des licences, il a été décidé de distribuer le produit pour Linux entièrement sous la licence CDDL sous forme de module à télécharger séparément, distinct du noyau. La stabilité de la base de code d'OpenZFS est jugée comparable à celle d'autres systèmes de fichiers pour Linux.
Principales modifications :
- Il est maintenant possible d'ajouter à la volée de nouveaux disques à un ensemble RAIDZ existant pour augmenter la capacité de stockage sans arrêter le service et sans avoir à créer un nouveau groupe de disques. La redistribution des données redondantes tenant compte des nouveaux disques se fait automatiquement. Pour ajouter un disque à un groupe existant, on peut utiliser la commande « zpool attach POOL raidzP-N NEW_DEVICE », et pour suivre la fin du processus d'extension en arrière-plan — « zpool status ».
- L'exécution des opérations liées à la déduplique des blocs de données a été considérablement accélérée. Les optimisations ont touché entre autres le format des tables de déduplique, donc pour tirer parti des optimisations proposées dans les pools existants, il est nécessaire d'activer l'option « fast_dedup », après quoi de nouvelles tables de déduplique seront créées qui seront utilisées en parallèle avec les anciennes tables.
- Un mode d'entrée/sortie directe (Direct IO) a été ajouté, permettant d'effectuer des opérations de lecture et d'écriture en contournant le cache ARC (Adaptive Replacement Cache). Ce mode augmente l'efficacité lorsque le caching peut avoir un impact négatif sur les performances en raison des opérations de copie supplémentaires en mémoire, par exemple, lors de l'utilisation de périphériques NVMe.
- Une option « -j » a été ajoutée à la plupart des commandes (zfs list|get|mount|version, zpool status|list|get|version) pour output au format JSON.
- La taille autorisée des noms de fichiers et de répertoires a été augmentée de 255 à 1023 caractères (la nouvelle taille est choisie en prenant en compte l'hébergement de 255 caractères de 4 octets).
- Des optimisations de performance ont été apportées à diverses parties du code source.
- Des options ont été ajoutées au module noyau :
- dmu_ddt_copies
- raidz_expand_max_copy_bytes
- raidz_expand_max_reflow_bytes
- raidz_io_aggregate_rows
- spa_cpus_per_allocator
- spa_num_allocators
- zap_shrink_enabled
- zfetch_max_idistance
- zfs_active_allocator
- zfs_arc_shrinker_seeks
- zfs_dedup_log_flush_entries_min
- .zfs_dedup_log_flush_flow_rate_txgs
- zfs_dedup_log_flush_min_time_ms
- zfs_dedup_log_flush_passes_max
- zfs_dedup_log_mem_max
- zfs_dedup_log_mem_max_percent
- zfs_dedup_log_txg_max
- zfs_dio_enabled
- zfs_dio_write_verify_events_per_second
- zfs_resilver_defer_percent
- zfs_scrub_after_expand
- zfs_snapshot_no_setuid
- zfs_vdev_direct_write_verify
- zio_taskq_write_tpq
Source : opennet.ru
