WinRAR如何用一个.rev文件修复任何卷?


31

我刚刚了解.rev了WinRAR的文件-例如,如果您有一个由10个部分组成的RAR卷,再加上一个.rev(恢复)卷,则该.rev卷将能够“修复”任何一个损坏的.rar卷。

这怎么可能?我不明白一个卷如何拥有所有数据来修复任何/所有单独损坏的卷。

我猜想有可能代替不像我想象的那样“线性地”拆分卷,其中每个RAR卷都包含不同的,单独的整体文件;但是,相反,.rev可以说,当RAR卷被视为一个连续的比特和字节文件时,修复是可能的,可以这么说,并且也许涉及一些CRC's魔术(啊,“修复工作”)来修复损坏的字节。

但是我只是不明白如何拥有9个工作卷,其中1个损坏,而恢复卷却可以修复其中的任何一个。一个卷如何能够保存“所有”卷的数据?


Answers:


55

让我们来看一个非常简单的案例。

您有四个卷和一个恢复卷,每个卷中都有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卷失败了。

如果我们用恢复位代替故障卷对其余的卷2、3和4进行XOR,我们将得到:

1 XOR 0 XOR 1 XOR 1 = 1
^

因此,这告诉我们体积1包含1,因为它是方程式的结果。

让我们假装卷2死亡,所以我们用恢复位替换方程式中的值:

1 XOR 1 XOR 1 XOR 1 = 0
      ^

因此我们知道体积2包含0,因为它是方程式的结果。

如果卷3或4失败,则它们都会在此等1式中产生。


因此,如果任何一个卷发生故障,则恢复卷可用于基于剩余卷重建数据。这可能是最简单的错误纠正形式。如果两个卷失败,则无法恢复任何内容。


4
需要明确的是,有些方案可以使您从多个卷故障中恢复。
Dietrich Epp

仅当您知道哪个设备发生故障时,它才起作用,不是吗?
heinrich5991 2012年

1
@ heinrich5991,您可以通过卷的内部CRC知道
棘轮怪胎2012年

21

为了以一种非常简单的方式理解这种情况,请想象恢复卷是否包含其他卷的总和。使用数字列表,可以缺少其中一个及其和,您始终可以重建缺失的数字。

例如,考虑这两个数字13、88、17、43。如果您知道有一个缺失的数字,而所有数字之和的最后两位是81,则可以找到缺失的数字。13 + 88 + 17 + 43 =161。您可以加上两位数字以使数字以81结尾的唯一数字是20。

假设您有20个数字,而缺少43个数字。13+ 88 + 17 + 20 =138。您可以添加该数字以使数字以81结尾的唯一数字是43。

因此,恢复号码可让您找到任何一个丢失的号码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.