使用奇偶校验数据修复损坏的位

时间:2011-12-02 03:49:24

标签: bit-manipulation data-recovery parity

这是一个脑力激荡器!

假设我们有64个字节,每个字节是8位加一个奇偶校验位

让我们说还有一个LRC校验字节(通过对所有64字节进行逐位异或形成)

因此我们可以将其视为8 + 1乘64 * 1网格

如果一位损坏,奇偶校验检查将标记它:一行将无法通过奇偶校验检查,也会失败一列。

因此找到有问题的位并将其反转将是微不足道的。

然而,正方形排列中的四个损坏位将欺骗奇偶校验:因为每个违规行和列将包含2个错误,因此给出正确的奇偶校验读数。

但这种情况非常不可能。

我的问题是:我将如何以这种方式修复数据集?可以修复多少?

我的直觉是必须有一些合理的方法来修复稍微损坏的数据集...

3 个答案:

答案 0 :(得分:1)

64字节,每个字节是8位加一个奇偶校验位 LRC校验字节(由所有64字节按位XOR形成) 64 + 8字节将用作每字节字1个奇偶校验位。 所以每个块将有64个数据+9个奇偶校验字节

如果该块不是块上的奇偶校验位,则LRC会告诉您该块是坏的(很大的假设。) 您可以计算同理心,因为您知道什么字节是坏的,您可以强制几个不同的位来纠正lrc和字节,直到两者匹配,但作为单个lrc只告诉您有1/256的机会获得组合匹配你将得到一组符合“固定”标准的数学数据

如果你知道它是什么类型的文件,这将提高你的数据恢复机会。 例如,如果您知道文件类型是文本,则字节5是大写或小写,并且任何数字都不在字母数字和字母的范围内。常见的角色可能会被淘汰。

所以是的,技术上可以通过这样的模式将数据强行恢复原状。

如果您决定这样做,我建议您首先将其阻为每64个块50个字节的数据。这将为您提供14个字节的奇偶校验来实现数学模型。 14/64接近16/64或块中涉及的1/4字节仅用于救援目的。

您的数据集的1/4会丢失,但会获得一些稳定性。 在您的示例9/71中,大约有13%的数据被使用。

之前我曾在数据恢复中使用这样的强制数据集,但在大多数情况下确定你已经成功了。

例如,如果您有一个1兆字节的文件,并说您对您的奇偶校验的同情心在4个区域受损。这是一个MP4文件或zip文件,因此受到严重损害。

如果每个块的损坏限制为1位,您很可能可以修复该文件。 如果你说每个块2位,你会知道每个块有2个区域被损坏,产生一个8个平方到可能的文件序列。您可以生成64个文件并尝试解压缩每个文件,但是说每个块损坏3位,现在您可能正在查看8个立方体。

有可能用蛮力来修理这样的事情,我在紧急情况下这样做了,但收效甚微。

答案 1 :(得分:0)

每列或每行一位的二维奇偶校验修复是不可修复的。

至于如何在数据集的2维中建立可修复的同理心,以达到一定程度的损害......我曾经计算过,如果每6个字节有1个字节,则每个方向的单个位损坏都可以恢复阵列的每个方向。

调查一下,也许wiki raid 5和raid 6架构。他们对驱动器之间传播的扇区采用类似的方法

答案 2 :(得分:-1)

我认为你的意思是8 + 1乘64 + 1网格。

假设其中一个非奇偶校验位已损坏。数据字节上的奇偶校验位将标记该字节。所有字节的奇偶校验将标记已损坏的列(位)。一切都好。

假设“普通”数据字节的一个奇偶校验位被损坏。额外奇偶校验字节的最后一位会标记它,不是吗?

假设奇偶校验字节的一个奇偶校验位已损坏。额外奇偶校验字节的最后一位会标记它,不是吗?

那么该位的值是如何定义的?