web-dev-qa-db-fra.com

Comment Btrfs gommage fonctionne-t-il et que fait-il?

Que font exactement BTRFS Frotter? Selon la page manuelle, qui est totalement incertaine, il fait une vérification des erreurs. Quel genre de vérification des erreurs? Quelle est la fiabilité? Est-il capable de récupérer des erreurs? Comment ça marche? Est-ce que cela fonctionne sur chaque disque BTRFS?

19
Petr

Je ne sais pas si cela fait autre chose, mais je sais qu'au minimum btrfs scrub fait le nettoyage des données de disque complet. Fondamentalement, il lit toutes les données * sur le disque, recompose sa somme de contrôle et compare la somme de contrôle recalculée à l'une. Lorsque les checksums stockés et recomposés ne correspondent pas, le système sait qu'il y a une corruption.

Une fois que la corruption est détectée, le comportement dépend de votre configuration de disque. Par exemple, si vous avez RAID 1 (miroir), alors btrfs scrub Peut réparer des données corrompues en copiant une version non corrompue d'un autre disque. Si toutes les copies de certaines données sont corrompues (par exemple, des dommages multi-disques ou ne pas avoir des copies redondantes en premier lieu), il n'y a pas beaucoup de choses btrfs scrub peut faire en outre vous avertir.

La raison en est importante est que les disques durs ne sont que d'environ 99,999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999. Donc, tous les tera-taoctés d'E/S de données, il est probable qu'une erreur est susceptible d'être une erreur. Bien que des erreurs puissent être et sont détectées (et fixées, en supposant qu'une copie redondante soit toujours valide) lors de l'accès à un disque normal, le nettoyage de routine de disque complet est capable de trouver et de résoudre des erreurs avant que suffisamment accumulent que toutes les copies des mêmes données sont corrompues.

* J'utilise des "données" au lieu de "fichier" pour inclure également les métadonnées. BTRFS stocke des fichiers et des métadonnées correspondantes (y compris les checksums) dans les blocs de données, qui sont tous christimisés et vérifiés par btrfs scrub.

Voir aussi:

  • BTRFS -> Arbre de contrôle et nettoyage à Wikipedia: informations techniques sur le nettoyage des données de BTRFS.
  • Problème d'anniversaire -> Table de probabilité à Wikipedia: traiter "l'espace hash" comme "nombre de blocs de données" et "nombre d'éléments hachés" comme "nombre de blocs de données corrompus", cela donne la probabilité de là-bas Être un bloc de données avec les deux copies corrompues dans une configuration RAID 1.
23
Mark Haferkamp

En développant l'excellente réponse de Mark Haferkamp, ​​btrfs scrub Lecture TOUT DONNE Au lieu de tous les fichiers est une propriété critique et est en fait ce qui le rend si utile. N'oubliez pas que BTRFS a intégré le support RAID. Dites que vous avez un système de fichiers BTRFS couvrant deux disques que vous avez configurés pour utiliser RAID1. Dans ce cas, lorsque vous écrivez dans un fichier, qui écrit est répliqué aux deux disques. (Cela devient plus compliqué avec un exemple plus complexe, mais pour ce cas simple, c'est toujours ce qui se passe.) Toutefois, lorsque vous lisez à partir de ce fichier, la lecture ne frappera qu'un seul disque (car il s'agit d'un déchet pour lire le fichier à deux reprises. Sauf si la première copie n'est inutilisable pour une raison quelconque).

Disons maintenant que votre deuxième lecteur BTRFS est dégradant et commence à corrompre des données dans votre système de fichiers. Lorsque vous lisez des blocs de ce disque à partir de ce disque, BTRFS remarquera que la somme de contrôle ne correspond pas et va restaurer le bloc dans la bande d'une copie connue - la copie sur le premier lecteur. Il retournera les données à l'application appelant read() (ou autre) comme si rien ne s'est passé.

Mais que si BTRFS ne décide pas de lire du deuxième disque? N'oubliez pas qu'il y a deux copies, il peut donc lire à partir du premier o le deuxième disque. Si elle se lit sur le premier disque, cela ne remarquera rien de mal. La seule fois où ça va remarquer tout ce qui est faux, c'est que le premier disque se dégrade également. Maintenant, vous êtes vraiment hosté car il est trop tard pour récupérer les données - la copie du second disque a été corrompue pendant un certain temps et la première copie (qui vous serait utilisée pour restaurer le deuxième disque) est maintenant corrompue!

C'est là que btrfs scrub Entrez. Il lit tout -données, pas tous les fichiers. Cela inclut les métadonnées, mais également des copies secondaires des fichiers qui ne seraient normalement pas dans le chemin de lecture. Lorsqu'il lit ces copies secondaires, cela crée une opportunité pour la correction des erreurs de bande BTRFS pour lancer et restaurer les données d'une copie redondante.

5
strugee