恢复损坏的zip或gzip文件?

7
最常见的损坏压缩文件的方法是无意中进行ASCII模式的FTP传输,导致CR和/或LF字符的多对一破坏。
显然,会有信息丢失,解决这个问题的最好方法是以FTP二进制模式重新传输。
但是,如果原始文件已经丢失,而且它很重要,那么数据的可恢复性如何?
[实际上,我已经知道了我认为是最好的答案(这很困难,但有时可能会成功 - 我稍后会发布更多内容),以及普遍的非答案(许多现成的程序可以修复CRC而不修复数据),但我想在stackoverflow beta期间尝试一下这个问题,并看看是否有其他人走过成功恢复的道路或发现我不知道的工具。]
2个回答

4

来自Bukys Software

大约每256个字节中就有1个字节是已知的损坏,而且这种损坏只出现在值为'\012'的字节中。因此,字节错误率为1/256(输入的0.39%),有2/256个字节(输入的0.78%)是可疑的。但由于每个损坏的字节只受到三个位的影响,所以位错误率只有3/(256*8):0.15%是错误的,0.29%是可疑的。

...

压缩输入中的一个错误会破坏所有后续字节的解压缩过程...事实上,很快就能识别出解压缩输出是错误的,这是有希望的——寻找正确答案可以迅速确定错误答案。

最终,结合了几种技术成功地从这些文件中提取了合理的数据:

  • 领域特定的解析字段和带引号的字符串
  • 从以前的低损坏概率的数据中学习机器学习
  • 容忍由其他原因(例如日志记录时磁盘已满)造成的文件损坏
  • 向前看以引导搜索沿着最高概率的路径进行

这些技术确定了75%的必要修复工作,并且其余部分是首先探索最高概率的,以便立即识别出合理的重建。


2
您可以尝试编写一个小脚本,将所有CR替换为CRLF(假设损坏的方向是CRLF到CR),每个块随机交换,直到获得正确的CRC。假设数据不是特别大,我猜这可能不会使用您的CPU直到宇宙热寂才能完成。
由于存在明显的信息丢失,我不知道是否有更好的方法。CR到CRLF方向的损失可能稍微容易回滚。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接