Synology Btrfs Datei-Selbstheilung - wie viele Festplatten

Christian1297

Rear Admiral
Registriert
Nov. 2012
Beiträge
5.338
Hallo, ich interessiere mich für folgende Funktion des Btrfs Dateisystem.

Btrfs Datei-Selbstheilung
Bei traditionellen Speichersystemen können Fehler auftreten, die komplett unbemerkt bleiben und zu fehlerhaften Daten führen, die ohne Warnung oder Fehlermeldung an Anwendungen gesendet werden. Um diese Fehler zu vermeiden, stellt Btrfs Prüfsummen für Daten und Metadaten bereit, erzeugt zwei Kopien der Metadaten und verifiziert dann die Prüfsummen bei jedem Leseprozess. Wenn eine Abweichung (schleichende Datenkorruption) erkannt wurde, kann das Btrfs-Dateisystem mithilfe der Metadatenspiegelung beschädigte Dateien (schleichende Datenkorruption) automatisch erkennen und fehlerhafte Daten mittels der unterstützten RAID-Volumes, einschließlich RAID 1, RAID 5, RAID 6, RAID 10, F1 und SHR, wiederherstellen.

Dabei stellt sich mir die Frage, wie viele Festplatten mindestens benötigt werden. Ich dachte nämlich immer, dass ein minimum von 3 Festplatten benötigt wird. Aus dem zitierten Text lese ich aber heraus, dass auch ein RAID 1 (2 Festplatten) ausreicht. Dabei stellt sich mir aber auch noch die Frage, wieso überhaupt ein RAID benötigt wird, wenn doch lediglich die Metadaten dupliziert werden.

Sehe ich das richtig, dass diese Funktion zur Archivierung von Daten auch ohne ECC RAM sinnvoll, da die Daten zwar mal falsch ausgegeben werden könnten, aber zumindest der Datenstand auf der Festplatte immer "heile" bleibt. Was sagt ihr?
 
Fehler durch einen RAID-Controller selbst kann das aber auch nicht fixen. Sowaas kann immer zum Datenverlust führen, weil das Dateisystem als Software einfach eine Schicht zu tief liegt. Eine Datensicherung ist unumgänglich.
 
  • Gefällt mir
Reaktionen: Christian1297
Christian1297 schrieb:
Dabei stellt sich mir aber auch noch die Frage, wieso überhaupt ein RAID benötigt wird, wenn doch lediglich die Metadaten dupliziert werden.
Die (doppelt gespeicherten) Metadaten mit ihren Prüfsummen werden verwendet, um Fehler in den Daten zu erkennen. Fehler erkennen, nicht Fehler beheben! Wenn du ZUSÄTZLICH willst, dass die als fehlerhaft erkannten Daten auch repariert werden können, musst du die Daten ja nochmal irgendwo anders haben, also mehrfach gespeichert haben. Dazu Raid.

Als fehlerhaft erkannte Metadaten kannst du hingegen ggf. dank der Kopie auch ohne Daten-Raid wiederherstellen.
 
  • Gefällt mir
Reaktionen: Christian1297
Es gibt gar keinen RAID-Controller. btrfs (und auch ZFS) sind die systemd unter den "Dateisystemen" (eher Datenverwaltungssysteme).

"Selbstheilung" erfordert, daß ein Datum entweder mehrfach vorhanden ist (=> Mirror) oder aus verfügbaren Daten berechnet werden kann (=> Parity).

Wie so oft kommt es also drauf an. Zwei Datenträger genügen für Mirroring, mehr gehen aber problemlos. Einfache Parität ("RAID5") erfordert mindestens drei Platten, damit bei Ausfall einer aus den anderen beiden die verlorenen Daten rekonstruiert werden können ("Rebuild"). Zweifache Parität erfordert eine mehr und n-fache Parität entsprechend 2-plus-n Platten im Minimum.

ECC ist so eine Sache. Ohne ECC hat man das Problem, daß möglicherweise falsche Daten geschrieben werden. Ein Bit kippt um? ECC erkennt und korrigiert das. Non-ECC tut es nicht.

In beiden Fällen wird das eingehende Datum als valide verstanden - eine andere Möglichkeit gibt es auch gar nicht, denn die Prüfsumme wird während des Schreibvorgangs erstellt und man muß sich drauf verlassen, daß Daten richtig geschrieben werden.

Werden sie falsch geschrieben, weil ein Bit im RAM umgekippt ist, dann werden btrfs ebenso wie ZFS die außerdem vorhandenen, bisher intakten Kopien des Datums mit den ungültigen Daten überschreiben. Die Prüfsumme stimmt schließlich. Hier hilft ECC.

Werden Daten aber falsch geschrieben, weil der Datenträger selbst Mist baut, dann passen Datum und Prüfsumme nicht zusammen und btrfs/ZFS kann das Datum aus einer der übrigen Kopien (wo die Prüfsumme zum Datum paßt) wiederherstellen. Hier hilft ECC eher weniger.

Ergo, für Write Once Read Many hilft ECC nicht wirklich was. Wenn aber viel geschrieben werden muß, dann fängt ECC an, interessant zu werden, wenn die Daten auch wirklich zuverlässig geschrieben werden sollen.

Für paketbasierte Formate - Bild, Ton, Filme usw --- ist das aber alles uninteressant. Wenn ein Paket/Frame kaputt ist, merkt man das im Normalfall nicht mal. Anders sieht es aber bei komprimierten Nutzdaten, Datenbanken und sonstigen eher kritischen Daten aus.
 
  • Gefällt mir
Reaktionen: snaxilian und Christian1297
Vielen Dank für die informativen Antworten. Eine Datensicherung ist natürlich vorhanden. Ich habe nur eine ziemlich große Sammlung an Fotos und Videos, wo ich verhinden möchte, dass diese nach langer Zeit gegebenfalls fehlerhafte Dateien enthalten.

RalphS schrieb:
Einfache Parität ("RAID5") erfordert mindestens drei Platten, damit bei Ausfall einer aus den anderen beiden die verlorenen Daten rekonstruiert werden können ("Rebuild").

Wieso genügen hier nicht schon 2 Festplatten, also RAID1? Die Daten sind doch bereits doppelt vorhanden. Oder ist der Trick bei 3 Festplatten, dass vor dem rebuild nochmal geprüft werden kann, ob die wiederherzustellende Datei auch fehlerfrei ist?

Man erreicht also mit 2 Festplatten die Funktion der "Selbstheilung", beim Ausfall der einer Festplatte kann aber nicht garantiert werden, dass die Datei auch wieder fehlerfrei kopiert wird?

Aufgrund der hohen Kosten für ein 4 Bay NAS und der Sache mit den paketbasierten Formate werde ich das Thema aber wohl erstmal aufschieben und noch eine Weile bei meinen älteren 2 Bay Synologys bleiben.
 
Stark vereinfachte Erklärung: Bei einem Raid 5 aus 3 Disks wird jede Datei halbiert und über die zwei Hälften wird per XOR-Verknüpfung noch eine Parität erstellt. Damit jetzt nicht nur Daten auf Disk 1 und 2 liegen und die Paritäten auf Disk 3, werden diese verteilt, siehe z.B. dem Beispiel hier mit vier Disks (https://www.thomas-krenn.com/de/wiki/RAID#RAID_5).
Fällt eine Platte aus kann die fehlenden Daten aus der verbliebenden Hälfte und der Parität zurück gerechnet werden.
Bei einem Raid 1 wird nix halbiert sondern jedes einzelne Bit verdoppelt und auf beide Disks geschrieben. Fällt eine Disk aus und du baust Ersatz ein, wird stumpf alles wieder gespiegelt. Daher ist der Rebuild bei einem Raid 1 (oder auch 10) immer schneller, da nur linear gelesen wird von der funktionierenden Disk und linear geschrieben auf die andere und eben nix berechnet werden muss.

"Selbstheilung" ist ein schöner Marketingbegriff aber dadurch, dass ZFS als auch BTRFS Dateisystem und Raid-Funktionalität miteinander vereinen vereinfacht es vieles. Bei anderen Lösungen hast eben dein Raid (Hardware, Software, was-auch-immer) dass nur Blöcke verwaltet und ein Dateisystem, dass sich um die eigentlichen Dateien kümmert. Zu ECC hat ja @RalphS schon genug geschrieben.

100%ige Sicherheit wirst nie erlangen, du kannst aber nahe ran kommen. Dafür solltest du eben mindestens die 3-2-1 Regel einhalten (3 Kopien einer Datei, auf mindestens 2 voneinander getrennten Medien, davon 1 in einem anderen "Brandabschnitt"). Beispiel: Erste Kopie auf dem PC mit dem man arbeitet, PC macht regelmäßig ein Backup auf ein NAS und das NAS kopiert ebenfalls seinen Datenbestand auf ein zweites NAS, das bei den Eltern/Kindern/Freunden/Rechenzentrum steht oder auf eine externe Disk oder zu einem Cloudanbieter.

Aber da fängt auch der Spaß erst an.
  • Tritt ein Kopierfehler vom PC > NAS auf: Daten futsch selbst wenn NAS & zweiter Backuport ZFS/BTRFS o.ä. nutzen. Woher soll das NAS auch wissen, dass da Daten korrupt ankommen?
  • Schutz der Daten bedeutet auch Verschlüsselung wenn du diese extern lagerst, was wiederum sinnvoll ist für ein brauchbares Backup-Konzept
  • Ein Backup ist nur ein Backup, wenn der Restore funktioniert. Wer immer nur fleißig sichert aber nie erfolgreich mal einen Restore und den Desasterfall durchexerziert hat, der hat Schrödingers Backup.
 
  • Gefällt mir
Reaktionen: RalphS, Olunixus und Christian1297
Es gibt verschiedene Gründe für Einsatz (oder überhaupt erstmal die Entwicklung!) verschiedener Redundanzverfahren. Kosten und Aufwand gehören dazu. Alle Konfigurationen haben Vor- und Nachteile und man muß immer abwägen, was einem wichtiger ist.

Das Ergebnis hinten ist immer dasselbe. Aber der Weg, wie man da hinkommt, ist es nicht.

Zur Veranschaulichung:
- ich hab 10 Datenträger zu jeweils 1TB und will möglichst viel Speicherplatz zur Verfügung haben.

  • verwende ich einen Mirror, dann krieg ich nur 1TB Nutzdaten raus, egal was ich mache.
  • also muß ich auf eine verschränkte Konfiguration ausweichen (üblicherweise +0, hier also sowas wie RAID 1+0).
  • jetzt kann ich mit viel gutem Willen fünf Mirror bauen und diese miteinander verbinden.
  • Dann hab ich 5TB, die ich nutzen kann und praktisch (nicht rechnerisch!) darf exakt eine Platte ausfallen.
  • (Rechnerisch kommen Wahrscheinlichkeiten hinzu, da in jedem der fünf Mirror je eine Platte ausfallen darf - aber wenn mehr als eine Platte ausfällt und diese "rein zufällig" einen Mirror komplett lahmlegen, dann war's das.)

- Oder ich kauf größere Platten. Hier im Beispiel geht das noch, aber immer ist das nicht möglich - es gibt nach wie vor Maximalgrößen pro physikalischem Datenträger. Und unter der Annahme, daß die zehn Platten zu je 1TB schon rumliegen, wäre das eine zusätzliche Investition.


- verwende ich einfache Parität, dann reicht ein virtuelles Gerät mit allen zehn Datenträgern, ich kann 9TB nutzen und 1TB fällt für die Parität weg. Eine (beliebige) Platte darf ausfallen.

- entsprechend bei zweifacher Parität 8TB zur Nutzung und 2TB für die Parität und zwei beliebige Platten dürfen ausfallen.


  • wenn ich also wie bei einfacher Parität 9TB in Mirrorkonfiguration nutzen können will, dann bräuchte ich nicht fünf, sondern neun virtuelle Geräte UND ich hätte nicht 10, sondern 18 Festplatten kaufen müssen.
  • Problem dasselbe wie oben, am Ende darf nur exakt eine Platte ausfallen, weil jede weitere ausgefallene Platte zu Datenverlust führen könnte (auch wenn die Wahrscheinlichkeit wegen mehr Mirrors dafür nun geringer ist). Daß insgesamt 9 von den 18 Platten ausfallen können, wenn es die richtigen Platten sind, spielt keine Rolle.

- wenn aber wie bei zweifacher Parität 8TB nutzbar sein und zwei Platten ausfallen können sollen, dann muß ich mir was einfallen lassen. Denn dazu brauch ich notwendigerweise zweifache Spiegel und jedes GB Nutzdaten kostet mich nun 3GB Plattenplatz.

Unter der Annahme, daß meine Platten weiterhin 1TB groß sind, müßte ich also 8 virtuelle Geräte aus jeweils drei Platten zusammenfassen. Das sind 24 Platten oder 24TB brutto... von denen 8TB nutzbar sind. Wie oben ist die rechnerische Ausfallsicherheit auch hier größer als zwei, aber nur zwei Platten können ausfallen, OHNE daß das die "richtigen" Platten sein müssen. Die Tatsache, daß theoretisch auch 16 Platten ausfallen könnten, wenn es nur die richtigen 16 sind, muß aus demselben Grund unbeachtet bleiben.

Macht natürlich keiner. 24 Platten kosten mehr in Anschaffung und auch im Betrieb, sind aufwendiger zu verwalten UND müssen irgendwo hingelegt werden.

Mirrors sind daher in "kleinen" Konfigurationen sinnvoll, zB fürs Betriebssystem, wenn nur wenige Platten verfügbar sind (oder sein sollen) sodaß das Problem "teurer Plattenplatz" nicht so ins Gewicht fällt. Sie sind außerdem sinnvoll, wenn auf Teufel komm raus Daten erhalten bleiben müssen, weil man mit Mirrors ganz einfach irgendwelche Redundanzen sicherstellen kann. Klar, dann kostet Plattenplatz sehr viel Geld in bezug auf den nutzbaren Platz, aber vergleichsweise wenig in bezug auf die Ausfallsicherheit. 9 Platten dürfen kaputtgehen, bevor was passiert? Für so eine Ausfallsicherheit müßte man ohne Mirror sehr viel mehr ausgeben - der erfordert dafür nur 10 Platten insgesamt.

Ergo: Mirror skaliert mit der Ausfallsicherheit, nicht jedoch mit dem Datenvolumen.

Parity auf der anderen Seite lohnt sich für größere Konfigurationen, erfordern aber mehr Ressourcen vom PC für die erforderlichen Berechnungen. Dafür kosten sie weniger in bezug auf den nutzbaren Platz. Entsprechend paßt Parity gut fürs Datengrab - jede Platte, die zusätzlich ausfallen können soll, kostet mich nur jeweils eine Festplatte mehr.

Ergo: Parity skaliert mit dem Datenvolumen, nicht jedoch mit der Ausfallsicherheit.

Je nachdem was ich brauche kann ich mich also entscheiden. "Selbstheilen" tun die alle - die einzige Anforderung dafür ist, daß es genug Redundanz gibt, um ein Datum zu rekonstruieren. Eine Platte allein genügt in keinem Fall - btrfs / zfs mit einer Platte ist also relativ albern (sollte man imo auch vermeiden).
 
  • Gefällt mir
Reaktionen: Christian1297
Super Text @RalphS bis auf den letzten Abschnitt, da kommt das berüchtigte ja, aber aus den Untiefen der Storage-/SAN-Admin-Hölle und erwähne ich nur der Vollständigkeit halber und sollte niemals in einer Umgebung mit nur einer Disk umgesetzt werden. Niemals. Auch nicht nur mal dran denken, das ist grober Unfug und verursacht nur Probleme^^

Aber prinzipiell kann man auch mit nur einer einzelnen HDD ein ZFS-"Pool" anlegen und auch dort wird zu jedem Datenblock entsprechend der ditto block (die dazu gehörenden Metadaten) geschrieben. Nutzt man mehr als eine vDisk, dann werden Nutzdaten und Metadaten verteilt, bei nur einer vDisk bestehend aus einer physikalischen Disk eben nicht.
Jetzt gibt es diesen wunderbaren ZFS Befehl set copies=N der standardmäßig auf 1 steht aber man kann diesen auch auf 2 oder 3 setzen. Bei N=3 hätte man 3 Kopien der Nutzdaten + Metadaten und logischerweise nur noch ein Drittel der maximal verfügbaren Kapazität. Man kann so die Wahrscheinlichkeit der Datenkorruption erhöhen wenn die Disk mehrere defekte Blöcke hat aber dafür macht man ja regelmäßige Scrubs und natürlich schützt dies nicht vor Ausfall der kompletten HDD. Ein wunderbares praktisches Beispiel dazu gibt es hier: https://jrs-s.net/2016/05/02/zfs-copies-equals-n/
Theoretisch kann man also so auch ZFS auf einem Laptop nutzen, sollte nur stets aktuelle Backups haben. Dann hat man "Selbstheilung" bei Fehlern in den Daten selbst wenn man diese regelmäßig liest & schreibt aber man kein ECC nutzen kann oder will aber eben nach wie vor keine Absicherung gegen Ausfall der einen Disk außer eben: Ersatzdisk einbauen, Backup wieder einspielen, fertig.

Wenn ich also absolut schützenswerte Daten habe, die garnienicht und unter keinen Umständen verloren gehen dürfen dann habe ich in meinen vDevs entweder ein Raid-z2 oder mirrored vDevs mit 3 Spiegeln wenn ich auch Performance benötige und ich habe zfs set copies=2 (oder 3 für die ganz paranoiden) und ich habe mindestens(!) ein oder besser 2 stets aktuelle Backups das in einem anderen Brandabschnitt steht und/oder gegen so etwas wie Ransomware etc geschützt ist. Sei es durch rotierende Backupmedien, Offlinebackups wie Bänder, Snapshots, ein WORM-System o.ä.
Jede schützenswerter die Daten natürlich sind, desto teurer wird die Anschaffung/Unterhalt/Erneuerung der Hardware unten drunter, das sollte aber natürlich klar sein.
 
  • Gefällt mir
Reaktionen: Christian1297
Also ich sag mal so, aus rein persönlicher Erfahrung. Ich hab selber schon Pools mit nur einer Disk drin ausprobiert. Das war nie das Wahre. Daten gingen ganz einfach verloren. Copies war auf > 1 gesetzt, aber das hilft natürlich nichts, wenn der Datenträger ausfällt. Außerdem war die Performance unterirdisch. Da war es am Ende auch egal, ob ich FreeBSD oder Solaris + ZFS oder irgendein Linux plus btrfs verwendet hab.

Aber ich bin bei ZFS auch schon von "fast" anfang an dabei, wo man notwendigerweise eine 64bit Plattform haben mußte und unter 8GB RAM überhaupt nichts ging. In der Zwischenzeit hat sich einiges getan und viele meiner Erfahrungswerte sind vermutlich obsolet, auch im Hinblick auf den Ressourcenbedarf. Dennoch, gebrannter RalphS scheut das Feuer. ;)

Einer dieser Erfahrungswerte ist halt, daß sich alle Probleme in Luft auflösten, sobald man eine weitere Disk in den Pool gesteckt hatte. Insbesondere die Performance stieg sprunghaft. Jetzt hab ich ein raidz2 aus sechs Disks, am Interface liegen 400MB pro Sekunde an (MegaBYTEs) und ein vollständiger Scrub von 20TB oder so dauert weniger als 24 Stunden. Anfangs war das fast eine Woche... für weniger Daten. Und entsprechend war zu der Zeit die Performance eher... nicht so gut.

Dennoch ist zumindest für mich unter BSD und Solaris erster Anlaufpunkt ZFS und unter Linux btrfs mit jeweils mindestens einem Datenträger mehr. Klar, zum "Spielen" reicht einer, aber die Stärken von ZFS und btrfs fallen mit einem Datenträger buchstäblich unter den Tisch - dann kann man auch andere Dateisysteme verwenden (das gilt besonders für ZFS, das raidz* nur statisch konfigurieren kann). Meiner Erfahrung nach hat man mit ZFS-auf-einem-einzelnen-Datenträger 90% der Schwächen, aber nur 10% der Stärken - mit zwei oder mehr Datenträgern eher 95% der Stärken und 5% der Schwächen.

Deswegen hab ich auch was gegen Linux-Distros, die einfach mal pauschal und ungefragt btrfs einrichten, egal wie oder was -- aber, zugegeben, da bin ich auch sehr eigen (imo hat ZFS unter Linux nichts verloren => Lizenzcrash CDDL<>GPL; aber das ist nochmal ein ganz anderes Paar Schuhe).

Das ist nur meine ganz persönliche Einstellung dazu und natürlich nicht allgemeingültig oder zum Nachmachen empfohlen. ;)
 
  • Gefällt mir
Reaktionen: Crisq
So hat jeder seine "Wunden".. Ich bin btrfs gebrandmarkt und nutze es wenn nur auf VMs ohne Raid oder im mirrored Betrieb. Die anderen Level waren mir nie stabil genug.

Empfehlenswert halte ich ZFS bei einer Disk auch absolut nicht aber es geht wenn man z.B. nur eine Disk/SSD im Laptop hat und keine korrupten Daten möchte.
 
@RalphS

Warum ist btrfs zu vermeiden mit einer Platte?
Fahre unter ext4 schon lange nur eine.
Mache sowieso lokale Backups und ein Spiegel ist kein Backup und bei Ausfall brauch ich keine sofortige Redundanz. Aber Fehlervermeidung ist mir wichtig.

Hätte eine 220+ und eine 14TB Platte. Wenn Budget da ist kommt ne zweite als Spiegel mal hinzu.
Wieso sollte ich zum aufsetzen btrfs vermeiden?
 
Zuletzt bearbeitet:
Gar nicht. 😉

Insoweit Du Dich auf #9 beziehst: das sind einfach Erfahrungswerte, die waren schon zur Zeit des Postings eher alt und sind inzwischen nicht aktueller, sodaß nochmal Drübergucken sicherlich angeraten ist.

Ja, natürlich kann man btrfs (hier stellvertretend für alle ähnlichen Dateiverwaltungssysteme) als einfaches redundantes Dateisystem verstehen. Der Gag ist nur: damit kehrt man den ganzen Sinn dieses Teils unter den Tisch! Da hätte man das weglassen und stattdessen Hard- oder Software-RAID verwenden können und btrfs hätte keinen spezifischen Einsatzzweck gehabt.

btrfs ist eher zu verstehen als ein Dateisystem - wie ext4 oder was weiß ich --- welches im Gegensatz zu den "traditionellen" die Möglichkeiten eines logischen (statt physischen) Unterbaus aufgreifen und für sich nutzen kann und dabei dann nach Möglichkeit statische Grenzen variabel macht.
Das geht nur, weil damit das bisherige Stack-Konzept aufgehoben wird - MBR/GPT, Partitionen, RAID Controller und sogar Dateisysteme gibts dort entweder nicht oder sind optional.

Es ist nicht das "Ziel", Daten redundant zu haben oder ausfallsicher zu sein. Das ist bei btrfs stattdessen die Anforderung, auf dessen Basis es arbeitet. Ausfallsicherheit fällt automatisch mit ab.

Das Ziel ist stattdessen, unter Zuhilfenahme von Redundanz dafür zu sorgen, daß Datenintegrität gewahrt bleibt. Wenn ich eine Datei schreibe, dann will ich davon ausgehen können, daß das, was ich nachher lese, auch das ist, was ich vorher reingeschrieben habe. btrfs eignet sich damit eher als Dateisystem wo Backups draufgeschrieben werden.

Hab ich nur einen Datenträger, dann kann ich das nur sehr eingeschränkt sicherstellen. Ich erfahre noch, daß dieses Datum da seit der letzten Prüfung hinüber ist. Hab ich aber keine Redundanz, dann bleibt es dabei und die lapidare Information "ja, wurde wiederhergestellt, alles okay" ... die fehlt.

Hab ich nur einen Datenträger und der liegt in den letzten Atemzügen, dann werd ich eingehend informiert, daß meine Daten grad fleißig am Sterben sind.

Hätte ich mehrere gehabt, dann wäre die Information stattdessen gewesen "na mein guter, tausch den Datenträger #2 mal aus. Sonst sind eventuell die Daten irgendwann kaputt."
 
  • Gefällt mir
Reaktionen: snaxilian
Zurück
Oben