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.

INFORMATIONS

Managed Server Srl est un acteur italien leader dans la fourniture de solutions système GNU/Linux avancées orientées vers la haute performance. Avec un modèle d'abonnement peu coûteux et prévisible, nous garantissons que nos clients ont accès à des technologies avancées en matière d'hébergement, de serveurs dédiés et de services cloud. En plus de cela, nous proposons des conseils système sur les systèmes Linux et une maintenance spécialisée en SGBD, sécurité informatique, Cloud et bien plus encore. Nous nous distinguons par notre expertise dans l'hébergement de CMS Open Source de premier plan tels que WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart et Magento, soutenus par un service d'assistance et de conseil de haut niveau adapté aux administrations publiques, aux PME et à toutes tailles.

Red Hat, Inc. détient les droits de Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale d'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 The FreeBSD Foundation ; 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® et MyRocks® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; 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. 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®. Amazon Web Services, Inc. détient les droits sur AWS® ; Google LLC détient les droits sur Google Cloud™ et Chrome™ ; Microsoft Corporation détient les droits sur Microsoft®, Azure® et Internet Explorer® ; La Fondation Mozilla détient les droits sur Firefox®. Apache® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée du groupe PHP. 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. Hetzner Online GmbH détient les droits sur Hetzner® ; OVHcloud est une marque déposée d'OVH Groupe SAS ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Facebook, Inc. détient les droits sur Facebook®. Ce site n'est affilié, sponsorisé ou autrement associé à aucune des entités mentionnées ci-dessus et ne représente en aucune manière aucune de ces entités. 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 appartiennent à leurs titulaires. MANAGED SERVER® est une marque déposée au niveau européen par MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italie.

Retour en haut de page