Que fait exactement btrfs scrub? Selon la page de manuel, qui n'est absolument pas claire, il vérifie les erreurs. Quel genre de vérification d'erreur? Est-il fiable? Est-il capable de récupérer des erreurs? Comment ça marche? Cela fonctionne-t-il sur chaque disque btrfs?
19
Réponses:
Je ne sais pas si cela fait autre chose, mais je sais qu'au moins
btrfs scrub
le nettoyage des données sur le disque complet est effectué. Fondamentalement, il lit toutes les données * sur le disque, recalcule sa somme de contrôle et compare la somme de contrôle recalculée à celle stockée. Lorsque les sommes de contrôle stockées et recalculées ne correspondent pas, le système sait qu'il y a corruption.Une fois la corruption détectée, le comportement dépend de la configuration de votre disque. Par exemple, si vous avez RAID 1 (mise en miroir), vous
btrfs scrub
pouvez corriger les données corrompues en copiant une version non corrompue à partir d'un autre disque. Si toutes les copies de certaines données sont corrompues (par exemple, des dommages sur plusieurs disques ou ne pas avoir de copies redondantes en premier lieu), il n'y a pas grandbtrfs scrub
-chose d'autre à faire que de vous avertir.La raison pour laquelle cela est important est que les disques durs ne sont fiables qu'à 99,99999999999999% en lecture et en écriture. Ainsi, sur quelques téraoctets d'E / S de données, il y a probablement une erreur. Bien que des erreurs puissent être et soient détectées (et corrigées, en supposant qu'une copie redondante est toujours valide) pendant l'accès normal au disque, le nettoyage complet du disque de routine est capable de trouver et de corriger les erreurs avant de s'accumuler suffisamment pour que toutes les copies des mêmes données soient corrompues.
* J'utilise "données" au lieu de "fichier" pour inclure également les métadonnées. Btrfs stocke les fichiers et les métadonnées correspondantes (y compris les sommes de contrôle) dans des blocs de données, qui sont tous vérifiés et vérifiés par
btrfs scrub
.Voir également:
la source
100-1/10^14
a 16 neuf et celui de la poste n'en a que 14 (correspondant à 10 ^ 12).1-10^n
, qui est ensuite converti en pourcentage car les humains n'aiment pas les décimales principales. De plus, j'ai négligé de mentionner dans mon commentaire précédent que les disques sont en RAID 1 (d'où les mêmes données de 270 à 300 Gio sur chacun d'eux), ce qui corrige une autre erreur de calcul apparente.S'étendant sur l'excellente réponse de Mark Haferkamp, la
btrfs scrub
lecture de toutes les données au lieu de tous les fichiers est une propriété critique et est en fait ce qui la rend si utile. N'oubliez pas, btrfs a un support RAID intégré. Supposons que vous ayez un système de fichiers btrfs couvrant deux disques que vous avez configuré pour utiliser RAID1. Dans ce cas, lorsque vous écrivez dans un fichier, cette écriture est répliquée sur les deux disques. (Cela devient plus compliqué avec un exemple plus complexe, mais dans ce cas simple, c'est toujours ce qui se passe.) Cependant, lorsque vous lisez à partir de ce fichier, la lecture ne frappe qu'un seul disque (car c'est un gaspillage de lire le fichier deux fois sauf si la première copie est inutilisable pour une raison quelconque).Supposons maintenant que votre deuxième lecteur btrfs se dégrade et commence à corrompre les données de votre système de fichiers. Lorsque vous lisez des blocs à partir de ce disque, btrfs remarquera que la somme de contrôle ne correspond pas et restaurera le bloc intrabande à partir 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'était passé.Mais que se passe-t-il si btrfs ne décide pas de lire à partir du deuxième disque? N'oubliez pas qu'il y a deux copies, il peut donc lire à partir du premier ou du deuxième disque. S'il lit à partir du premier disque, il ne remarquera rien de mal. La seule fois où il remarquera que quelque chose ne va pas, c'est quand le premier disque se dégrade également. Maintenant, vous êtes vraiment arrosé car il est trop tard pour récupérer les données - la copie du deuxième disque a été corrompue pendant un certain temps, et la première copie (qui est celle que vous auriez utilisée pour restaurer le deuxième disque) est maintenant corrompue aussi!
C'est là
btrfs scrub
qu'intervient. Il lit toutes les données , pas tous les fichiers. Cela inclut les métadonnées, mais également des copies secondaires de fichiers qui ne se trouveraient pas normalement dans le chemin de lecture. Lorsqu'il lit ces copies secondaires, cela crée une opportunité pour la correction d'erreurs intrabande de btrfs de lancer et de restaurer les données à partir d'une copie redondante.la source