RAID-Verfahren mit Fehlerkorrektur
Zwar bietet Mirroring perfekte Redundanz, verursacht jedoch gleichzeitig einen hohen Overhead und entsprechend hohe Kosten. Um diesen Nachteil zu beheben, arbeiten die RAID-Level 2 bis 7 mit Fehlerkorrektur. Sie verteilen zunächst die Nutzdaten per Striping auf wenigstens zwei Datenlaufwerke. Aus deren Dateninhalt wird anschließend ein Korrekturwert errechnet, mit dessen Hilfe sich nach einem Ausfall die Daten des defekten Laufwerks wieder rekonstruieren lassen. Dieser ECC-Code wird auf einem eigenen Parity-Laufwerk abgelegt.
Dabei setzt RAID auf eines der ältesten Verfahren zur Fehlerkorrektur, die Paritätsprüfung. Dazu verknüpft es die Daten der Nutzlaufwerke über eine logische Exklusiv-Oder-Operation (XOR) und speichert das Resultat auf einem eigenen Parity-Laufwerk. Das Ergebnis der Verknüpfung ist dann 1, wenn eine ungerade Anzahl von Bitstellen eine 1 aufweist. Bei einer geraden Anzahl dagegen ist das Ergebnis 0:
Laufwerk | Inhalt |
---|---|
Laufwerk A | 11101100 |
Laufwerk B | 10110011 |
Laufwerk C | 01001101 |
Parity-Laufwerk | 00010010 |
Fällt nun ein beliebiges Laufwerk aus, lassen sich durch ein erneutes XOR die verloren gegangenen Daten problemlos rekonstruieren:
vor dem Ausfall | Ausfall eines Datenlaufwerks | Ausfall des Parity-Laufwerks | |
---|---|---|---|
Laufwerk A | 11101100 | 11101100 | 11101100 |
Laufwerk B | 10110011 | xxxxxxx | 10110011 |
Laufwerk C | 01001101 | 01001101 | 01001101 |
Parity-Laufwerk | 00010010 | 00010010 | xxxxxxx |
Datenrekonstruktion | 10110011 | 00010010 |
ECC-Overhead bei Schreiboperationen
Zwar reduzieren die paritätsbasierten RAID-Varianten den für die Datensicherheit notwendigen Kapazitäts-Overhead deutlich. Er beträgt maximal ein Drittel, bei Verwendung mehrerer Nutzdatenlaufwerke sinkt er weiter ab. Andererseits erfordert das Update der Parity-Informationen beim Speichern von Daten zusätzliche Schreib- und Lesezugriffe.
Die Aktualisierung der ECC-Informationen kann auf zwei Wegen erfolgen. In der einfacheren Variante schreibt der RAID-Controller nach dem Eintreffen eines neuen Datenblocks diesen zunächst auf ein Laufwerk. Anschließend liest er die von der Operation betroffenen Blöcke aller Laufwerke ein, errechnet die resultierende Parity und schreibt diese zurück auf das ECC-Laufwerk. Diese Methode erfordert pro Schreiboperation einen zusätzlichen Zugriff auf alle Platten des Verbunds.
In der komplexeren Variante des Updates liest der Controller zunächst lediglich den zu überschreibenden Datenblock ein. Nun berechnet er per XOR, an welchen Stellen sich ein Bit geändert hat. Anschließend liest er den alten ECC-Block und verknüpft ihn erneut per XOR mit dem zuvor gewonnenen Resultat. Als Ergebnis erhält er den neuen Parity-Block und kann diesen zurückspeichern. Anders als bei der ersten Update-Methode müssen hier nur zwei Laufwerke des Arrays angesprochen werden.