# Corruption des données

La corruption des données est l'accumulation d'erreurs dans les données informatiques pendant les opérations d'écriture, lecture, stockage, transmission ou traitement, et que doivent anticiper les systèmes informatiques pour assurer une intégrité des données constante.
En général, lorsqu'une corruption de données se produit, un fichier contenant ces données produira des résultats inattendus lorsqu'il est accédé par le système ou l'application concernée. Les résultats peuvent aller d'une perte mineure de données à un plantage du système. Par exemple, si un formats de document est corrompu, lorsqu'une personne essaie d'ouvrir ce fichier avec un éditeur de documents, elle peut recevoir un message d'erreur, de sorte que le fichier pourrait ne pas s'ouvrir ou s'ouvrir avec certaines des données corrompues (ou, dans certains cas, complètement corrompues, rendant le document inintelligible). L'image adjacente montre un fichier image corrompu dans lequel la plupart des informations ont été perdues.
Certains types de malware peuvent corrompre intentionnellement des fichiers dans le cadre de leur charge utile, généralement en les écrivant avec du code inopérant ou des données indésirables, tandis qu'un virus non malveillant peut également corrompre involontairement des fichiers lorsqu'il y accède. Si un virus ou un cheval de Troie avec cette méthode de charge utile parvient à altérer des fichiers critiques pour le fonctionnement du logiciel du système d'exploitation ou du matériel physique de l'ordinateur, le système entier peut devenir inutilisable.
Certains programmes peuvent proposer une réparation automatique du fichier après l'erreur, tandis que d'autres ne le peuvent pas. Cela dépend du niveau de corruption et des fonctionnalités intégrées de l'application pour gérer l'erreur. Il existe diverses causes de la corruption.

## Vue d'ensemble

Il existe deux types de corruption des données associées aux systèmes informatiques : non détectée et détectée. La corruption des données non détectée, également connue sous le nom de corruption silencieuse des données, entraîne les erreurs les plus dangereuses car il n'y a aucune indication que les données sont incorrectes. La corruption des données détectée peut être permanente avec perte de données, ou peut être temporaire lorsque certaines parties du système sont capables de détecter et de corriger l'erreur ; il n'y a pas de corruption des données dans ce dernier cas.
La corruption des données peut se produire à n'importe quel niveau d'un système, de l'hôte au support de stockage. Les systèmes modernes tentent de détecter la corruption à de nombreux niveaux, puis de récupérer ou de corriger la corruption ; cela réussit presque toujours, mais très rarement, les informations arrivant dans la mémoire du système sont corrompues et peuvent entraîner des résultats imprévisibles.
La corruption des données pendant la transmission a diverses causes. L'interruption de la transmission de données entraîne une perte de données. Les conditions environnementales peuvent interférer avec la transmission de données, en particulier lorsqu'il s'agit de méthodes de transmission sans fil. De lourds nuages peuvent bloquer les transmissions satellitaires. Les réseaux sans fil sont sensibles aux interférences de dispositifs tels que les fours à micro-ondes.
Les défaillances matérielles et logicielles sont les deux principales causes de perte de données. Les rayonnements de fond, les crashs de tête, et le vieillissement ou l'usure du dispositif de stockage entrent dans la première catégorie, tandis que les défaillances logicielles se produisent généralement en raison de bogues dans le code. Les rayons cosmiques causent la plupart des erreurs molles dans la DRAM.

## Silencieuse

Certaines erreurs passent inaperçues, sans être détectées par le firmware du disque ou le système d'exploitation de l'hôte ; ces erreurs sont connues sous le nom de corruption silencieuse des données.
Il existe de nombreuses sources d'erreurs au-delà du sous-système de stockage du disque lui-même. Par exemple, les câbles peuvent être légèrement desserrés, l'alimentation électrique peut être peu fiable, des vibrations externes telles qu'un bruit fort, le réseau peut introduire une corruption non détectée, les rayons cosmiques et bien d'autres causes de soft errors, etc. Dans 39 000 systèmes de stockage qui ont été analysés, les bogues de firmware représentaient 5 à 10 % des défaillances de stockage. Dans l'ensemble, les taux d'erreur observés par une étude du CERN sur la corruption silencieuse sont bien supérieurs à un sur chaque 10$^{16}$ bits. Le magasin en ligne Amazon.com a reconnu des taux de corruption de données similaires élevés dans leurs systèmes. En 2021, des cœurs de processeur défectueux ont été identifiés comme une cause supplémentaire dans des publications de Google et Facebook ; des cœurs ont été trouvés défectueux à un taux de plusieurs sur des milliers de cœurs$^,$.
Un problème est que les capacités des disques durs ont augmenté de manière substantielle, mais leurs taux d'erreur sont restés inchangés. Le taux de corruption des données est toujours resté à peu près constant dans le temps, ce qui signifie que les disques modernes ne sont pas beaucoup plus sûrs que les anciens disques. Dans les anciens disques, la probabilité de corruption des données était très faible parce qu'ils stockaient de petites quantités de données. Dans les disques modernes, la probabilité est beaucoup plus grande parce qu'ils stockent beaucoup plus de données, sans être plus sûrs. De cette manière, la corruption silencieuse des données n'a pas été une préoccupation sérieuse tant que les dispositifs de stockage sont restés relativement petits et lents. De nos jours, avec l'avènement des disques de grande capacité et des configurations RAID très rapides, les utilisateurs sont capables de transférer 10$^{16}$ bits en un temps raisonnablement court, atteignant ainsi facilement les seuils de corruption des données.
À titre d'exemple, Jeff Bonwick, créateur de ZFS, a déclaré que la base de données rapide chez Greenplum, une société de logiciels de bases de données spécialisée dans l'entreposage de données à grande échelle et l'analytique, rencontre une corruption silencieuse toutes les 15 minutes. Un autre exemple, une étude réalisée par NetApp sur plus de 1,5 million de disques durs pendant 41 mois a trouvé plus de 400 000 corruptions silencieuses des données, dont plus de 30 000 n'ont pas été détectées par le contrôleur RAID matériel (seulement détectées lors du nettoyage des données). Une autre étude, réalisée par CERN sur six mois et impliquant environ 97 pétaoctets de données, a révélé qu'environ 128 mégaoctets de données sont devenus définitivement corrompus silencieusement quelque part dans le chemin du réseau au disque.
La corruption silencieuse des données peut entraîner des pannes en cascade, où le système peut fonctionner pendant un certain temps avec une erreur initiale non détectée causant de plus en plus de problèmes jusqu'à ce qu'elle soit finalement détectée. Par exemple, une panne affectant les métadonnées du système de fichiers peut entraîner l'endommagement partiel ou complet de plusieurs fichiers à mesure que le système de fichiers est utilisé dans son état corrompu.

## Contre-mesures

Lorsque la corruption des données se comporte comme un processus de Poisson, où chaque bit de données a une probabilité indépendamment faible d'être modifié, la corruption des données peut généralement être détectée à l'aide de somme de contrôle, et peut souvent être corrigée en utilisant des codes de correction d'erreur (ECC).
Si une corruption de données non corrigible est détectée, des procédures telles que la retransmission automatique ou la restauration à partir de sauvegardes peuvent être appliquées. Certains niveaux de matrices RAID de disques ont la capacité de stocker et d'évaluer des bits de parité pour les données sur un ensemble de disques durs et peuvent reconstruire les données corrompues en cas de défaillance d'un ou plusieurs disques, selon le niveau de RAID implémenté. Certaines architectures de CPU emploient diverses vérifications transparentes pour détecter et atténuer la corruption des données dans les caches de CPU, les tampons de CPU et les pipelines d'instructions ; un exemple est la technologie Intel Instruction Replay, disponible sur les processeurs Intel Itanium.
De nombreuses erreurs sont détectées et corrigées par les disques durs utilisant les codes ECC qui sont stockés sur le disque pour chaque secteur. Si le disque dur détecte plusieurs erreurs de lecture sur un secteur, il peut copier le secteur défaillant sur une autre partie du disque, en remappant le secteur défaillant du disque vers un secteur de réserve sans l'implication du système d'exploitation (bien que cela puisse être retardé jusqu'à la prochaine écriture sur le secteur). Cette "correction silencieuse" peut être surveillée en utilisant S.M.A.R.T. et des outils disponibles pour la plupart des systèmes d'exploitation pour vérifier automatiquement le disque dur à la recherche de défaillances imminentes en surveillant les paramètres SMART en détérioration.
Certains systèmes de fichiers, tels que Btrfs, HAMMER, ReFS, et ZFS, utilisent des sommes de contrôle internes pour les données et les métadonnées pour détecter la corruption silencieuse des données. De plus, si une corruption est détectée et que le système de fichiers utilise des mécanismes RAID intégrés qui fournissent la redondance des données, ces systèmes de fichiers peuvent également reconstruire les données corrompues de manière transparente. Cette approche permet une meilleure protection de l'intégrité des données couvrant l'ensemble des chemins de données, généralement connue sous le nom de protection des données de bout en bout, par rapport à d'autres approches d'intégrité des données qui ne couvrent pas les différentes couches de la pile de stockage et permettent la corruption des données pendant que celles-ci passent les frontières entre les différentes couches.
Le nettoyage des données est une autre méthode pour réduire la probabilité de corruption des données, car les erreurs de disque sont détectées et récupérées avant que de multiples erreurs ne s'accumulent et ne submergent le nombre de bits de parité. Au lieu de vérifier la parité à chaque lecture, la parité est vérifiée lors d'un balayage régulier du disque, souvent effectué en tant que processus d'arrière-plan à faible priorité. L'opération de "nettoyage des données" active une vérification de parité. Si un utilisateur exécute simplement un programme normal qui lit des données à partir du disque, alors la parité ne serait pas vérifiée à moins que la vérification de la parité à la lecture soit à la fois prise en charge et activée sur le sous-système de disque.
Si des mécanismes appropriés sont employés pour détecter et remédier à la corruption des données, l'intégrité des données peut être maintenue. Cela est particulièrement important dans les applications commerciales (par exemple, bancaires), où une erreur non détectée pourrait soit corrompre un index de base de données, soit modifier des données au point d'affecter considérablement un solde de compte, et dans l'utilisation de données cryptées ou compressées, où une petite erreur peut rendre un ensemble de données étendu inutilisable.