Rozszerzenie RAID 6 na większą ilość sum kontrolnych

0

Witam,
Nie wiem czy to odpowiednie miejsce na zadanie tego pytania (jest to teoretyczno-matematyczne pytanie), ale zastanawia mnie jak można rozszerzyć obliczanie 2 sum kontrolnych z RAID 6 na dowolną liczbę sum kontrolnych. W RAID 6 z dwoma sumami kontrolnymi i np. 7 dyskami do ochrony (razem będzie 9 dysków) równania, które definiują sumy kontrolne mogą być np. takie:
1•A⊕1•B⊕1•C⊕1•D⊕1•E⊕1•F⊕1•G=P
1•A⊕2•B⊕3•C⊕4•D⊕5•E⊕6•F⊕7•G=Q
gdzie: ⊕ to XOR, • to mnożenie w ciele Galoisa GF(256)
Teraz, pierwsze pytanie: czy maksymalna liczba dysków do ochrony to 255? Jeżeli chcę więcej to muszę zmienić na np. GF(65536)?
Druga sprawa, jeżeli chcę więcej sum kontrolnych to czy sposób generowania współczynników do układu równań jest taki:
1•A⊕1•B⊕1•C⊕1•D⊕1•E⊕1•F⊕1•G⊕…=P
30•A⊕31•B⊕32•C⊕33•D⊕34•E⊕35•F⊕36•G⊕…=Q
50•A⊕51•B⊕52•C⊕53•D⊕54•E⊕55•F⊕56•G⊕…=R
60•A⊕61•B⊕62•C⊕63•D⊕64•E⊕65•F⊕66•G⊕…=S
90•A⊕91•B⊕92•C⊕93•D⊕94•E⊕95•F⊕96•G⊕…=T
110•A⊕111•B⊕112•C⊕113•D⊕114•E⊕115•F⊕116•G⊕…=U
140•A⊕141•B⊕142•C⊕143•D⊕144•E⊕145•F⊕146•G⊕…=V
170•A⊕171•B⊕172•C⊕173•D⊕174•E⊕175•F⊕176•G⊕…=W

Tutaj zakładam, że używam GF(256) takiego jak w algorytmie AES. Kolejne liczby 3, 5, 6, 9, 11, 14, 17, … to generatory dla GF(256) używanego w AES. I teraz trzecie pytanie, jeżeli jest to poprawny sposób, to wynikałoby z tego, że maksymalna liczba sum kontrolnych dla odpowiednio dużej ilości dysków to 129 (128 generatorów GF(256) + 1. równanie z samymi jedynkami). Jeżeli jednak chciałbym zabezpieczyć 3 dyski to mogę mieć aż 255 sum kontrolnych dlatego, że dla dowolnego x (x≠1) x2≠1, a jakbym miał 4 dyski to mogę mieć 253 sumy kontrolne, bo x3=1 oprócz 1 także dla 188 i 189. Ogólnie:

Liczba dysków Max. liczba sum kontrolnych
2-3 255
4-5 253
6-15 249
16-17 241
18-51 225
52-85 193
86-255 129
Ta tabela wynika to z tego, że potęgi mogą się "przekręcić" na warotść 1 po 3, 5, 15, 17, 51, 85 albo 255 potędze.
0

Kod Reeda-Solomona, korzysta z ciał Galois. Nie znam szczegółów kodu i nie zgłębiałem, bo skorzystałem z tej biblioteki. https://github.com/Sonic-The-Hedgehog-LNK1123/ReedSolomon Jeżeli programujesz w czymś innym niż .NET, to myślę, że istnieje biblioteka dla danej technologii lub da się wymienioną bibliotekę przerobić.

Wymieniona biblioteka obsługuje kody dla dowolnej bitowości wartości składowych od 2 do 30. Możesz na przykład obliczyć kod 16-bitowy, wtedy elementów może być maksymalnie do 65535 (dane i korekcja razem). Może być kod 10-bitowych, wtedy elementów jest maksymalnie 1024. W ramach pakietu elementów, przy Reed-Solomon sam decydujesz, ile chcesz elementów kodu. Co ważne, jak utracisz część elementów (obojętnie, czy dane, czy kod, czy kilka takich i kilka takich), to mając wiedzę, które elementy utraciłeś, odzyskasz właśnie tyle, z ilu elementów składał się kod, a jak nie wiesz, które elementy utraciłeś, to odzyskasz maksymalnie połowę ilości elementów kodu.

Jeżeli chcesz mieć kod inny niż 8-bit, 16-bit lub 24-bit (kod 32-bit nie jest możliwy z powyższa biblioteką), to pozostaje odpowiednio odczytywać i zapisywać bajty, np. dla kodu 12-bit, na 3 bajty przypadają 2 wartości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1