Jak to możliwe, że WinRAR może naprawić dowolny wolumin za pomocą jednego pliku .rev?

31

Właśnie dowiedziałem się o .revpliki z WinRAR - gdzie, jeśli mają objętość RAR 10-częściowy, na przykład, plus jeden .rev(odzysk) Volume - .revobjętość będzie w stanie „naprawić” każdy jeden uszkodzony .rargłośności.

Jak to jest możliwe? Nie rozumiem, w jaki sposób jeden wolumin może mieć wszystkie dane do naprawy dowolnego / wszystkich indywidualnie uszkodzonych woluminów.

Sądzę, że być może jest to możliwe zamiast tego, że woluminy nie są dzielone „liniowo”, tak jak sobie wyobrażam, gdzie każdy wolumin RAR zawiera odrębne, indywidualne pliki całości; ale raczej .revnaprawienie jest możliwe, gdy woluminy RAR są postrzegane jako jeden ciągły plik bitów i bajtów, że tak powiem, i że być może istnieje pewien czar CRC'ish (ah hem, „naprawa”) związany z naprawą uszkodzonych bajtów.

Ale po prostu nie rozumiem, jak można mieć 9 woluminów roboczych z 1 uszkodzonym, ale mieć wolumin odzyskiwania, który może naprawić dowolny z tych woluminów. W jaki sposób jeden wolumin jest w stanie pomieścić dane „wszystkich” woluminów?

Coldblackice
źródło
3
Kody korekcji skasowania. Porównaj z en.wikipedia.org/wiki/Parchive
Dan D.

Odpowiedzi:

55

Weźmy naprawdę prostą sprawę.

Masz cztery woluminy i wolumin odzyskiwania, każdy z 1 bitem informacji:

         ========================================================
Volumes: = Volume 1 = Volume 2 = Volume 3 = Volume 4 = Recovery =
         =----------=----------=----------=----------=----------=
   Bits: =    1     =    0     =    1     =    1     =     1    =
         ========================================================

Wolumin odzyskiwania zawierałby wynik każdego z tych bitów XOR d razem:

1 XOR 0 XOR 1 XOR 1 = 1

Zatem nasz wolumin odzyskiwania zawiera pojedynczy bit 1.


Powiedzmy teraz, że tom 1 nie działa.

Jeśli XOR pozostałe woluminy 2, 3 i 4 z bitem odzyskiwania zamiast uszkodzonego woluminu, otrzymamy:

1 XOR 0 XOR 1 XOR 1 = 1
^

To mówi nam, że tom 1 zawierał 1, ponieważ jest to wynik równania.

Udawajmy, że zamiast tego zmarł tom 2, więc zastępujemy jego wartość w równaniu bitem odzyskiwania:

1 XOR 1 XOR 1 XOR 1 = 0
      ^

Wiemy więc, że tom 2 zawierał 0, ponieważ jest to wynik równania.

Jeśli tom 3 lub 4 zawiodły, oba wytworzyłyby 1w tym równaniu.


Tak więc, jeśli którykolwiek z woluminów ulegnie awarii, woluminu odzyskiwania można użyć do zrekonstruowania danych na podstawie pozostałych woluminów. Jest to prawdopodobnie najprostsza możliwa forma korekcji błędów. W przypadku awarii dwóch woluminów nic nie można odzyskać.

Paweł
źródło
4
Aby to wyjaśnić, istnieją schematy, które pozwalają na odzyskanie w przypadku awarii wielu woluminów.
Dietrich Epp,
Działa to tylko wtedy, gdy wiesz, które urządzenie uległo awarii, prawda?
heinrich5991,
1
@ heinrich5991 wiesz przez wewnętrzny CRC tomu
maniak ratchet
21

Aby naprawdę łatwo zrozumieć, jak to może być, wyobraź sobie, że wolumin odzyskiwania zawierał sumę pozostałych woluminów. Z listą liczb, których brakuje jednego z nich, i ich sumy, zawsze możesz zrekonstruować brakującą liczbę.

Weźmy na przykład te dwucyfrowe liczby, 13, 88, 17, 43. Jeśli wiedziałeś, że brakuje jednej liczby, a ostatnie dwie cyfry sumy wszystkich liczb to 81, możesz znaleźć brakującą liczbę. 13 + 88 + 17 + 43 = 161. Jedyną dwucyfrową liczbą, którą możesz dodać do tej liczby, która kończy się na 81, jest 20.

Powiedzmy, że masz 20 i brakuje Ci 43. 13 + 88 + 17 + 20 = 138. Jedyną dwucyfrową liczbą, którą możesz dodać do tej liczby, aby liczba kończąca się na 81 była 43, jest 43.

W ten sposób numer odzyskiwania pozwala znaleźć dowolną brakującą liczbę.

David Schwartz
źródło