WinRAR 怎么可能用一个 .rev 文件修复任何卷?

Col*_*ice 32 rar winrar crc file-archiver

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

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

我猜想这也许可以代替卷不被“线性”分解,就像我想象的那样,每个 RAR 卷都包含不同的、单独的文件;相反,.rev当 RAR 卷被视为一个连续的位和字节文件时,修复是可能的,可以这么说,并且可能涉及一些 CRC'ish 巫术(啊哼,“修复工作”)来修复损坏的字节。

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

Pau*_*aul 55

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

您有四个卷和一个恢复卷,每个卷都有 1 位信息:

         ========================================================
Volumes: = Volume 1 = Volume 2 = Volume 3 = Volume 4 = Recovery =
         =----------=----------=----------=----------=----------=
   Bits: =    1     =    0     =    1     =    1     =     1    =
         ========================================================
Run Code Online (Sandbox Code Playgroud)

恢复卷将包含这些位中的每一个XOR d的结果:

1 XOR 0 XOR 1 XOR 1 = 1
Run Code Online (Sandbox Code Playgroud)

因此,我们的恢复卷包含单个位1.


现在,假设第 1 卷失败。

如果我们将剩余的卷 2、3 和 4 与恢复位代替故障卷进行异或,我们得到:

1 XOR 0 XOR 1 XOR 1 = 1
^
Run Code Online (Sandbox Code Playgroud)

所以,这告诉我们第 1 卷包含1,因为它是等式的结果。

让我们假装第 2 卷死了,所以我们用恢复位替换它在等式中的值:

1 XOR 1 XOR 1 XOR 1 = 0
      ^
Run Code Online (Sandbox Code Playgroud)

所以我们知道第 2 卷包含0,因为它是等式的结果。

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


因此,如果任何卷发生故障,恢复卷可用于基于剩余卷重建数据。这可能是您可以拥有的最简单的纠错形式。如果两个卷发生故障,您将无法恢复任何内容。

  • 需要明确的是,有些方案允许您从多个卷故障中恢复。 (4认同)

Dav*_*rtz 21

要以一种非常简单的方式来理解这是怎么回事,想象一下恢复卷是否包含其他卷的总和。有了一个数字列表,其中缺少一个,以及它们的总和,你总是可以重建缺失的数字。

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

假设您有 20 并且缺少 43。13 + 88 + 17 + 20 = 138。唯一可以添加到以 81 结尾的两位数的数字是 43。

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