2011-04-16 118 views
0

我有一些数据需要存储在磁盘(硬盘驱动器)上。写入USB磁盘时,我看到损坏,通常是一个或两个扇区(512字节)。编码数据来处理损坏

的数据被存储在文件中,这些文件往往是在大小

一个或两个MB,我想对数据进行编码,这样我可以从一些错误中恢复 - 不是通常的位翻转错误,在我的情况下,我往往缺少更大的块

我希望探索一些选项,任何人有想法?

回答

3

您可能想要研究用于CD,DVD和蓝光光盘的Reed–Solomon error correction。与ECC内存中使用的位翻转校正相比,它可以纠正更长的错误序列。老实说,我只是买更可靠的磁盘或写每个文件两次。

0

听起来就像是正确的事情做的

  • 验证,妥善写入数据的代码检查错误代码和返回从写程序来的值。如果它是您自己的代码,则可能是您不检查数据实际上是否将其全部存储到磁盘上
  • 如果代码中没有问题,那么您的硬件已损坏并需要修复
1

我想知道是否有某些东西没有在正确的时间写入磁盘 - 例如当你关掉电源时。

如果你想用编码理论做到这一点,我首先看http://en.wikipedia.org/wiki/RAIDhttp://en.wikipedia.org/wiki/Erasure_code

如果你从一个普通的代码开始,你几乎肯定希望交错代码 - 如果你想把这些扇区看作行,你想要在列中写入你的数据,那么失去一个整个扇区= row,会失去你在每个N中只有1个字节(或1个位),其中有N路交错 - 每列为N行深。

如果它是狡猾的硬件 - 也许是潜在的闪光灯已经有东西覆盖次数太多(没有你的USB驱动器做http://en.wikipedia.org/wiki/Wear_levelling?)它可能是有意义的把校验在每个扇区,所以你知道哪些是坏。如果你没有写任何东西,你需要做一些棘手的事情,例如,校验一些文件元数据以及扇区本身,以确保应该被覆盖但不是看起来有效的扇区,因为之前的内容也具有有效的校验和。