Bei dem Thema Raid, Backup und ECC
handelt es sich letztlich um das Bestreben, die Wahrscheinlichkeit und den Umfang eines Datenverlusts möglichst klein zu halten. Während die technischen Grundlagen unstrittig sind, geht es nun darum, die Gefährdung und Relevanz der beteiligten Komponenten für einen Datenverlust abzuschätzen. Dazu gehört auch eine Wertung welches Problem wie häufig auftritt und wie man die einzelnen Gefahren klein halten kann - für sich betrachtet aber auch im Verhältnis zu den benutzten Dateisystemen
Was sind denn die Probleme um die man sich kümmern muss?
defekte Hardware
- defekte Festplatten, defekte Sektoren/ Flashzellen, defekter RAM/ Controller/Kabel/ PSU etc
Das ist mit Echtzeit-Raid, Prüfsummen und Backup beherrschbar
Statistische Probleme/ silent errors
Wenn man ein Multi-Terabyte Array mit "0" vollschreibt und anschliessen liest, so wird sich an der einen oder anderen Stelle eine "1" finden. Läßt man das ein Jahr liegen und liest nochmal, so hat sich die Anzahl der "1" erhöht - ein massives Problem bei Langzeitspeicherung. Nennt sich bitrot oder Datenrost. Gleiches gilt für den RAM. Auch da kippt mit einer statistischen Wahrscheinlichkeit z.B. eine "0" zu einer "1" was zu Abstürzen oder Datenverfälschung führt. Nicht zu vergessen dass eine schlechte Stromversorgung, ja selbst schlechte Kabel oder Steckkontakte z.B. in der Backplane zu Datenverfälschungen beim Lesen oder Schreiben führen können.
Das sind Probleme, die mit Echtzeit-Raid, Prüfsummen, Datascrubbing und ECC RAM beherrschbar sind. Bei Backup-Einzelplatten und ZFS kann man Copies=2 setzen. Dann wird jeder Datenblock ein zweitesmal an anderer Stelle auf der Platte gesichert.
Transaktionsprobleme
Wenn dem OS "a" als geschrieben gemeldet wird, muss es auch auf stabilem Storage sein
Wenn "a" und "b" geschrieben werden soll, dann nur gemeinsam oder gar nicht.
Lösungen dafür sind Batteriepufferung im Raidcontroller bei älteren Dateisystemen oder CopyOnWrite und sicheres Sync Write Schreiben mit einem ZIL Device bei Dateisystemen wie ZFS.
Zeitprobleme
Unbeabsichtigtes Löschen, Wunsch ältere Versionen eines Dokuments zu lesen, Sabotage, Trojaner die unerkannt im Hintergrund anfangen Daten zu verschlüsseln. Merkt man oft erst wenn bereits auch das Backup betroffen ist. Das Backupsystem sollte zudem so aktuell wie möglich sein.
Das sind Probleme, die man deshalb nur ansatzweise mit einfachen Backups lösen kann. Am besten ist eine read only Versionierung mit vielen, auch älteren Snapshots auf dem Dateisystem im Hauptstorage aber auch auf dem externen Backupsystem. Eine Aktualisierung des Backupsystems das auch offene Dateien mit ihrem aktuelles Stand sichert ist ZFS Replikation. Das kann nahezu in Echtzeit Daten im Backupsystem aktuell halten - bis herunter in den Minutenbereich.
Disaster
wie Feuer, Überspannung, Diebstahl oder ein defektes Array wenn z.B. mehr Platten ausfallen als es der Raidlevel erkaubt. Da hilft nur externes Backup, wenigstens in einem anderen Brandabschnitt. Bei sehr wichtigen Daten zwei Backupsysteme nehmen damit bei Ausfall eines Systems das Backup weiterläuft.
Die beteiligten Systemkomponenten
Raid
-Raid ist primär dazu da, den Ausfall einer oder mehrerer Festplatten ohne Datenverlust zu erlauben oder bei Dateisystemen mit Prüfsummen die Reparatur defekter/veränderter Daten (Datenrost) beim Zugriff zu ermöglichen (nennt sich Self-Healing Feature). Raid schützt dabei in Echtzeit im Gegensatz zu Backupverfahren die zwar auf Raidverfahren aufbauen aber nur auf Anforderungen arbeiten wie Snapraid/ Unraid etc, ansonsten aber die Daten komplett auf den Einzelplatten belassen also ohne die Datenblöcke zu verteilen/stripen/spiegeln.
Dazu skaliert bei einen Echtzeit-Raid die sequentielle Performance mit der Anzahl der Datenplatten bzw. die iops mit der Anzahl der Raid-Subsysteme (z.B. Verdoppelung bei Raid 50/60 oder bei ZFS mit der Anzahl der vdevs). Raid bringt damit neben Verfügbarkeit auch Performance.
Das Hauptproblem bei Raid:
-Beim Ausfall von mehr Platten als es der gewählte Raidlevel zulässt, ist das ganze Array verloren.
Bei ZFS Raid-Z3 sind z.B. bis zu drei Plattenausfälle je vdev erlaubt ohne daß Daten verloren gehen.
- bei einem normalen Raid-1 oder Raid 5/6 besteht bei einem Stromausfall beim Schreiben die Gefahr, dass das Dateisystem oder das Raid anschließend korrupt sind da die Daten nacheinander auf die Platten des Raid geschrieben werden. Folge sind unterschiedliche Daten auf den beiden Platten eines Raid-1 Mirrors oder teilweise geschriebene Raid 5/6 Stripes, siehe Write Hole Problem:
"Write hole" phenomenon in RAID5, RAID6, RAID1, and other arrays.. Ein neueres CopyOnWrite Dateisystem mit Software Raid kennt dieses Problem nicht.
Raid schützt aber nicht in jedem Fall vor korrupten Daten z.B.
- Wenn man ein Raid-1 nutzt, führen Silent Errors/ Datenrost dazu, dass beide Teile des Mirrors nicht mehr identisch sind. Beim Lesen kann es dann passieren dass gute oder falsche Daten gelesen werden. Das OS kann nur bei einem Dateisystem mit Prüfsummen erkennen, ob Daten gerade gut oder schlecht sind und dann den anderen Mirror lesen und den fehlerhaften Mirrorteil reparieren.
- Wenn man SSD benutzt kommt dazu die Gefahr, dass Hintergrund Datenumorganisationen (Garbage Collection) die die Firmware dauernd vornimmt bei Stromausfall zu einem Datenverlust/Veränderungauf der SSD führen kann.
Wenn man Platten, Controller oder Dateisysteme/Betriebssysteme mit einem Schreibcache nutzt ergeben sich zusätzliche Probleme. Stürzt das System beim Schreiben ab, so sind ohne weitere Massnahmen die Daten im Cache verloren. Man muss dann folgendes unterscheiden.
- jeder Schreibcache deaktiviert: viel zu langsam - will man nicht
Sicheres syncrones Schreiben wird bis zu 10x langsamer als bei Nutzung eines Caches.
- Schreibcache aktiviert
Bei Dateisystemen wie ext oder ntfs bleibt ohnehin das Problem dass es passieren kann, dass Daten bereits geschrieben wurden, die Metadaten aber noch nicht aktualisiert sind. Das Ergebnis kann ein korruptes Dateisystem sein. Ein offline Checkdisk/ Filecheck kann das beheben. Dieses Problem besteht unabhängig davon ob man einen Schreibcache nutzt oder nicht. Der Cache verstärkt aber das Problem. Zudem können je nach Cachegröße mehrere Sekunden Daten verloren gehen, die dem Betriebssystem bereits als "ist auf stabilem Storage" gemeldet wurden. Insbesondere bei Transaktionen z.B. Datenbanken kann das kritisch werden. Eine Buchhaltung wird es nicht mögen, dass es die Abbuchung eines Betrags noch auf Platte geschafft hat, nicht aber die Aufbuchung auf das Zielkonto, die ging im Cache verloren.
Neuere CopyOnWrite Dateisysteme kennen ersteres Problem nicht. Atomare Schreibaktionen z.B. Datenblock schreiben + Metadaten aktualisieren werden immer gemeinsam oder gar nicht durchgeführt unabhängig vom Schreibcache. Das Dateisystem ist also niemals korrupt nach einem Abstürz.
Bleibt das Transaltionsproblem für abhängige Aktionen. Dies ist auch fürCopyOnWrite Systeme ein Problem, ganz besonders wenn man z.B. bei Storage für VMs ältere Dateisysteme auf ZFS lagert. Die haben ja dann gar keine Kontrolle mehr darüber was im Cache verlorengeht oder auf Platte landet.
Lösung
Für Hardwareraid und ältere Dateisysteme: Einen Controller mit Cache + BBU nutzen.
Wird dem OS ein Schreibvorgang bestätigt, so landet der tatsächlich auf der Platte. Bei einem Absturz dann beim nächsten Booten. Ein Raid-Contollercache ist aber meist relativ langsam und es bleibt das Write Hole Problem
Für ZFS wurde das Problem über eine Protokollfunktion der Daten im Cache gelöst die dem OS als "sind auf Platte" gemeldet sind. Da ZFS grundsätzlich einen sehr großen Rambasierten Schreibcache nutzt, der mehrere Sekunden Schreiben aufnimmt um damit aus vielen kleinen langsamen Schreibaktionen einen einzigen großen und schnellen sequentiellen Schreibvorgang zu machen, wird dieses Logging auf ein ZIL genanntes Device gemacht. Dieses muss sicheres Schreiben garantieren. Aus Performancegründen nutzt man nicht den Pool als ZIL sondern ein Extra Logging Device das darauf optimiert ist. Das nennt sich dann Slog, z.B. eine Dram SSD mit Batteriepufferung wie ein 8GB ZeusRAM, eine NVMe wie eine Intel P-Serie (750, 3600, 3700) oder eine Intel S 3700/3710 Sata SSD mit Powerloss Protection, geringsten Latenzen und hohen konstanten Schreib-IOPS bei QD/Queudepth=1.
Eine komplette Datei z.B. ein Worddokument ist bei einem Absturz beim Schreiben natürlich immer kaputt. Dagegen kann nur das Programm z.B. Word etwas unternehmen indem es Temp-Dateien anlegt. Wenn man Versionierung/ Snaps hat bleibt zudem der Zugriff auf eine Vorversion.
ECC
ist quasi Raid im RAM. Ein Bitfehler wird erkannt und aus der Speicherredundanz repariert.
Diese Speicherfehler sind nicht in jedem Fall ein Speicherdefekt sondern ein statistisches Problem das umso häufiger auftritt je mehr RAM man hat. Speicherfehler führen zu Abstürzen oder Datenveränderungen, entweder beim Verarbeiten der Daten oder beim Lesen/Schreiben. Derartige Probleme können durch ECC RAM verhindert werden. Selbst neue Dateisysteme können nur Probleme in der Kette Platte > Kabel > Controllerhardware > Controllertreiber erkennen und reparieren.
ECC RAM sollte man daher nach Möglichkeit immer vorsehen. Teils wird die Meinung vertreten, man bräuchte das nur oder unabdingbar bei neueren Dateisystemen weil ansonsten die extreme Gefahr von Datenverlusten besteht, teils mit Hinweis darauf dass Platten immer valide Daten liefern würden und Datenveränderungen auf dem Storage damit ausschliesslich durch RAM Fehler begründet würden.
Das dem nicht so ist, zeigen die doch die relativ häufigen Prüfsummenfehler die z.B. ZFS findet und repariert ohne dass ansonsten (Smart, OS, etc) ein Problem berichtet wird, trotz ECC RAM und ohne dass ECC Fehler bemerkt werden. Das nennt sich dann schön neudeutsch "Datenrost" also Veränderungen auf dem Storage selber mit einer statistischen Häufigkeit, Je größer das Array und je länger die Lagerzeit der Daten desto mehr Probleme. Die Wahrscheinlichkeit dieser Fehler je GByte ist geringer als beim Ram ein bitflop, dafür sind mehr Bytes beteiligt - damit ist das ähnlich problematisch wie das RAM/ECC Problem.
Ich empfehle niemand auf ECC zu verzichten, ein kompletter Datenverlust z.B. bei ZFS der garantiert ausschliesslich auf RAM Probleme zurückzuführen wäre, ist mir aber nicht bekannt - und ich lese seit 7 Jahren intensiv alle ZFS Foren. Bei einem Pool/ Datenverlust kann man allenfalls spekulieren dass RAM Probleme beteiligt waren. Ich halte daher den Nutzen von ZFS ohne ECC für größer als das Risiko eines zusätzlichen Problems durch RAM. Aber wie gesagt, man sollte nicht spekulieren und auf sein persönliches Glück hoffen sondern ECC nehmen und das nicht nur auf dem Storage sondern auch auf dem Arbeitsplatz falls da kritisches verarbeitet wird - zumal da ja heutzutage auch RAM von 16GB aufwärts üblich wird.
Backup
dient dazu, bei Verlust einer Platte oder eines Arrays, einen bestimmten Datenstand wiederherzustellen. Man kann dazu rollierendes mehrstufiges Backup machen (in der Art "diese Woche", "letzte Woche" und "vorletzte Woche")
Da Backup aber praktisch nie aktuell ist und meist nur wenige Vorversionen hat, ist das eher für "Disaster Backup" geeignet, nicht als Option zur schnellen Wiederherstellung eines früheren Dateistandes. Auch besteht die Gefahr, dass sich Veränderungen oder Trojaner-Angriffe wie Datenverschlüssellungen z.B. durch Ransomware die man zu spät erkennt sich bereits auch auf dem Backup befinden.
Für den alltäglichen Betrieb ist es besser ein Dateisystem mit Versionierung zu nutzen. Bei Windows gibt es dazu Shadow Copies. Noch besser ist Versionierung auf Basis eines CopyOnWrite Dateisystems mit readonly Snapshots (btrfs, Netapp WAFL, ReFS oder ZFS) auf dem NAS zu machen da dann selbst ein Admin-User nichts mehr an den Snapshots ändern kann - im Gegensatz zu einer reinen oder gar lokalen Windowslösung die viel mehr Angriffspunkte bietet.
Damit lassen sich beliebig oft z.B. stündlich/täglich/ wöchentlich/monatlich etc Snapshots anlegen, auf die man bei ZFS über Clones (ein beschreibbares Dateisystem das man aus einem Snapshot erzeugt oder bei dem man den Inhalt eines Dateisystems mit einem Snapshot tauscht) oder bei einzelnen Dateien über Windows "vorherige Version" zugreifen kann. ZFS kennt zudem "Rollback", also das komplette Zurücksetzen des Dateisystems auf einen früheren Snapshotstand. Im Gegensatz zu einem Restore aus Backup geht das unmittelbar, also ohne einen Zeitverzug.
Angesichts neuer Bedrohungen wie Samsa (
http://www.heise.de/security/meldun...Erst-schauen-dann-verschluesseln-3153767.html ) bei der die Infrastruktur samt Storage und Backup bedroht wird, gewinnt Randomware sichere read only Versionierung mit kurzen Intervallen (stündlich/ tägliche ZFS Snaps) zunehmend an Bedeutung. Hier hilft Backup nur ansatzweise und auf keinen Fall alleine.
Mein Lösungsansatz um die Wahrscheinlichkeit eines Datenverlustes klein zu halten
sind neben guter Hardware und Backups die neueren Dateisysteme wie ZFS die ja gerade deswegen entwickelt wurden um mit den heutzutage großen Arrays (Multi-Terabyte bis Petabyte) sicher arbeiten zu können. Auch sind Multi-Terabyte Arrays mit ext4 oder ntfs im Vergleich nicht nur von der Datensicherheit problematisch. Da es sich dabei um keine CopyOnWrite Systeme handelt, besteht die Gefahr dass Dateisysteme nach einem Absturz korrupt sind. Das dann nötige Prüfen der Metadaten (Daten selbst können hier mangels Prüfsummen eh nicht repariert werden) muss offline erfolgen und kann bei sehr großen Arrays Tage dauern.
auf Ebene der Hardware
- ECC RAM, ohne sicheren Speicher geht nichts
Auf Ebene des Dateisystems
- CopyOnWrite: Bei einer Datenveränderung werden nicht wie z.B. bei ext oder ntfs Datenblöcke geändert sondern immer komplett neu geschrieben. Einen Datenblock neu schreiben + Metadaten updaten wird dann ganz oder gar nicht vorgenommen, daher hat man ein immer valides Dateisystem, kein chkdsk per Design nötig (es gibt daher bei ZFS kein chkdsk Tool) - nur online Scrubbing um Silent Errors/Datenrost Fehler anhand der Prüfsummen zu reparieren. Der alte Datenblock wird dann zum Überschreiben freigegeben - es sei denn ein Snap schützt den Datenblock vor überschreiben.
Der Ansatz ist dabei wie bei einem Atomkraftwerk. Ein GAU (größter anzunehmender Unfall der beherrschbar ist), also selbst massive Probleme sind durch ZFS ohne weitere Tools beherrschbar. Die ZFS internen Reparaturmöglichkeiten gehen weit über die Möglichkeiten von ext4 oder ntfs hinaus und decken die üblichen Probleme wie Stromausfall beim Schreiben, defekte Platten oder Sektoren, Datenrost etc ab. Lediglich ein SuperGau bei dem selbst ZFS nichts mehr retten kann, erfordert dann ein Backup. Der häufig genannte Mangel bei ZFS & Co gäbe es kein Prüftool/Reparaturtool wie bei ntfs/ext ist eher so zu sehen dass ZFS alles eingebaut hat und das nicht braucht um Probleme im Griff zu haben. Da dadurch SuperGau Probleme (nicht mehr beherrschbare Fehler) extrem selten sind aber Rettungstools, die auch Daten-Bruchstücke auf einem defekten Array retten können nicht vorhanden - ausser bei professionellen Datenrettern. Ob man damit aber bei Problemen wirklich etwas gewonnen hat ist zweifelhaft. Ich hatte mal einen derartigen Datensalat aus kleineren oder größeren Dateifragmenten nach der "Datenrettung" bei einem ntfs Dateisystem - unbrauchbar. Disaster Backup heißt dann die Lösung.
- Prüfsummen
Nur damit können Fehler sicher erkannt werden. Bei vorhandener Redundanz/Raid oder Copies=2 werden die beim Zugriff oder bei einem Scrubbing über alle Daten repariert.
Auf Ebene des Raid
- ZFS Software Raid. ZFS beispielsweise ist nicht nur ein Dateisystem sondern bietet zusätzlich Software-Raid, Raid-, Volume- und Sharemanagement. Insbesondere in Kombination mit CopyOnWrite bietet es erheblich zuverlässigeres Raid als z.B. ein Hardware RaidController mit BBU
Bei SSDs auf Powerloss Protection achten.
Auf User-Ebene
- Versionierung/ Snapshots nutzen. Die werden ohne Zeitverzug in beliebiger Anzahl angelegt und schützen aktuelle Daten auch vor Verschlüssellungs Trojanern. Der Platzverbrauch entspricht unabhängig von der Anzshl der Snaps den geänderten Datenblöcken zur Vorversion da diese vor Überschreiben gesperrt werden (ZFS Snaps mit CopyOnWrite bedeutet Einfrieren des alten Dateisystandes, kein Kopieren). Selbst stündliche erstellte readonly Snapshots die man monatelang behält sind damit problemlos möglich.
- Backup durch Replikation auf Snapshotbasis
Das arbeitet ultraschnell da es nach dem ersten Aufruf nur geänderte Datenblöcke überträgt. Offene Dateien werden mit dem auf Platte gesicherten Stand mitübertragen.
Letztlich sehe ich das Thema ECC, Backup, CopyOnWrite Dateisysteme und Raid wie eine mittelalterliche Burg, bei der es darum geht, das Leben des Fürsten, seines Hofstaats und seinen Wohlstand (Daten) zu sichern. Es gibt mehrere Verteidigungslinien, Gräben und Wehranlagen. Normale Angriffe sollen die soweit wie möglich abwehren, mal mehr mal weniger je nach Qualität der Konstruktion. Wenn aber alle überrannt werden oder nicht mehr schützen, ist ein Fluchttunnel (Backup) die letzte Rettung um wenigstens das nackte Leben zu retten.