Wie funktioniert btrfs scrub und was macht es?

19

Was genau macht btrfs scrub? Laut der Handbuchseite, die völlig unklar ist, werden einige Fehler überprüft. Welche Art von Fehlerprüfung? Wie zuverlässig ist es? Kann es einige Fehler beheben? Wie funktioniert es? Funktioniert es auf jeder BTRFS-Festplatte?

Petr
quelle
3
Kontext: BTRFS speichert Prüfsummen, sodass immer festgestellt werden kann, ob eine Datei (oder Metadaten) in Ordnung ist oder ob sie beschädigt wurde. Fast alle anderen Dateisysteme wie ext4 verfügen über keine Prüfsummen, sodass Sie nicht daran gehindert werden, eine Datei zu lesen, die von einem defekten Laufwerk beschädigt wurde (das im Begriff ist zu sterben und bereits Daten zu beschädigen). Dies ist eine wichtige Datenschutzfunktion in BTRFS und ermöglicht das Scrubbing.
basic6

Antworten:

23

Ich weiß nicht, ob es irgendetwas anderes macht, aber ich weiß, dass mindestens btrfs scrubdie Daten auf der gesamten Festplatte gelöscht werden. Grundsätzlich werden alle Daten * auf der Festplatte gelesen, die Prüfsumme neu berechnet und die neu berechnete Prüfsumme mit der gespeicherten verglichen. Wenn die gespeicherten und neu berechneten Prüfsummen nicht übereinstimmen, weiß das System, dass es eine Beschädigung gibt.

Sobald eine Beschädigung festgestellt wird, hängt das Verhalten von Ihrer Festplattenkonfiguration ab. Wenn Sie beispielsweise über RAID 1 (Spiegelung) verfügen, btrfs scrubkönnen Sie beschädigte Daten beheben, indem Sie eine unbeschädigte Version von einer anderen Festplatte kopieren. Wenn alle Kopien einiger Daten beschädigt sind (z. B. Schäden an mehreren Datenträgern oder gar keine redundanten Kopien), btrfs scrubkönnen Sie nur gewarnt werden.

Der Grund dafür ist, dass Festplatten nur zu 99,999999999999% zuverlässig beim Lesen und Schreiben von Bits sind. Daher liegt wahrscheinlich alle paar Terabyte Daten-E / A ein Fehler vor. Während des normalen Festplattenzugriffs können und werden Fehler erkannt (und behoben, vorausgesetzt, dass eine redundante Kopie noch gültig ist). Bei der routinemäßigen Bereinigung der Festplatte können jedoch Fehler gefunden und behoben werden, bevor sich genügend Daten ansammeln, um alle Kopien derselben Daten zu beschädigen.

* Ich verwende "Daten" anstelle von "Datei", um auch Metadaten einzuschließen. Btrfs speichert Dateien und entsprechende Metadaten (einschließlich Prüfsummen) in Datenblöcken, die alle mit Prüfsummen versehen und von geprüft werden btrfs scrub.

Siehe auch:

  • Btrfs -> Checksummenbaum und Scrubbing bei Wikipedia: Technische Informationen zum Daten-Scrubbing von btrfs.
  • Geburtstagsproblem -> Wahrscheinlichkeitstabelle bei Wikipedia: Wenn "Hash-Raum" als "Anzahl der Datenblöcke" und "Anzahl der gehashten Elemente" als "Anzahl der beschädigten Datenblöcke" behandelt wird, ergibt sich die Wahrscheinlichkeit, dass es einen Datenblock mit beiden Kopien gibt in einem RAID 1-Setup beschädigt.
Mark Haferkamp
quelle
Ich habe nicht gezählt, aber ich bin bereit zu vermuten, dass Ihre Zuverlässigkeitszahl um ein paar Größenordnungen abweicht. Consumer-Festplatten sind normalerweise auf eine UBE-Rate von 10 ^ -14 Bit spezifiziert. Mit anderen Worten, ein nicht behebbarer Lesefehler pro 10 ^ 14 gelesenen Bits. Das Problem ist, dass dies für einen vollständigen Sektor gilt. Entweder bekommt man den vollen Sektor oder man bekommt gar nichts (oder das ist die Idee; stille Fehler sind eine andere Sache). Der Fehler wird also durch die Sektorgröße verstärkt, die bei Advanced Format-Laufwerken 32.768 Bit beträgt. Daher ist die tatsächliche Fehlerrate eher 10 ^ -10 bis 10 ^ -11 Readbit-Fehler.
ein Lebenslauf vom
@ MichaelKjörling Ich glaube nicht, dass Sektoren hier eine Rolle spielen. Ich habe Aufzeichnungen über die letzten 29 Btrfs-Scrubs der beiden internen 1-TB-Festplatten meines Computers. Die Datenmenge variierte zwischen 270 und 300 GiB (für insgesamt 1,35 * 10 ^ 14 bis 1,49 * 10 ^ 14 gelesene Bits für alle Scrubs zusammen). Während dieser Scrubs wurden 3 Fehler gefunden. Unter der Annahme, dass Nicht-Scrub-E / A weder Bit-Rot verursacht noch behoben hat, entspricht dies nur dem 2- bis 2¼-fachen der erwarteten Fehlerrate von Laufwerken mit einer Zuverlässigkeit von 99,999999999999%. Selbst mit nur 4096-Bit-Sektoren würde Ihr Argument davon ausgehen, dass meine Laufwerke inzwischen Tausende von Fehlern aufweisen.
Mark Haferkamp
@ MichaelKjörling Soweit ich die technischen Datenblätter der Hersteller (Seagate und WD) verstehe, sterben Bitfehler und nicht ganze Sektoren. Und die Anzahl der Neunen in der Antwort ist sogar optimistisch: 100-1/10^14hat 16 Neunen und die der Post hat nur 14 (entsprechend 10 ^ 12).
Luc
@Luc Es ist gut, wenn der Sektortod seltener vorkommt. Absterbende Sektoren bedeuten, dass das Laufwerk (möglicherweise) tatsächlich ausfällt und möglicherweise ausgetauscht werden muss. Bitfehler führen nur zu einer unbeaufsichtigten Datenbeschädigung, die so laut werden kann, dass sie von Sicherungen wiederhergestellt werden können. Mathematische Anmerkung: Die tatsächliche Berechnung ist 1-10^n, die dann in Prozent umgerechnet wird, weil Menschen führende Dezimalstellen nicht mögen. Außerdem habe ich in meinem vorherigen Kommentar versäumt zu erwähnen, dass sich die Laufwerke in RAID 1 befinden (daher befinden sich auf jedem Laufwerk dieselben 270-300 GiB-Daten), wodurch ein weiterer offensichtlicher Berechnungsfehler behoben wird.
Mark Haferkamp
5

Das btrfs scrubLesen aller Daten anstelle aller Dateien ist eine wichtige Eigenschaft und macht Mark Haferkamps ausgezeichnete Antwort so nützlich. Denken Sie daran, dass btrfs RAID-Unterstützung eingebaut hat. Angenommen, Sie haben ein btrfs-Dateisystem, das sich über zwei Laufwerke erstreckt, die Sie für die Verwendung von RAID1 konfiguriert haben. In diesem Fall wird beim Schreiben in eine Datei dieser Schreibvorgang auf beide Datenträger repliziert. (Bei einem komplexeren Beispiel wird es komplizierter. In diesem einfachen Fall ist dies jedoch immer der Fall.) Wenn Sie jedoch aus dieser Datei lesen, wird nur eine Festplatte gelesen (da es eine Verschwendung ist, die Datei zweimal einzulesen) es sei denn, die erste Kopie ist aus irgendeinem Grund unbrauchbar).

Angenommen, Ihr zweites btrfs-Laufwerk ist in einem schlechten Zustand und beginnt, Daten in Ihrem Dateisystem zu beschädigen. Wenn Sie Blöcke von diesem Datenträger lesen, stellt btrfs fest, dass die Prüfsumme nicht übereinstimmt, und stellt den Block in Band von einer als funktionierend bekannten Kopie wieder her - der Kopie auf dem ersten Laufwerk. Die Daten werden an die aufrufende Anwendung read()(oder was auch immer) zurückgegeben, als ob nichts passiert wäre.

Aber was ist, wenn btrfs nicht beschließt, von der zweiten Festplatte zu lesen? Denken Sie daran, dass es zwei Kopien gibt, sodass entweder von der ersten oder von der zweiten Festplatte gelesen werden kann . Wenn es von der ersten Festplatte liest, bemerkt es nichts Falsches. Das einzige Mal, dass es etwas falsches bemerkt, ist, wenn sich die erste Festplatte ebenfalls verschlechtert. Jetzt sind Sie wirklich enttäuscht, da es zu spät ist, die Daten wiederherzustellen - die Kopie der zweiten Festplatte wurde für eine Weile beschädigt, und die erste Kopie (mit der Sie die zweite Festplatte wiederhergestellt hätten) ist jetzt ebenfalls beschädigt!

Hier btrfs scrubkommt es an. Es liest alle Daten , nicht alle Dateien. Dies umfasst Metadaten, aber auch sekundäre Kopien von Dateien, die sich normalerweise nicht im Lesepfad befinden. Wenn diese sekundären Kopien gelesen werden, besteht für die In-Band-Fehlerkorrektur von btrfs die Möglichkeit, die Daten von einer redundanten Kopie wiederherzustellen.

strugee
quelle
2
Sind Sie sicher, dass in RAID1 nur von einer Festplatte gelesen wird? Zumindest bei mdadm RAID sollte dies nicht der Fall sein. Das Lesen sollte parallel von beiden Datenträgern erfolgen, jedoch von unterschiedlichen Daten, was bedeutet, dass es doppelt so schnell ist wie das Lesen von einem Datenträger. Die Erhöhung der Leseleistung ist eine der Hauptfunktionen von RAID 1.
Petr
@Petr ja, du hast recht. einzelne Blöcke werden nur von einer Platte gelesen.
Strugee
@Petr: Zur weiteren Erläuterung: - Unter normalen Umständen lesen weder MDADM noch BTRFS beide Kopien der gleichen Daten von beiden Datenträgern. Sie lesen nur ein Exemplar. - MDADM ist in der Lage, das Lesen auf mehrere Kopien zu verteilen, um die doppelte Lesegeschwindigkeit zu erzielen. (Weil alle Kopien A auf die Festplatte 1 und alle Kopien B auf die Festplatte 2 gehen. Da mdadm genau 2 Festplatten verwendet). - BTRFS hat mehr Schwierigkeiten. (weil Kopie A und B auf die 2 Festplatten (von 2 oder mehr Festplatten) kopiert werden, auf denen momentan am meisten Speicherplatz frei ist - dh: die 2 Kopien werden zufällig auf alle vorhandenen Festplatten verteilt)
DrYak
und in Bezug auf die Sicherheit: - MDADM und BTRFS versuchen im Falle eines Problems die andere Kopie. - Für MDADM ist das einzige Problem, das es erkennen kann, "Festplatte antwortet nicht" (da es keine genaue Vorstellung von den oben gespeicherten Dateien hat) Die RAID-Schicht des BTRFS weiß, ob eine Kopie vertrauenswürdig ist oder ob eine andere Kopie
abgerufen werden
last but not least zu RAID5 / 6: - In MDADM funktioniert es einfach . (Stille Beschädigungen werden jedoch nicht erkannt) - In BTRFS werden stille Beschädigungen derzeit nicht behandelt (da es einfacher ist, nur eine weitere Kopie (in RAID1) abzurufen, als die Berechnung der Löschcodierung durchzuführen, um zu erraten, welches Mitglied des Streifens beschädigt ist und sollte aus den verbleibenden Daten / Parität neu aufgebaut werden). Mit anderen Worten: Ab heute (August 2017) verwenden Sie kein RAID5 / 6 von btrfs.
DrYak