Algorytm generowania i stosowania danych naprawczych w RAR

0

Zauważyłem, że jedna z najważniejszych cech formatu RAR jest możliwość występowania danych nadmiarowych, które wykorzystuje się w odtwarzaniu archiwum w przypadku np. uszkodzeń nosnika, na którym archiwum jest przechowywane.

Przy tworzeniu archiwum można określić procent danych nadmiarowych w stosunku do wielkości archiwum. Przynajmniej teoretycznie, bo ja zawsze daję 10%, ale przy większych archiwach (kilkanaście gigabajtów), dane naprawcze mają co najwyżej 256MB, jak się weźmie kalkulator i obliczy, to jest to o wiele mniej niż 10%.
Do cennych danych, jak np. film z własnego ślubu, moim zdaniem warto stosować dane naprawcze. Ale to powoduje, że jeżeli chcemy obejrzeć film, to trzeba go najpierw wypakować, co trochę trwa nawet, jak archiwum było tworzone bez kompresji (filmy mają to do siebie, że praktycznie nie da się ich skompresować), a potem oglądać.

Myślę o tworzeniu danych naprawczych bez kompresji tak, żeby można było przechowywać luzem jeden plik danych (np. film lub obraz płyty DVD) oraz mały plik zawierający tylko i wyłącznie dane naprawcze dla pliku danych, które wykorzystywałoby się, jakby powstał bad sector na nośniku z plikiem danych.

W pomocy do WinRar wyczytałem, że dane naprawcze to są bloki po 512 bajtów w dowolnej ilości. Ilość bloków danych naprawczych określa ilość bloku danych właściwych, które można odtworzyć. Np. jeżeli jest jeden blok danych naprawczych to można odtworzyć jeden blok danych, w przypadku 5 bloków naprawczych można odtworzyć 5 dowolnych brakujących (przekłamanych) bloków danych itd.

Czy ktoś zna może algorytm generowania i stosowania danych naprawczych w programie WinRar? Próbowałem szukać na Google i nic ciekawego nie znalazłem.

0

Myślę że dane naprawcze w RARze są podobne do tego: http://parchive.sourceforge.net/

0

Watpie, by akurat ten algorytm byl uzyty w RAR, ale poczytaj o...
http://en.wikipedia.org/wiki/Hamming_code
http://en.wikipedia.org/wiki/Error-correcting_code

0

W źródłach unrara jest plik rs.cpp z klasą RSCoder. Wydaje mi się że tam są funkcje związane z kodami Reeda-Solomona, tymi samymi które są używane w parchive.

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