web-dev-qa-db-ja.com

WinRARが1つの.revファイルで任意のボリュームを修復できるのはなぜですか?

.rev WinRARを含むファイル-たとえば、10部構成のRARボリュームに加えて、1つの.rev(回復)ボリューム-.revボリュームは任意の「修正」が可能になりますone破損.rarボリューム。

これはどのようにして可能ですか?個別に壊れたボリュームのいずれか/すべてを修正するために、1つのボリュームがすべてのデータをどのように持つことができるか理解できません。

私が想像しているように、ボリュームが「線形に」分割されない代わりに、おそらく可能であると思います。各RARボリュームは、パックされた全体の個別の個別のファイルを保持しています。むしろ.rev修復は、RARボリュームがいわばビットとバイトの1つの連続したファイルと見なされ、破損したバイトを修正するためにCRCのような魔術(ええと、「修復作業」)が行われている場合に可能です。

しかし、9つの作業ボリュームに1つの損傷があり、しかも修復ボリュームanyのうちの1つを修復できる方法を理解できません。 1つのボリュームで「すべて」のボリュームのデータを保持するにはどうすればよいですか?

32
Coldblackice

本当に簡単なケースを考えてみましょう。

4つのボリュームと復元ボリュームがあり、それぞれに1ビットの情報が含まれています。

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

復元ボリュームには、これらの各ビットの結果が含まれます [〜#〜] xor [〜#〜] d一緒に:

1 XOR 0 XOR 1 XOR 1 = 1

したがって、復元ボリュームには単一ビット1が含まれています。


ここで、ボリューム1が失敗したとしましょう。

XOR=残りのボリューム2、3、および4の場合、障害が発生したボリュームの代わりにリカバリビットを使用すると、

1 XOR 0 XOR 1 XOR 1 = 1
^

つまり、これは方程式の結果であるため、ボリューム1には1が含まれていたことを示しています。

代わりにボリューム2が死亡したと仮定して、式の値を回復ビットに置き換えます。

1 XOR 1 XOR 1 XOR 1 = 0
      ^

したがって、ボリューム2には0が含まれていることがわかります。これは、方程式の結果だからです。

ボリューム3または4が失敗した場合、どちらもこの式で1を生成します。


そのため、いずれかのボリュームに障害が発生した場合、復元ボリュームを使用して、残りのボリュームに基づいてデータを再構築できます。これはおそらく、最も簡単な形式のエラー修正です。 2つのボリュームに障害が発生した場合、何も回復できません。

55
Paul

これがどのように行われるかを理解する非常に簡単な方法として、復元ボリュームに他のボリュームの合計が含まれているかどうかを想像してください。番号のリスト、そのうちの1つが不足している番号、およびそれらの合計を使用すると、不足している番号をいつでも再構築できます。

たとえば、これらの2桁の数字、13、88、17、43について考えてみます。欠けている数字が1つあり、すべての数字の合計の最後の2桁が81であることがわかっている場合、欠けている数字を見つけることができます。 13 + 88 + 17 + 43 =161。81で終わる番号を作成するためにそれに追加できる2桁の数字は20だけです。

あなたが20を持っていて、43が欠けていたとしましょう。13+ 88 + 17 + 20 =138。81で終わる数を作るためにそれに追加できる2桁の数字は43だけです。

したがって、リカバリー番号を使用すると、欠落している番号を1つ見つけることができます。

21
David Schwartz