27 novembre 2023

Faille destructrice de données détectée dans OpenZFS 2.2.0

Désactivez le clonage de blocs de fichiers ou mettez à niveau vers la version 2.2.1 dès que possible

Bug OpenZFS

Un problème sérieux est récemment apparu dans OpenZFS 2.2.0, implémenté dans des systèmes d'exploitation tels que FreeBSD 14. La nouvelle fonctionnalité, introduite il y a un mois, s'appelle « clonage de blocs » et vise à optimiser la gestion des données. Cependant, un bug critique, identifié par l'équipe Gentoo et signalé comme bug #15526, a conduit à la sortie immédiate d'OpenZFS 2.2.1, qui désactive temporairement cette fonctionnalité.

Cet incident soulève des inquiétudes quant à la fiabilité d'OpenZFS, connu pour sa robustesse et l'intégrité de ses données. De plus, pour les systèmes comme FreeBSD 14, qui incluent cette version d'OpenZFS, la prudence est de mise. L'expert BSD Colin Percival a souligné sur Twitter que la fonctionnalité de « clonage de bloc » est désactivée par défaut dans FreeBSD 14 et a mis en garde contre son activation pour éviter la perte de données.

Le bogue se manifeste par une corruption de fichiers : les fichiers copiés affichent une combinaison de zéros et de blocs de données qui semblent être codés en Base64. Il est intéressant de noter que les vérifications de l'état du système de fichiers ne détectent pas le problème, ce qui nécessite une attention particulière.

La nature du bug semble être liée à des circonstances spécifiques et rares. Bronek Kozicki a expliqué sur GitHub que le bug pouvait survenir lors de l'écriture asynchrone d'un fichier, si à ce moment précis la partie du fichier qui est encore en cours d'écriture est lue. Cela peut conduire à des données corrompues, un problème difficile à détecter sans comparer les sommes de contrôle.

Les développeurs ont identifié un problème lié aux nœuds ZFS et à leur gestion, qui peut être un bug caché plus ancien. Le bug est devenu plus visible avec l'introduction de la nouvelle fonctionnalité de clonage de blocs, en particulier dans les systèmes multicœurs.

Pour les utilisateurs Linux, il semble que le bug soit également lié à la version de coreutils utilisée, notamment les versions ultérieures à 9.x. Il n'est pas encore clair si Ubuntu 23.10 a activé cette fonctionnalité par défaut dans sa prise en charge ZFS récemment revenue mais encore expérimentale.

OpenZFS 2.2.2 devrait arriver bientôt pour résoudre ces problèmes. En attendant, la communauté est encouragée à maintenir une approche prudente et à envisager des sauvegardes sur d'autres systèmes de fichiers pour garantir la sécurité des données.

Nous avons déjà mentionné le travail de l'expert BSD Colin Percival, mais quiconque a déjà installé cette version « ground zero » devrait tenir compte de son avertissement sur Twitter X : « Le code ZFS de FreeBSD 14 prend en charge le « clonage de blocs ». Ceci est désactivé par défaut. N'ACTIVEZ PAS CETTE FONCTION SI VOUS NE VOULEZ PAS PERDRE DE DONNÉES.

Au moment de la rédaction de cet article, on ne sait pas exactement quelle en est la cause. Il semble qu’il s’agisse d’une combinaison de circonstances extrêmement spécifique (et donc improbable), ce qui signifie que cela ne se produit presque jamais, comme l’explique Bronek Kozicki sur GitHub :

Il est nécessaire de comprendre le mécanisme à l’origine de la corruption. Il se peut qu’il soit présent depuis une décennie et ne cause des problèmes que dans des scénarios très spécifiques, qui ne se produisent normalement pas.

À moins que vous puissiez adapter votre mécanisme de sauvegarde aux conditions décrites ci-dessous, il est très peu probable que vous en ayez été affecté.

  • Un fichier est en cours d'écriture (généralement de manière asynchrone – ce qui signifie que l'écriture n'est pas terminée au moment où le processus d'écriture « pense » qu'il l'est)
  • Pendant que ZFS continue d'écrire des données, la partie modifiée du fichier est en cours de lecture. Le même moment signifie « atteindre une fenêtre de temps très spécifique », mesurée en microsecondes (un millionième de seconde).
  • S'il est lu à ce moment très précis, le lecteur verra des zéros là où les données écrites sont en réalité autre chose.
  • Si le lecteur stocke ensuite les zéros mal lus ailleurs, c'est là que les données sont corrompues. L'un des chasseurs de bogues a écrit un script, reproducteur.sh, qui cible les volumes ZFS et vérifie si les fichiers sont corrompus. L'un des problèmes liés à cette question est qu'il n'existe aucun moyen d'écrire un programme capable de signaler si un fichier a été corrompu ou non en inspectant son contenu : il est parfaitement normal que certains types de fichiers contiennent de longues séquences de zéros. La seule façon d'en être sûr est de comparer les sommes de contrôle avant et après les opérations de copie. Ainsi, les utilisateurs inquiets qui ne disposent pas de sauvegardes sur d'autres types de systèmes de fichiers ne peuvent pas facilement le savoir. L'outil intégré d'OpenZFS pour vérifier la validité des pools de stockage ne peut pas détecter le problème.

Un correctif possible est ouvert et l'enquête semble avoir découvert un bug sous-jacent différent et préexistant, qui aurait pu être présent dès 2013. Le bug affecte les dnodes ZFS et la logique de la façon dont le code vérifie si un dnode est « sale » ou non, ce qui détermine s'il doit le télécharger : synchroniser les modifications apportées au disque.

Il est possible que cette cause unique ait été profondément cachée et donc très peu susceptible d’être ciblée. Malheureusement, la nouvelle fonctionnalité de copie plus rapide signifiait que ce qui était un bug qui ne corrompait les données qu'une fois sur des dizaines de millions de copies de fichiers devenait soudainement plus probable, en particulier sur les machines dotées de nombreux cœurs de processeur utilisés simultanément.

Pour les utilisateurs de Linux, une condition supplémentaire semble être que le système d'exploitation dispose d'une version récente du package coreutils – supérieure à la version 9.x. Il s'agit de l'outil qui fournit la fonctionnalité de la commande cp. Jusqu'à présent, nous n'avons pas pu vérifier si Ubuntu 23.10 a la fonctionnalité de clonage de blocs activée par défaut dans sa prise en charge récemment renvoyée (mais toujours expérimentale) pour l'installation sur ZFS, mais au moins un commentaire sur le bogue d'origine vient de quelqu'un qui je l'ai reproduit sur Ubuntu.

Il semble très probable qu'OpenZFS 2.2.1, qui désactive simplement le clonage de blocs, soit rapidement suivi d'une version 2.2.2 pour corriger le traitement sous-jacent des dnodes.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

AVIS DE NON-RESPONSABILITÉ, Mentions légales et droits d'auteur. Red Hat, Inc. détient les droits sur Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale de la AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de la Fondation FreeBSD ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt ; Oracle Corporation détient les droits sur Oracle®, MySQL®, MyRocks®, VirtualBox® et ZFS® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; PostgreSQL® est une marque déposée de PostgreSQL Global Development Group ; SQLite® est une marque déposée de Hipp, Wyrick & Company, Inc. ; KeyDB® est une marque déposée d'EQ Alpha Technology Ltd. ; Typesense® est une marque déposée de Typesense Inc. ; REDIS® est une marque déposée de Redis Labs Ltd ; F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB ; HAProxy® est une marque déposée de HAProxy Technologies LLC ; Traefik® est une marque déposée de Traefik Labs ; Envoy® est une marque déposée de CNCF ; Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited ; Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal® ; Shopify® est une marque déposée de Shopify Inc. ; BigCommerce® est une marque déposée de BigCommerce Pty. Ltd.; TYPO3® est une marque déposée de la TYPO3 Association; Ghost® est une marque déposée de la Ghost Foundation; Amazon Web Services, Inc. détient les droits sur AWS® et Amazon SES® ; Google LLC détient les droits sur Google Cloud™, Chrome™ et Google Kubernetes Engine™ ; Alibaba Cloud® est une marque déposée d'Alibaba Group Holding Limited ; DigitalOcean® est une marque déposée de DigitalOcean, LLC ; Linode® est une marque déposée de Linode, LLC ; Vultr® est une marque déposée de The Constant Company, LLC ; Akamai® est une marque déposée d'Akamai Technologies, Inc. ; Fastly® est une marque déposée de Fastly, Inc. ; Let's Encrypt® est une marque déposée d'Internet Security Research Group ; Microsoft Corporation détient les droits sur Microsoft®, Azure®, Windows®, Office® et Internet Explorer® ; Mozilla Foundation détient les droits sur Firefox® ; Apache® est une marque déposée de The Apache Software Foundation ; Apache Tomcat® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée de PHP Group ; Docker® est une marque déposée de Docker, Inc. Kubernetes® est une marque déposée de The Linux Foundation ; OpenShift® est une marque déposée de Red Hat, Inc. ; Podman® est une marque déposée de Red Hat, Inc. ; Proxmox® est une marque déposée de Proxmox Server Solutions GmbH ; VMware® est une marque déposée de Broadcom Inc. ; CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV ; Grafana® est une marque déposée de Grafana Labs ; Prometheus® est une marque déposée de The Linux Foundation ; Zabbix® est une marque déposée de Zabbix LLC ; Datadog® est une marque déposée de Datadog, Inc. ; Ceph® est une marque déposée de Red Hat, Inc. ; MinIO® est une marque déposée de MinIO, Inc. ; Mailgun® est une marque déposée de Mailgun Technologies, Inc. ; SendGrid® est une marque déposée de Twilio Inc. Postmark® est une marque déposée d'ActiveCampaign, LLC ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Hetzner® est une marque déposée de Hetzner Online GmbH ; OVHcloud® est une marque déposée d'OVH Groupe SAS ; Terraform® est une marque déposée de HashiCorp, Inc. ; Ansible® est une marque déposée de Red Hat, Inc. ; cURL® est une marque déposée de Daniel Stenberg ; Facebook®, Inc. détient les droits sur Facebook®, Messenger® et Instagram®. Ce site n'est pas affilié, sponsorisé ou autrement associé à l'une des entités mentionnées ci-dessus et ne représente aucune de ces entités de quelque manière que ce soit. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées sont la propriété de leurs titulaires respectifs.

JUSTE UN MOMENT !

Vous êtes-vous déjà demandé si votre hébergement était nul ?

Découvrez dès maintenant si votre hébergeur vous pénalise avec un site web lent digne des années 1990 ! Résultats immédiats.

Fermer le CTA
Retour en haut de page