Warum muss ein Raid 10-Gerät initialisiert werden?

9

Beim Erstellen eines Linux-Software-RAID-Geräts als RAID10-Gerät bin ich verwirrt, warum es initialisiert werden muss. Die gleiche Frage gilt wirklich für raid1 oder raid0.

Letztendlich würden die meisten Leute ein Dateisystem darauf legen, und dieses Dateisystem sollte keinen Status der Datenträgerdaten annehmen. Jeder Schreibvorgang wirkt sich auf beide Festplatten in einem raid10- oder raid1-Setup aus, in das die N Spiegel geschrieben werden. Es sollte überhaupt keinen Grund geben, einen Raid10 zunächst zu initialisieren, da dies im Laufe der Zeit geschehen wird.

Ich kann verstehen, warum für ein raid5 / 6-Setup, bei dem eine Paritätsanforderung besteht, aber selbst dann scheint es, dass dies träge gemacht werden könnte.

Ist es nur so, dass sich die Leute besser fühlen?

Michael Graff
quelle
1
Gute Frage. Es ist möglich, die Synchronisation zu überspringen, wenn das RAID erstellt wird, und ich habe Empfehlungen dafür erhalten, falls ein oder mehrere zugrunde liegende Geräte SSD sind. Ich weiß nicht, ob Szenarien existieren, in denen die Synchronisation für den korrekten Betrieb erforderlich ist.
Kasperd

Antworten:

2

Eine anfängliche Synchronisation ist erforderlich, da Unterschiede zwischen den Spiegeln während der regelmäßigen Überprüfung als Fehler angezeigt werden.

Und Sie sollten regelmäßige Überprüfungen durchführen.

Simon Richter
quelle
1
Ich kann sehen, warum regelmäßige Überprüfungen der Lesbarkeit von Daten nützlich sein können. Aber was nützt eine regelmäßige Überprüfung, ob die Replikate identisch sind? Solche Überprüfungen können nützlich sein, wenn sie von einem Dateisystem durchgeführt werden, das die Daten prüft. Auf der RAID-Ebene ohne Dateisystemkenntnisse können Sie jedoch nicht wissen, welche der beiden verschiedenen Replikate gut ist, Sie können nicht wissen, wie die Diskrepanz überhaupt aufgetreten ist, und Sie können nicht wissen, welche Datei (falls vorhanden) betroffen ist. Es scheint also, dass Warnungen über Inkonsistenzen auf dieser Ebene größtenteils nutzlos sind, da der Administrator mit den Warnungen sowieso nichts anfangen kann.
Kasperd
Da Sie die Daten ohnehin lesen müssen, sind die Kosten für den Vergleich minimal, aber es kann Ihnen zeigen, dass auf einer der Festplatten ein ansonsten unentdecktes Problem aufgetreten ist (z. B. fehlerhafter RAM im eigenen Cache des Laufwerks). Der Administrator würde dann das Array aufteilen, die Unterschiede manuell prüfen und auswählen, welches Laufwerk ersetzt werden soll.
Simon Richter
Sie sollten das dann in Ihrer Antwort erweitern.
Kasperd
Ich weiß, dass es viele Jahre her ist, aber dies ist der einzig gültige Grund, den ich sehen kann. Ich denke nicht, dass es anders wichtig ist, wenn die Daten nicht synchron sind, da diese Daten per Definition noch nicht geschrieben wurden, sodass das auf das RAID-Laufwerk angewendete Dateisystem niemals aus diesen Blöcken lesen wird. Dies ist jedoch erforderlich, um sicherzustellen, dass die regelmäßigen Überprüfungen von Anfang an erfolgreich sind. Vielen Dank!
Michael Graff
7

Raid 1 ist ein Spiegel und hängt davon ab, dass alle Festplatten in einem Spiegel exakte Kopien voneinander sind. Nehmen Sie Ihre zufällige Festplatte und eine andere zufällige Festplatte, und Sie haben dort möglicherweise andere Daten, was gegen diese Vermutung verstößt. Aus diesem Grund ist eine Initialisierung erforderlich. Es kopiert einfach den Inhalt des ersten Laufwerks auf andere. Beachten Sie, dass Sie unter bestimmten Umständen davonkommen können, die Laufwerke nicht zu initialisieren - normalerweise haben werkseitig neue Geräte bereits überall Nullen, sodass Sie dies einfach ignorieren können. Die mdadmOption --assume-cleantut dies, warnt Sie jedoch:

   --assume-clean

Teilen Sie mdadm mit, dass das Array bereits vorhanden war und als sauber bekannt ist. Dies kann hilfreich sein, wenn Sie versuchen, einen schwerwiegenden Fehler zu beheben, da Sie sicher sein können, dass keine Daten betroffen sind, es sei denn, Sie schreiben tatsächlich in das Array. Es kann auch beim Erstellen eines RAID1 oder RAID10 verwendet werden, wenn Sie die anfängliche Neusynchronisierung vermeiden möchten. Diese Vorgehensweise wird jedoch - obwohl sie normalerweise sicher ist - nicht empfohlen. Verwenden Sie dies nur, wenn Sie wirklich wissen, was Sie tun.

Wenn Sie dies nicht tun, besteht eine Diskrepanz zwischen den Laufwerken und dem gelesenen Laufwerk. Es ist nicht bekannt, was das Laufwerk lesen wird. Sie sollten mit einem Dateisystem ziemlich sicher sein (siehe Hinweis unten), da Sie höchstwahrscheinlich schreiben werden, bevor Sie etwas von diesem Gerät lesen, und dann sind Sie klar.

Beachten Sie, dass mindestens Linux mdadmdas Array im Hintergrund initialisiert. Sie können FS in der ersten Sekunde glücklich darüber erstellen. Die Leistung wird leiden, bis die Initialisierung abgeschlossen ist, aber das ist alles.

Aber:

a) mkfsÜberprüfen Sie bei einigen Dienstprogrammen, ob sich bereits etwas auf diesem Laufwerk befindet. Während dies nur einige bekannte Laufwerksbereiche berührt, wird es gelesen, bevor Sie etwas schreiben, wodurch Sie in Gefahr geraten.

b) Wenn Sie Ihr Array regelmäßig neu synchronisieren, kennt das RAID-Gerät nichts von Ihrem FS. Es liest einfach jeden Block von jedem Gerät und vergleicht diese. Und wenn Sie kein Copy-on-Write-FS (z. B. ZFS oder BTRFS) verwenden und Ihr FS niemals füllen, ist es durchaus plausibel, dass ein Block aus FS-Sicht jahrelang nicht initialisiert bleibt.

Warum erneut mit RAID1-Geräten synchronisieren?

Aus dem gleichen Grund synchronisieren Sie erneut mit RAID5-Geräten oder einem anderen Level (außer RAID0). Es liest alle Daten und vergleicht / überprüft RAID-Prüfsummen (in RAID 5 oder 6). Wenn ein Bit in irgendeiner Weise umgedreht wurde (weil der HD-Speicher spontan umgedreht wurde, weil die Handys von Ihnen und Ihren 5 Nachbarn versehentlich in diesen bestimmten Bereich der Platte eingegriffen haben, was auch immer), erkennt es Inkonsistenzen, kann dies jedoch nicht dir helfen. Wenn, OTOH, eine der Festplatten einfach "Ich kann diesen Block nicht lesen" meldet, was bei einem fehlerhaften Laufwerk wahrscheinlicher ist, haben Sie gerade einen Fehler frühzeitig erkannt und die Zeit verkürzt, die Sie im verschlechterten Modus ausführen (Zählen ab der Laufwerksfehler, nicht ab dem Zeitpunkt, an dem Sie ihn bemerken). Raid hilft dir nicht, wenn ein Laufwerk ausfällt und einen Monat später das andere ausfällt, wenn du es nicht tust.

RAID10

Für RAID10 gilt nun alles oben Genannte. Immerhin ist RAID10 nur eine clevere Art zu sagen, dass ich meine beiden RAID1-Geräte in ein RAID0-Paar stecke.

Vorbehalt:

Das ist alles undefiniertes Verhalten. Warum ich unter Linux überprüft habe, verwenden mdadmandere Software-RAID-Implementierungen möglicherweise anders. Andere Versionen des Linux-Kernels und / oder mdadm-Tools als die von mir verwendeten verhalten sich möglicherweise auch anders.

Torinthiel
quelle
1
Bitte geben Sie ein Zitat für If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Ich glaube, dass diese Aussage falsch ist. Geben Sie zumindest ein Beispiel für die Fehlermeldung an, sodass Sie die Quelle konsultieren können, um zu überprüfen, unter welchen Umständen sie erzeugt wird.
Kasperd
1
Das ist besser. Haben Sie die Aussage zum Schreiben von Nullen überprüft? Ich denke, es schreibt keine Nullen, sondern kopiert eine der Festplatten auf die andere (n).
Kasperd
1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.In Gefahr von was? Mir ist klar, dass das Lesen zu irgendetwas führen kann, aber warum würde dies zu einer Gefahr für den Benutzer führen, wenn (a) die gelesenen Informationen nirgendwo verwendet werden und (b) ein Schreibvorgang bevorsteht?
Vegard
1
@kasperd Sie haben Recht, es kopiert das erste Gerät auf das zweite. Ein Test auf einem urandominitialisierten Gerät mit Linux mdadm zeigt, dass die ersten 80k sowie die letzten 48k unterschiedlich bleiben. Letzteres ist wahrscheinlich auf die Rundung der RAID-Größe auf die Blockgröße zurückzuführen. Ich habe nicht mit verschiedenen Gerätegrößen getestet, aber der 80 + 48 ist genau der Größenunterschied zwischen dem RAID-Gerät und dem zugrunde liegenden Blockgerät.
Torinthiel
1
Eine zu berücksichtigende Sache ist, dass das RAID-System normalerweise während der Initialisierung IMMER Datenträger A liest und auf Datenträger B kopiert. Warum? Da Sie die Festplatte während der Initialisierung verwenden können, haben Sie möglicherweise Daten in Block 100.000 geschrieben. Sobald der Raid-Init diesen Block erreicht hat, sind sowohl A als auch B bereits identisch, sodass nichts passiert. Wenn stattdessen Blöcke auf Null gesetzt würden, würden gute Daten gelöscht. Daher sehe ich wieder zwei Gründe, um sicherzustellen, dass die Blöcke identisch sind: "Es wurde immer getan" und "Damit Sie später eine Prüfung durchführen können" - ich bezweifle auch die Nützlichkeit dieser Prüfung. Lesen ist gut, vergleichen? nicht sicher.
Michael Graff
5

Denken Sie daran, dass RAID 1 ein Spiegel und RAID 10 ein Spiegelstreifen ist.

Die Frage ist, auf welcher Festplatte in jedem Spiegel die Daten gültig sind. In einem frisch erstellten Array kann dies nicht bekannt sein, da die Datenträger möglicherweise unterschiedliche Daten enthalten.

Denken Sie auch daran, dass RAID auf einem sehr niedrigen Niveau arbeitet. Es weiß nichts über Dateisysteme oder welche Daten auch immer auf der Festplatte gespeichert sein könnten. Es könnte nicht einmal sein ein Dateisystem im Einsatz.

Somit besteht die Initialisierung in diesen Arrays darin, dass die Daten von einer Platte in jedem Spiegel unverändert auf die andere Platte kopiert werden.

Dies bedeutet auch, dass das Array ab dem Zeitpunkt der Erstellung sicher verwendet werden kann und im Hintergrund initialisiert werden kann. Die meisten RAID-Controller (und Linux mdraid) haben eine Option dafür oder tun dies automatisch.

Michael Hampton
quelle
Kommentare sind nicht für eine ausführliche Diskussion gedacht. Dieses Gespräch wurde in den Chat verschoben .
Michael Hampton
1

Einfach ausgedrückt, da von zwei neuen Festplatten nicht erwartet wird, dass sie von Anfang an spiegelglatte Kopien voneinander sind.

Sie müssen in perfekte Kopien voneinander verwandelt werden.

Darüber hinaus umfasst die Initialisierung das Einrichten des Metadaten-Superblocks mit Informationen zur Array-Konfiguration.

Die Datei / proc / mdstat sollte Ihnen mitteilen, dass das Gerät gestartet wurde, dass der Spiegel rekonstruiert wird und eine ETA des Abschlusses der Rekonstruktion. Die Rekonstruktion erfolgt unter Verwendung der freien E / A-Bandbreite. Ihr System sollte also weiterhin reagieren, obwohl Ihre Festplatten-LEDs auch viel Aktivität anzeigen.

Der Rekonstruktionsprozess ist transparent, sodass Sie das Gerät tatsächlich verwenden können, obwohl der Spiegel gerade rekonstruiert wird.

HBruijn
quelle
2
Aber warum müssen sie perfekte Kopien voneinander sein? Was könnte daran liegen, dass die beiden in Sektoren inkonsistent sind, die vom Dateisystem nie verwendet wurden?
Kasperd
@kasperd RAID wird auf einer niedrigeren Ebene als jedes andere Dateisystem implementiert. Es stellt sich also die Frage, auf welches "Dateisystem" Sie sich beziehen.
Taemyr
@Taemyr Ich beziehe mich nicht auf ein bestimmtes Dateisystem. Wählen Sie aus, was Sie bevorzugen, und erklären Sie, was durch die Verwendung auf einem RAID-1, bei dem die Replikate vor der Initialisierung des Dateisystems nicht synchronisiert wurden, beschädigt werden würde.
Kasperd
@kasperd Auf der Ebene, auf der RAID ausgeführt wird, gibt es kein Dateisystem, das unterbrochen werden könnte .
Taemyr
1
In meinem Fall ist es mir als Originalposter egal, welches Dateisystem verwendet wird. Ich kenne keine Dateisysteme, die Sektoren lesen, in die noch nie geschrieben wurde, daher spielt ein unbestimmter Zustand dieser ungeschriebenen Sektoren keine Rolle.
Michael Graff