Was würde passieren, wenn ein RAID 1 zwei verschiedene Dateiversionen enthielte?

Was würde passieren, wenn ein RAID 1 zwei verschiedene Dateiversionen enthielte?

Nehmen wir an, eine HardwareRAID 1Controller mit FestplattenAUndBwurde offline genommen und eine auf beiden Datenträgern vorhandene Datei wurde auf dem Datenträger geändertB(alles im Offline-Zustand). Was passiert, wenn der RAID-Controller wieder eingeschaltet wird und der Benutzer die geänderte Datei anfordert? Ich gehe davon aus, dass die meisten RAID 1-Controller keine Fehler erkennen, bis sie versuchen, aus dieser Datei zu lesen.

  1. Erkennt der RAID-Controller einen Unterschied bei Dateigröße/Datum/Signatur und meldet deshalb einen Fehler, oder übergibt er den Inhalt einer der beiden Festplatten für diese Datei, ohne von den Änderungen zu wissen?

  2. Würde das Betriebssystem irgendwelche Fehler erkennen?

  3. Würde sich ein Software-RAID-1-Controller anders verhalten?

  4. Und schließlich in jedem RAID 1-Array vonNFestplatten, von welcher(n) Festplatte(n) liest das Betriebssystem oder der Controller eigentlich? Alle N? Verwenden manche RAID-Controller immerDatenträger 0, wählen sie zufällig eine Festplatte aus oder haben sie Zugriff auf das Dateisystem und überprüfen die Integrität (auch wenn die Festplatte verschlüsselt ist)?

Antwort1

"Haben sie Zugriff auf das Dateisystem und prüfen die Integrität (auch wenn die Festplatte verschlüsselt ist)?" Nein. Der RAID-Controllerkennt sich nicht mit Dateien aus– es gibt nur vor, ein Festplattencontroller zu sein, und es befasst sich nur mit Blöcken (Sektoren). Und da die einzelnen Sektoren auf beiden Festplatten korrekt geschrieben wurden, gibt esSindAuf Blockebene sind keine Fehler erkennbar.

Ich weiß nicht, ob es Informationen darüber gibt, wie Hardware-RAID-Controller mit nicht übereinstimmenden Spiegeln umgehen würden. NeilBrown – der langjährige Entwickler von LinuxmdraidSoftware-RAID-Funktion – hatdieser LWN-KommentarErklärung, wie mdraid damit umgehen würde:

[...] Wenn zwei Geräte in einem RAID1 nicht identische Daten enthalten oder wenn die Summe der Daten in einem RAID4/5/6 nicht mit den Paritätsblöcken übereinstimmt, handelt es sich um eine Inkonsistenz und nicht um eine Beschädigung. Die
wahrscheinlichste Erklärung ist, dass auf mehrere Geräte im Array geschrieben wurde, als etwas schiefging (z. B. Stromausfall) und einige Schreibvorgänge erfolgreich waren, während andere nicht erfolgreich waren. Es spielt keine Rolle, welche erfolgreich waren und welche nicht.

In diesem Fall ist KEINER DER BLOCK FALSCH. Ich muss das noch einmal sagen. BEIDE BLÖCKE SIND RICHTIG. Sie sind nur zu unterschiedlichen Zeitpunkten richtig.
Es liegt hier KEINE BESCHÄDIGUNG vor, es liegt nur eine Inkonsistenz vor.
Jeder Block enthält entweder die neuen oder die alten Daten, und beide sind in gewisser Weise richtig.
(Wenn ein Block nur zur Hälfte auf das Gerät geschrieben wurde, was möglich ist, wenn das Gerät keinen ausreichend großen Kondensator hat, dann würden Sie einen Lesefehler erhalten, weil der CRC nicht richtig wäre. Wenn Sie einen CRC-Fehler erhalten, weiß md/raid, dass die Daten falsch sind – und kann die Daten trotzdem nicht lesen).

Bei RAID1 ist es WIRKLICH EGAL, welches Gerät verwendet wird und bei welchem ​​Gerät die Daten ersetzt werden. md wählt willkürlich das früheste in der Liste der Geräte aus.
Bei einem Paritätsarray ist es sinnvoll, die Daten zu verwenden und die Parität zu ignorieren, da die Verwendung der Parität Ihnen nicht sagt, mit welchem ​​anderen Gerät es inkonsistent ist. (Wenn Sie Grund zu der Annahme haben, dass die Parität möglicherweise nicht mit den Daten übereinstimmt und einer der Datenblöcke fehlt – defektes Gerät –, können Sie weder Datum noch Parität verwenden und Sie haben ein „Schreibloch“).


Würde das Betriebssystem also Fehler erkennen? Dies hängt davon ab, welches Dateisystem auf den Festplatten verwendet wird und ob die inkonsistenten Sektoren zu Dateien oder den eigenen Metadaten des Dateisystems gehörten. Wenn es eine Inkonsistenz in einem Metadatensektor gäbe, wäre es wahrscheinlicher, dass sie erkannt würde – in den meisten Fällen würde sie jedoch als allgemeine Beschädigung des Dateisystems und nicht als RAID-Inkonsistenz gemeldet.

Bei Dateien ist dies weniger wahrscheinlich, da die meisten Dateisysteme überhaupt keine Prüfsummen für Dateiinhalte erstellen – Sie erhalten, was sie von der Festplatte lesen. Es gibt nur wenige Ausnahmen wie Btrfs, ZFS oder ReFS, die Prüfsummen erstellen.

Einige davon (Btrfs, ZFS) verfügen sogar über eine eigene Funktion zur Festplattenspiegelung, die gegenüber Hardware-RAID den Vorteil hat, dass das Dateisystemweißwelche Festplatte fehlerhafte Daten enthält, und kann die Datei automatisch reparieren, indem sie von der anderen Festplatte liest. Bei Hardware-RAID hätten sie jedoch keine Möglichkeit, den RAID-Controller nach „der anderen Version“ zu fragen, und eine Reparatur wäre nicht möglich.


Würde sich ein Software-RAID-1-Controller anders verhalten? Das könnte der Fall sein (siehe den oben zitierten LWN-Kommentar), es gibt jedoch noch einen weiteren wichtigen Unterschied.

Bei Software-RAID (und auch bei der Spiegelung von Dateisystemen) enthalten die Festplatten selbst Informationen über ihre Zugehörigkeit zu einem Spiegelsatz. Wenn Sie also eine Festplatte woanders hin verschieben, wird sie immer noch als Teil eines unvollständigen RAID-1-Arrays erkannt und normalerweise lässt die Software überhaupt kein Beschreiben zu – sie bleibt schreibgeschützt, sofern Sie den Spiegel nicht auflösen.

verwandte Informationen