RAID-6-Support

Virtuelle Images (VIM-Dateien)

VIM-Support für RAID-6-Schemata

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.

XOR-basiertes RAID-6-Schema

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. 

    Horizontales und vertikales XOR

  • 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
     :  :  :  :  :  :  :
    *) Sektoren, Zyklen und Streifen basieren auf 0,
    Blöcke und Laufwerke basieren auf 1
    **) Die Blöcke B1, B2, B3, B4, ... sind Daten in den
    ersten 128 globalen Sektoren (0-127),
    zweiten 128 globalen Sektoren (128-255),
    dritten 128 globalen Sektoren (256-383),
    vierten 128 globalen Sektoren (384-511), usw.
    ***) P1 ist Parität für die Blöcke B3,B4,
    P2 ist Parität für die Blöcke B1,B4,
    P3 is Parität für die Blöcke B1,B2,
    P4 ist Parität für die Blöcke B2,B3, innerhalb des vorherigen Streifens.

    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.

Reed-Solomon RAID-6-Schema

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-Fehlerkorrektur

  • 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
     :  :  :  :  :  :  :  :  :
    *) Sektoren, Zyklen und Streifen basieren auf 0,
    Blöcke und Laufwerke basieren auf 1
    **) Die Blöcke B1, B2, B3, B4, ... sind Daten in den
    ersten 128 globalen Sektoren (0-127),
    zweiten 128 globalen Sektoren (128-255),
    dritten 128 globalen Sektoren (256-383),
    vierten 128 globalen Sektoren (384-511), usw.

    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 !r?r3r6r4r5 bzw. ?r!r3r6r4r5. Hier sind die vollständigen Vektoren für alle Streifen:

        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)

© 2024 Runtime Software