RAID Reconstructor unterstützt RAID-6-Arrays nicht direkt; es kann eine RAID-6-Konfiguration nicht automatisch finden. Mit etwas Wissen über Ihr RAID-6 können Sie jedoch ein virtuelles Image (VIM-Datei) erstellen, mit dem Sie das RAID-6 nach dem Ausfall von bis zu zwei Laufwerken wiederherstellen können. Unser gesamtes Sortiment an Datenrettungssoftware unterstützt virtuelle Images. Sobald Sie eine VIM-Datei erstellt haben, können Sie diese zum Mounten, Klonen, Abbilden oder Wiederherstellen von Daten von Ihrem RAID-6 verwenden. Derzeit unterstützen die folgenden Softwareversionen VIM-Dateien für RAID-6: DiskExplorer X V2.01, GetDataBack Pro V5.63, RAID Reconstructor V5.13, DriveMap V0.11 BETA, DriveDoppel V0.91 BETA.
Die virtuellen Images von Runtime unterstützen zwei unterschiedliche RAID-6-Schemata. Das erste ist ein reines XOR-basiertes Schema, bei dem Laufwerke auf verschiedene Weise XOR-verknüpft werden, um das Array gegen einen Ausfall von bis zu zwei Laufwerken abzusichern. Wir werden uns ein reales Beispiel eines RAID-6 ansehen, das aus 4 Laufwerken auf einem Adaptec AIC-9405W-Controller besteht.
Das zweite Schema ist eine Reed-Solomon-Implementierung, die ein Laufwerk für die XOR-Parität im RAID-5-Stil und ein zweites für die Reed-Solomon-Parität verwendet. Wir werden uns ein Beispiel eines RAID-6 mit 6 Laufwerken auf einem RocketRaid 4520SGL-Controller ansehen.
Für beide RAID-6-Schemata zeigen wir Ihnen, wie Sie die VIM-Datei erstellen, um das Array nach dem Ausfall von 0, 1 oder 2 Laufwerken wiederherzustellen.
Dieses Schema verwendet nur XOR und ist daher leicht zu analysieren. Der RAID-Controller wählt Daten- und Paritätsblöcke so aus, dass sie alle horizontal und vertikal über die Laufwerke verteilt sind, sodass Sie nach einem Ausfall von zwei Laufwerken eine Wiederherstellung durchführen können.
Mehrdimensional XOR-basiert | ||||||||||||
Beispiel: RAID-6, 4 Laufwerke, Blockgröße 128 auf Adaptec AIC-9405W | ||||||||||||
Lokaler Laufwerks- Sektor*)\ |
Laufwerk 1 | Laufwerk 2 | Laufwerk 3 | Laufwerk 4 | Zyklus | Streifen | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0-127 | B1 **) | B2 | B3 | B4 | 0 | 0 | ||||||
128-255 | P1***) | P2 | P3 | P4 | 1 | |||||||
256-383 | B5 | B6 | B7 | B8 | 1 | 0 | ||||||
384-511 | P5 | P6 | P7 | P8 | 1 | |||||||
: | : | : | : | : | : | : | ||||||
|
Streifen wechseln zwischen reinen Datenblöcken und Paritätsblöcken:
B3 xor B4 => P1
B1 xor B4 => P2
B1 xor B2 => P3
B2 xor B3 => P4
Diese Paritäten stellen sicher, dass selbst der Verlust von zwei beliebigen Laufwerken behoben werden kann. Wenn beispielsweise Laufwerk 1 und Laufwerk 2 ausfallen, können Sie B2
aus B3 xor P4
und dann B1
aus B2 xor P3
neu erstellen.
VIM zum Extrahieren der Daten wenn alle Laufwerke vorhanden sind:
<virtualimage>
<loop>
<drive>...ada_1.img: </drive>
<drive>...ada_2.img: </drive>
<drive>...ada_3.img: </drive>
<drive>...ada_4.img: </drive>
<cycle blocksize="128">
<stripe>1,2,3,4</stripe>
<stripe></stripe>
</cycle>
</loop>
</virtualimage>
Wenn kein Laufwerk fehlt, können wir die Daten einfach aus den Datenblöcken jedes Streifens abrufen.
Der erste Streifen ruft 128 Sektoren von jedem Laufwerk in der Reihenfolge Laufwerk 1, 2, 3, und 4 ab. Der nächste Streifen ist leer und enthält nur die Paritäten, die wir hier nicht benötigen. Der leere Streifen erhöht den Sektorzähler um 128 auf 256, sodass der erste Streifen in der nächsten Zyklus-Iteration erneut Daten von den Laufwerken 1, 2, 3, und 4 zurückgibt.
VIM zum Extrahieren der Daten nach Ausfall eines Laufwerks:
<virtualimage>
<loop>
<drive>...ada_1.img: </drive>
<drive>...ada_2.img: </drive>
<drive>...ada_3.img: </drive>
<drive>...ada_4.img: </drive>
<cycle blocksize="128">
<stripe>2x3(1),2,3,4</stripe>
<stripe></stripe>
</cycle>
</loop>
</virtualimage>
Unter der Annahme, dass Laufwerk 1 fehlt, können wir das Laufwerk neu erstellen, indem wir jedes Vorkommen von Laufwerk 1 durch B2 xor P3
ersetzen.
Da sich P3
im nächsten Streifen befindet, müssen wir in unserem Streifen-Ausdruck einen Blick nach vorne werfen. Dies erreichen wir mit 3(1)
, was "Laufwerk 3 im nächsten Streifen" bedeutet. Unser Streifen-Ausdruck 2x3(1),2,3,4
ruft 128 Sektoren von Laufwerk 2 ab, xor-iert dies mit dem Inhalt von Laufwerk 3 128 Sektoren voraus, und sammelt dann die verbleibenden Laufwerke 2, 3, und 4 ein. Der nächste Streifen ist wieder leer, da wir mit der Vorschau schon alles gesammelt haben, was wir brauchen. Der leere Streifen erhöht den Sektorzähler um 128 auf 256, sodass der erste Streifen in der nächsten Zyklus-Iteration wieder Daten von 2x3(1),2,3,4
abruft.
VIM zum Extrahieren der Daten nach dem Ausfall zweier Laufwerke:
<virtualimage>
<loop>
<drive>...ada_1.img: </drive>
<drive>...ada_2.img: </drive>
<drive>...ada_3.img: </drive>
<drive>...ada_4.img: </drive>
<cycle blocksize="128">
<stripe>3x4(1)x3(1),3x4(1),3,4
</stripe>
<stripe></stripe>
</cycle>
</loop>
</virtualimage>
Unter der Annahme, dass die Laufwerke 1 und 2 fehlen, können wir die Laufwerke neu erstellen, indem wir die Vorkommen von Laufwerk 2 durch B3 xor P4
und Laufwerk 1 durch B2 xor P3
ersetzen.
Da sich P3
und P4
im nächsten Streifen befinden, müssen wir in unserem Streifen-Ausdruck erneut einen Blick nach vorne werfen. Dies wird mit 3(1)
und 4(1)
realisiert, die "Laufwerk 3 im nächsten Streifen" bzw. "Laufwerk 4 im nächsten Streifen" bedeuten. Unser Streifen-Ausdruck 3x4(1)x3(1),3x4(1),3,4
ruft Laufwerk 2 mittels 3x4(1)
ab und Laufwerk 1 mittels des gerade abgerufenen Laufwerks 2, das mit 3x4(1)
xor-verknüpft wird.
Der nächste Streifen ist wieder leer, da wir mit der Vorausschau bereits eingesammelt haben, was wir brauchen. Der leere Streifen erhöht den Sektorzähler um 128 auf 256, sodass der erste Streifen in der nächsten Zyklus-Iteration wieder Daten von 3x4(1)x3(1),3x4(1),3,4
zurückgibt.
Dieses Schema verwendet zwei unterschiedliche Paritätsalgorithmen für Datenblöcke, nämlich XOR und Reed-Solomon-Fehlerkorrektur, was eine Redundanz von zwei Laufwerken ermöglicht. RS ist elegant und ermöglicht die Rotation beider Paritätsblöcke P und R über die Laufwerke, ohne dass die Paritätsblöcke in speziellen Streifen gespeichert werden müssen. Andererseits ist RS komplizierter zu berechnen als XOR. RS ist nicht kommutativ, XOR hingegen schon.
Reed-Solomon und XOR-basiert | ||||||||||||
Beispiel: RAID-6, 6 Laufwerke, Blockgröße 128 auf einem RocketRaid 4520SGL-Controller | ||||||||||||
Lokales Laufwerk Sektor*)\ |
Laufwerk 1 | Laufwerk 2 | Laufwerk 3 | Laufwerk 4 | Laufwerk 5 | Laufwerk 6 | Zyklus | Streifen | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0-127 | B1 **) | B2 | B3 | B4 | P | R | 0 | 0 | ||||
128-255 | B5 | B6 | B7 | P | R | B8 | 1 | |||||
256-383 | B9 | B10 | P | R | B11 | B12 | 2 | |||||
384-511 | B13 | P | R | B14 | B15 | B16 | 3 | |||||
512-639 | P | R | B17 | B18 | B19 | B20 | 4 | |||||
640-767 | R | B21 | B22 | B23 | B24 | P | 5 | |||||
768-895 | B25 | B26 | B27 | B28 | P | R | 1 | 0 | ||||
896-1023 | B29 | B30 | B31 | P | R | B32 | 1 | |||||
: | : | : | : | : | : | : | : | : | ||||
|
Alle Beziehungen zwischen Daten- und Paritätsblöcken werden innerhalb desselben Streifens ausgedrückt. Es gibt keine Vorausschau wie im vorherigen Schema. Hier sind die Beziehungen:
Streifen 0: B1 xor B2 xor B3 xor B4 => P
B1 rs B2 rs B3 rs B4 => R
Streifen 1: B5 xor B6 xor B7 xor B8 => P
B5 rs B6 rs B7 rs B8 => R
Streifen 2: B9 xor B10 xor B11 xor B12 => P
B9 rs B10 rs B11 rs B12 => R
usw.
Wie Sie sehen, können Ausfälle einzelner Laufwerke leicht mit P behoben werden. Wenn Sie nach einem Ausfall zweier Laufwerke eine Wiederherstellung durchführen müssen, benötigen Sie ebenfalls R. Wir werden später zeigen, wie man beide Operationen, XOR und RS, in eine VIM-Datei einbinden kann.
VIM zum Extrahieren der Daten mit allen Laufwerken:
<virtualimage>
<loop>
<drive>...high_1.img: </drive>
<drive>...high_2.img: </drive>
<drive>...high_3.img: </drive>
<drive>...high_4.img: </drive>
<drive>...high_5.img: </drive>
<drive>...high_6.img: </drive>
<cycle blocksize="128">
<stripe>1,2,3,4</stripe>
<stripe>1,2,3,6</stripe>
<stripe>1,2,5,6</stripe>
<stripe>1,4,5,6</stripe>
<stripe>3,4,5,6</stripe>
<stripe>2,3,4,5</stripe>
</cycle>
</loop>
</virtualimage>
Wenn kein Laufwerk fehlt, können wir die Daten einfach aus den Datenblöcken jedes Streifens abrufen. Beziehen Sie sich auf die Reed-Solomon-Rotationstabelle, um die Datenlaufwerke für jeden Streifen zu bestimmen: Sie sind 1,2,3,4
für Streifen 0, 1,2,3,6
für Streifen 1, 1,2,5,6
für Streifen 2, 1,4,5,6
für Streifen 3, 3,4,5,6
für Streifen 4 und 2,3,4,5
für Streifen 5.
Diese 6 Vektoren sind genau das, was Sie in dieser VIM-Datei sehen.
VIM zum Extrahieren der Daten nach Ausfall eines Laufwerks mittels Parität:
<virtualimage>
<loop>
<drive>...high_1.img: </drive>
<drive>...high_2.img: </drive>
<drive>...high_3.img: </drive>
<drive>...high_4.img: </drive>
<drive>...high_5.img: </drive>
<drive>...high_6.img: </drive>
<cycle blocksize="128">
<stripe>2x3x4x5,2,3,4</stripe>
<stripe>2x3x4x6,2,3,6</stripe>
<stripe>2x3x5x6,2,5,6</stripe>
<stripe>2x4x5x6,4,5,6</stripe>
<stripe>3,4,5,6</stripe>
<stripe>2,3,4,5</stripe>
</cycle>
</loop>
</virtualimage>
Wenn ein Laufwerk fehlt, können wir es neu erstellen, indem wir einfach die Parität P verwenden. In der Praxis xor-ieren wir P mit den verbliebenen Datenlaufwerken.
Unter der Annahme, dass Laufwerk 1 fehlt, schreiben wir die 6 Vektoren für unsere Streifen auf. Schauen Sie sich die Rotationstabelle an, im Streifen 0: von Laufwerk 1 bis Laufwerk 6 sind die Daten- und Paritätslaufwerke in der Reihenfolge DDDDPR angeordnet. Wir können das fehlende Laufwerk 1 durch 2x3x4x5 ersetzen. Die Laufwerke 2, 3 und 4 sind die verbliebenen DatenLaufwerke und P ist das XOR-Paritätslaufwerk dieses Streifens.
Streifen 0:
D,D,D,D,P,R -> 1,2,3,4,5,6 --(ersetzt 1 durch 2x3x4x5)-> 2x3x4x5,2,3,4
Streifen 1:
D,D,D,P,R,D -> 1,2,3,4,5,6 --(ersetze 1 durch 2x3x4x6)-> 2x3x4x6,2,3,6
Streifen 2:
D,D,P,R,D,D -> 1,2,3,4,5,6 --(ersetze 1 durch 2x3x5x6)-> 2x3x5x6,2,5,6
Streifen 3:
D,P,R,D,D,D -> 1,2,3,4,5,6 --(ersetze 1 durch 2x4x5x6)-> 2x4x5x6,4,5,6
Streifen 4:
P,R,D,D,D,D -> 1,2,3,4,5,6 --(kein Ersetzen)-> 3,4,5,6
Streifen 5:
R,D,D,D,D,P -> 1,2,3,4,5,6 --(kein Ersetzen)-> 2,3,4,5
Die 6 Vektoren auf der rechten Seite sind unsere Streifen-Beschreibungen in der VIM-Datei.
VIM zum Extrahieren der Daten nach Ausfall eines Laufwerks mittels Reed-Solomon:
<virtualimage>
<loop>
<drive>...high_1.img: </drive>
<drive>...high_2.img: </drive>
<drive>...high_3.img: </drive>
<drive>...high_4.img: </drive>
<drive>...high_5.img: </drive>
<drive>...high_6.img: </drive>
<cycle blocksize="128">
<stripe>?r2r3r4r5r6,2,3,4</stripe>
<stripe>?r2r3r6r4r5,2,3,6</stripe>
<stripe>?r2r5r6r3r4,2,5,6</stripe>
<stripe>?r4r5r6r2r3,4,5,6</stripe>
<stripe>3,4,5,6</stripe>
<stripe>2,3,4,5</stripe>
</cycle>
</loop>
</virtualimage>
Mit dem Reed-Solomon-Algorithmus RS können wir auch den Ausfall eines einzelnen Laufwerks beheben. Wir definieren RS als Funktion auf allen Laufwerken, ob verfügbar oder nicht, in der richtigen Reihenfolge:
RS(D,D,D,D,P,R). Zur Verwendung in der VIM-Datei schreiben wir dies als DrDrDrDrPrR. Sehen Sie sich die Rotationstabelle an, um die Parameter durch die richtige Laufwerksnummer zu ersetzen:
Streifen 0: RS(1,2,3,4,5,6) -> 1r2r3r4r5r6
Streifen 1: RS(1,2,3,6,4,5) -> 1r2r3r6r4r5
Streifen 2: RS(1,2,5,6,3,4) -> 1r2r5r6r3r4
Streifen 3: RS(1,4,5,6,2,3) -> 1r4r5r6r2r3
Streifen 4: RS(3,4,5,6,1,2) -> 3r4r5r6r1r2
Streifen 5: RS(2,3,4,5,6,1) -> 2r3r4r5r6r1
Unter der Annahme, dass Laufwerk 1 fehlt, ersetzen wir den Laufwerks-Deskriptor ganz links durch den RS-Deskriptor für die ersten 4 Streifen. Die letzen 2 Streifen, müssen wieder nicht rekonstruiert werden. Ersetzen Sie vor dem Einfügen des RS-Deskriptors das fehlende Laufwerk durch ein ?. Dies gibt an, welche Ausgabe wir benötigen. Für Streifen 0, wird 1r2r3r4r5r6 zu ?r2r3r4r5r6.
VIM zum Extrahieren der Daten nach dem Ausfall zweier Laufwerke:
<virtualimage>
<loop>
<drive>...high_1.img: </drive>
<drive>...high_2.img: </drive>
<drive>...high_3.img: </drive>
<drive>...high_4.img: </drive>
<drive>...high_5.img: </drive>
<drive>...high_6.img: </drive>
<cycle blocksize="128">
<stripe>!r?r3r4r5r6,?r!r3r4r5r6,3,4 </stripe>
<stripe>!r?r3r6r4r5,?r!r3r6r4r5,3,6 </stripe>
<stripe>!r?r5r6r3r4,?r!r5r6r3r4,5,6 </stripe>
<stripe>!r4r5r6r?r3,4,5,6 </stripe>
<stripe>3,4,5,6 </stripe>
<stripe>3x4x5x6,3,4,5 </stripe>
</cycle>
</loop>
</virtualimage>
In diesem Absatz werden wir alles zusammenfassen: XOR und RS zur Wiederherstellung nach einem Ausfall zweier Laufwerke.
Unter der Annahme, dass die Laufwerke 1 und 2 fehlen, müssen wir die Laufwerks-Deskriptoren 1 und 2 im Streifen 0 ersetzen. Gemäß dem vorherigen Absatz lautet die RS-Funktion für den Streifen 0 1r2r3r4r5r6. Verwenden Sie ? und ! für die fehlenden Laufwerke, wobei ! das Laufwerk bezeichnet, das berechnet werden soll. Für den Streifen 1 lautet die RS-Funktion 1r2r3r6r4r5 und die Deskriptoren für Laufwerke 1 und 2 lauten
Streifen 0: 1r2r3r4r5r6 => 1,2,3,4 => !r?r3r4r5r6,?r!r3r4r5r6,3,4
Streifen 1: 1r2r3r6r4r5 => 1,2,3,6 => !r?r3r6r4r5,?r!r3r6r4r5,3,6
Streifen 2: 1r2r5r6r3r4 => 1,2,5,6 => !r?r5r6r3r4,?r!r5r6r3r4,5,6
Streifen 3: 1r4r5r6r2r3 => 1,4,5,6 => !r4r5r6r?r3,4,5,6
Streifen 4: 3r4r5r6r1r2 => 3,4,5,6 => 3,4,5,6
Streifen 5: 2r3r4r5r6r1 => 2,3,4,5 => 3x4x5x6,3,4,5 (oder !r3r4r5r6r?,3,4,5)