Wie berechnet man die RAID 6 Zusatz-Info?


09.09.2022, 19:05

die WP wusste es schon seit Januar... stand auf der „talk“ Seite...

Das Ergebnis basiert auf 6 Abstimmungen

WP liegt falsch. Lass uns der WP koordiniert Bescheid sagen. 50%
WP hat recht (optional: bitte begründen...) 33%
Die anderen Optionen passen nicht (optional: bitte begründen...) 17%
Halt die Klappe, Meg! 0%

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Die anderen Optionen passen nicht (optional: bitte begründen...)
Oder ist mein Englisch zu schlecht?

Nein, dein Englisch ist gut genug, aber wie du bereits erkannt hast, ist das Problem bekannt:

https://en.wikipedia.org/wiki/Talk:Standard_RAID_levels#RAID_6_Simplified_parity_scheme_is_wrong?

Sollte man das der Wikipedia mal sagen?

Wikipedia ist keine Zeitungsredaktion, o. ä., sondern lebt von ihren Nutzern, von daher gibt es auch niemanden, den du persönlich auf den Fehler hinweisen könntest - das Problem ist bekannt und wird derzeit noch diskutiert, wie bereits oben gesagt.

Ich hätte ja gesagt ändere das doch einfach, aber der Artikel auf den du dich beziehst ist aus der englischen Wikipedia - dort ist die Organisation etwas wirr im Gegensatz zur deutschen, von daher am besten die Finger von lassen, wenn man sich nicht 100% mit Inhalt und Grammatik sicher ist.

Mehr kannst du nicht machen. Beziehe deine Informationen am besten aus der deutschen Wikipedia, achte auch auf Weblinks/ Einzelnachweise und geh im Zweifel einfach einmal in eine Fachbibliothek.

LG

Woher ich das weiß:Hobby – Aktiver Sichter und Mitarbeiter der Redaktion Recht

LUKEars 
Fragesteller
 10.09.2022, 19:59

ok... in der deutschen WP steht was von diesem Reed-Solomon-Code... das ist ziemlich kompliziert... dann werd ich mal einfach glauben, dass unsere IT-Guys das richtig gemacht haben... ich verstehe den Quellcode nämlich kaum... aber es scheint zu funktionieren...

0
Halbrecht  11.09.2022, 00:26

du bist bei Wiki ?

von daher gibt es auch niemanden, den du persönlich auf den Fehler hinweisen könntest........................hat ja auch was für sich ( damit man bei politischen Artikeln nicht vollgek***t wird )

Mich ärgern vor allem die toten Links , die oft immer noch da sind , wenn es unten auf der Seite : zuletzt berarbeitet : heute : heißt.

PS :

bin ein Fan von Wiki ,dass ist keine pauschale Kritik .

0
ruhrgur  11.09.2022, 10:00
@Halbrecht
hat ja auch was für sich ( damit man bei politischen Artikeln nicht vollgek***t wird )

In der englischen Wikipedia ist so etwas ein großes Problem, bei uns in Deutschland zum Glück nicht, da hier nicht einfach jeder irgendetwas in einen Artikel reinschreiben kann; alle Änderungen müssen vorher gesichtet werden (im englischen WP ist dies nur bei einigen Artikeln der Fall). Auch was Quellen und Belege angeht ist die deutsche WP wesentlich strenger.

Mich ärgern vor allem die toten Links , die oft immer noch da sind , wenn es unten auf der Seite : zuletzt berarbeitet : heute : heißt.

So etwas sollte aber eigentlich nicht der Fall sein. Wenn dir so etwas auffällt, kannst du ja gerne mal in die Versionsgeschichte gucken und nachschauen, wer den Artikel zuletzt bearbeitet, bzw. wer die Änderung so freigegeben hat - tote Links soll es nur geben, wenn sie zu einem Artikel führen, der in der deutschen Wikipedia nicht existiert, aber entweder schon auf der englischen existiert oder aber sehr eindeutig relevant ist.

0
WP hat recht (optional: bitte begründen...)

Bin mir da nicht 100% sicher, aber ich glaube WP hat recht. Schau mal hier ab Seite 571. Ich verfüge leider nur über sehr rudimentäres Wissen in dem Bereich.

Würde allerdings einen Prof zu Rate ziehen.

https://tams.informatik.uni-hamburg.de/lectures/2020ws/vorlesung/rsb/doc/rsbWS20-p2.pdf

Woher ich das weiß:Berufserfahrung – Erfahrung seit 1996: Nebenberuflich Rep/Bau von PC Systemen.

LUKEars 
Fragesteller
 10.09.2022, 20:07

ey... dann spiel das Verfahren doch mal mit vier Platten durch:

D0 D1  P  Q
00 00 00 00
FF FF 00 00

wie willst du die beiden Zeilen jetzt unterscheiden, wenn du die Spalten D0 und D1 zuhälst? 😋

0
BigBenGermany  10.09.2022, 20:14
@LUKEars

Ja so auf den ersten Blick hast du Recht, man kann da nicht unterscheiden wenn D0 und D1 ausfallen.

1

Die Frage ist hier ob mit Shift ein einfacher Shift gemeint ist oder eine Rotation.

Der Shift um ein Bit bei 0xFF wäre ja dann 0xFE sofern man sich auf 8 Bit beschränkt was ja dann für die Parität mit Shift nicht mehr 0 liefern würde wenn mich jetzt nicht alles täuscht.

Ich muss aber zugeben, dass ich es jetzt allgemein nicht durchgerechnet habe.


LUKEars 
Fragesteller
 10.09.2022, 20:01

dann hätte aber das bit#0 gar keinen Einfluss... die meinen also ein „rotating shift“... steht übrigens auch ausdrücklich da...

0
Kelec  10.09.2022, 20:20
@LUKEars

Wenn geshiftet wird dann nicht, aber muss ja nicht zwingend sein.

Ja das mit dem rotating habe ich gerade gesehen.

In dem Fall gehts so nicht. Allgemein wirds aber wie dort auch erwähnt ist über einen Reed Solomon Block Code gemacht. Diese sind aber ähnlich wie hier implementiert nur dass nicht jedes Bit jederzeit verwendet wird. Das verhindert dann eben dass es bei korrigierbaren Fehlern zu so einem Fall kommt.

Im wesentlichen sind das nur normale Blockcodes wie zB der Hamming Code auch nur dass die auf Byteebene arbeiten.

0
LUKEars 
Fragesteller
 10.09.2022, 20:30
@Kelec

ja... ich habe mir einen code für 4+4 HDDs gebastelt, der in eine 128KiB Tabelle passt... der Code arbeitet mit halben Bytes... 4*4bit=16bit... und jedem der 65536 Werte werden durch die Tabelle 4*4bit für eine Hamming Distanz (bezogen auf ein Alphabet mit 16 paarweise verschiedenen Elementen...) von mindestens 5 zugeordnet...

0
Kelec  10.09.2022, 20:32
@LUKEars

Ja dann verwende ihn ;)

Allerdings solltest du vorher allgemein nachweisen dass das auch alles in jedem Fall so funktioniert.

Verwendets du ebenfalls einen Blockcode oder etwas anderes?

0
LUKEars 
Fragesteller
 10.09.2022, 20:35
@Kelec

ja klar...

void Luke() {
  X[0] = 0;
  for (uint32_t c=0; ; ) {
    uint64_t N = fetch(c);
    for (uint32_t i=c; i>0; ) {
      const uint64_t O = fetch(--i);
      uint8_t h = 0;
      for (uint64_t D=N^O; D; D>>=F)
        if (D&((1U<<F)-1)) h++;
      if (h<=R) {
        for (;; c--) {
          if ((1U<<B) > ++X[c]) break;
          if (c==0) return;
        }
        N=fetch(c); i=c;
      }
    }
    c++;
    if (c>M) { M=c; fprintf(stderr,"\r%u",M); fflush(stderr); }
    if (c==C) {
      fwrite(X,sizeof(*X),C,stdout);
      fprintf(stderr,"\r<<<<<<<<<<SUCCESS>>>>>>>>>>\n");
      exit(0);
    }
    X[c] = 0;
  }
}
0
Kelec  10.09.2022, 20:40
@LUKEars

Ich bin jetzt nicht unbedingt gewillt deinen Code zu lesen.

Was mich eher interessiert ist ob du einen normalen Blockcode verwendest oder eine ander Art der Fehlerkorrektur und wie du dann im Fehlerfall den Fehler erkennst und korrigierst.

Bei Blockcodes hast du dabei eben deine Generatormatrix welche sowohl garantiert, dass du den Code erzeugen kannst und weils eine lineare Operation ist, dass du die Transformation am Ende auch jedenfalls umkehren kannst.

Wenn dein Code zB nicht linear ist hilft dir die Hammingdistanz ja nichts weil der Code selbst vielleicht nicht mehr eindeutig umkehrbar sein kann.

0
LUKEars 
Fragesteller
 10.09.2022, 21:22
@Kelec

doch: die Hamming Distanz von 5 garantiert, dass das Ding 4 tote HDDs überlebt... und zwar indem man in der Tabelle entweder sucht... oder man macht sich für jede mögliche Situation (8 über 4=70) eine Tabelle (das wären dann insgesamt rund 9MiB für die Tabellen...)...

0
Kelec  10.09.2022, 21:24
@LUKEars

Die Hamming Distanz garantiert das nur wenn die Operation am Ende auch Eindeutig Umkehrbar ist sonst kann sie das nicht garantieren.

Daher gilt das allgemein nur im linearen Fall. Im nichtlinearen Fall kann es gelten muss es aber nicht.

Das ist am Ende so wie du nicht sagen kannst ob bei x²=4 x=2 oder x=-2 ist.

Damit du deinen Code am Ende auch sinnvoll verwenden kannst würde ich dir daher vorschlagen dass du den Algorithmus mal Mathematisch definierst und diese Eigenschaft dann allgmein mal nachweist.

0
LUKEars 
Fragesteller
 10.09.2022, 21:32
@Kelec

verstehe ich jetzt ncht ganz...

00
11
22
33
44
...
FF

die Hamming Distanz ist 2... also kann ich den Wegfall einer Spalte immer kompensieren...

0
LUKEars 
Fragesteller
 10.09.2022, 21:39
@Kelec
Es garantiert dir dass du den Ausfall von 4 HDDs erkennen kannst aber erlaubt dir nur die Norrektur von 2 Ausfällen.

es kommt aber bei RAID hinzu, dass du ja weißt, welche HDD kaputt ist... darum reicht der Abstand 5 für 4 Defekte...

0
Kelec  10.09.2022, 21:44
@LUKEars

Ok stimmt wegfall ja. Ich hab hier allgemein von Blockcodes gesprochen da gehts ja auch um Bitfehler so könntest du bei 23 ja nicht sagen ob du 22 oder 33 gesendet hast.

0
Kelec  10.09.2022, 21:45
@LUKEars

Wenn man die Positionen der Fehler kennt ja das hab ich hier übersehen weil ich von allgemeinen Blockcodes ausgegangen bin und dort sind die Fehlerstellen idR ja nicht bekannt.

0
LUKEars 
Fragesteller
 10.09.2022, 21:46
@Kelec

ja klar... aber es geht ja um RAID.... 😋

0
Kelec  10.09.2022, 21:50
@LUKEars

War mir auch klar, ich hab nur nicht bedacht, dass man hier den Ausfall ja kennt und Bitkorruption ja bereits abgefangen wird.

In dem Fall wird ein linearer Blockcode 1,4 Blockcode also 1 Datenblatte 4 Redundanzplatten auch 4 Plattenausfälle verkraften was ja am Ende auch logisch ist.

1
LUKEars 
Fragesteller
 10.09.2022, 21:51
@Kelec

ja... die HDD heult rum, wenn der Sektor nicht lesbar ist...

0
Kelec  10.09.2022, 21:53
@LUKEars

War gar nicht gemeint nicht lesbar sondern wenn beim schreiben was schief geht. Also die CPU will zB 0xFF übertragen die Platte versteht und schreibt aber 0xAF.

Aber ich denke mal dass das von der Platte oder dem Leitungsprotokoll irgendwie abgefangen wird sonst müsstest du ja auch Bitfehler detektieren und einer Platte zuordnen.

Wär aber mal ein Versuch den ich mal starten könnte ob Raid auch Bitflips erkennen und korrigieren kann.

0
LUKEars 
Fragesteller
 10.09.2022, 21:54
@Kelec

ja genau... S.M.A.R.T. kenn ECC Fehler auf dem Kabel... die sind zum Glück total selten...

0
Kelec  10.09.2022, 21:57
@LUKEars

Smart hat ja damit nichts zu tun.

Das Dateninterface also SATA oder das Protokoll darüber müsste das haben, was aber denke ich mal der Fall ist.

Schleichende Korruption im Datencache wär aber noch interessant.

0
LUKEars 
Fragesteller
 10.09.2022, 22:01
@Kelec

ja... es soll häufiger passieren, als man denkt... wenn man nur 32bit CRC hat, dann kommen auf jeden CRC-Wert (bei 512 Byte Sektoren, =4096bit) wohl 2^4064-1 Möglichkeiten für die irrtümliche Annahme, dass man den Sektor korrekt gelesen hat...

0
Kelec  10.09.2022, 22:25
@LUKEars

Ja 32bit auf 512 Byte ist am Ende ja auch nicht so viel.

Problem is eben nur, dass wenn das passiert man die Fehlerstelle eben nicht mehr kennt und das wäre dann schon ein Risiko. Vor allem wenn Daten gelesen und wieder geschrieben werden, weil der Bitfehler durch lesen und schreiben validiert wird und später gar nicht mehr auffallen kann.

0
LUKEars 
Fragesteller
 10.09.2022, 22:28
@Kelec

ja...ekelig... iwi... aber damit müssen wir leben... der Erfinder von ZFS hat wohl mal ausgerechnet, dass ungefähr jeden Tag so ein Lesefehler unbemerkt bleibt... irgendwo auf der Welt....

0
Kelec  10.09.2022, 23:07
@LUKEars

Ja das stimmt. ZFS verwendet daher eigene Mechanismen um das zu erkennen und zu beheben, über den normalen Schutz von Raid hinaus.

Daher ist ein ZFS Array auch kein Raid im herkömmlichen Sinne.

Also es sind nicht nur Lesefehler sondern zB auch Cache Corruption, also zufällige Flips im Ram oder Festplattencache sofern da kein ECC genutzt wird.

1