首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reed-Solomon在文件恢复中的应用

Reed-Solomon在文件恢复中的应用
EN

Stack Overflow用户
提问于 2016-10-29 17:46:35
回答 1查看 355关注 0票数 0

我正在开发的一个软件输出了相当多的文件,这些文件存储在服务器上。在它的运行时,我有一个文件在我身上损坏。这些文件对操作至关重要,因此不会发生这种情况。因此,我试图想出一种向文件添加纠错的方法,以防止这种情况再次发生。

我已经阅读了里德-所罗门,它对k个数据块加上m个奇偶校验块进行编码,然后可以重建多达m个丢失的块。因此,我的想法是将数据流拆分成这些数据块,然后将它们按顺序存储在磁盘上,首先是数据块,然后是奇偶校验块。重复上述操作,直到存储完整个文件。当然,k、m和块大小都是我必须研究和尝试的变量。

然而,据我所知,Reed-Solomon要求您知道哪些块是损坏的。我怎么可能知道呢?我的想法是,在编写代码块时,我必须向每个块添加一些额外的、更简单的错误检测代码,否则我无法知道它们是否已损坏。就像CRC32之类的。

我是否正确理解了这一点,或者是否有更好的方法来实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-06-03 00:21:48

这是一个有点老的问题,但(在我看来)总是有用的,在某些情况下是必要的。位腐烂永远不会被完全治愈(闭嘴ZFS社区;ZFS只有在它存在的时候才能控制它的文件系统上的内容),所以我们总是必须想出主动的预防和恢复计划。

虽然它的设计目的是促进盗版(特别是在新闻组中以块的形式存储和提取多GB的文件,其中任何块都可能丢失或损坏),但"Parchives“实际上正是您正在寻找的(see the white paper,尽管不要直接实现该方案,因为它有一个错误和更新的方案可用),它们在实践中的工作方式如下:

当完整性检查(通常在文件传输的另一端)时,完整的文件被输入编码器

  • 块被处理,并且里德-所罗门块是包含这些块的

  • 与原始文件一起输出的.par文件,这些块被重新检查,并且需要用于重建丢失数据的任何块被从.par文件中拉出。

事情最终确定为"PAR2“(本质上是具有附加功能的重写),其方案如下:

  • 用RAR压缩并分成块的大文件(通常每个块大约100MB,因为这是“通常安全”的最大usenet)
  • 一个“索引”文件被放在文件旁边(例如bigfile.PAR2)。这没有恢复区块。
  • 一系列总计为原始数据大小10%的par文件以越来越大的文件大小(bigfile.vol029+25.PAR2bigfile.vol104+88.PAR2等)并存。
  • 然后,另一端的用户可以获取所有.rar文件并运行完整性检查,并返回一个MB计数,该计数表示下载的数据量等于或大于
  • ,并且完整性验证已提取<代码>H234<代码>H135RAR,原始文件成功传输<代码>H236<代码>F237

现在没有文件系统层,使用Parchive工具实现这个系统仍然相当简单,但它有两个要求:

文件不会更改的拷贝(因为对磁盘上文件的任何更改都会使奇偶校验数据无效)(当然,您也可以执行此操作,并通过更改时拷贝来增加复杂性scheme))

  • That当为appropriate.

时,您将同时运行文件生成和完整性检查/

由于所有的数学和方法都是已知的并且经过了实战测试,您也可以使用自己的方法来满足任何需要(作为文件读/写的钩子,跨越任意路径深度,将恢复数据存储在单独的驱动器上,等等)。有关初始提示,请参阅pros:https://www.backblaze.com/blog/reed-solomon/

编辑:导致我提出这个问题的同一项研究将我带到了之前没有意识到的已经完成的工作的整个子集

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40317843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档