Wie berechnet man die RAID 6 Zusatz-Info?
In der Wikipedia steht eine „vereinfachte Formel“, die aber wohl falsch ist. Oder?
Beispiel: 2 Daten HDDs und 2 Redundanz HDDs:
D0=D1=0x00 --> P=0x00 und Q=0x00
D0=D1=0xFF --> P=0x00 und Q=0x00
wenn also D0 und D1 ausfallen, dann kann man die beiden Zeilen nicht mehr von einander unterscheiden... die Byte-weise Hamming Distanz muss eigentlich 3 sein... Das gilt immer, wenn eine gerade Anzahl von Daten HDDs beteiligt ist...
Oder ist mein Englisch zu schlecht?
Sollte man das der Wikipedia mal sagen? Oder ist das wegen dem „Simplified“ schon gut genug... Aber den nächsten Absatz verstehe ich dann gar nicht mehr...
die WP wusste es schon seit Januar... stand auf der „talk“ Seite...
Das Ergebnis basiert auf 6 Abstimmungen
3 Antworten
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
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...
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.
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
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? 😋
Ja so auf den ersten Blick hast du Recht, man kann da nicht unterscheiden wenn D0 und D1 ausfallen.
ja... wer weiß, wie oft das noch passiert...
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.
dann hätte aber das bit#0 gar keinen Einfluss... die meinen also ein „rotating shift“... steht übrigens auch ausdrücklich da...
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.
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...
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;
}
}
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.
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...)...
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.
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.
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.
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.
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.
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 .