编码数据以处理损坏

时间:2011-04-16 10:48:00

标签: algorithm disk corruption

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

数据存储在文件中,文件大小为1或2 MB

我想对数据进行编码,以便我可以从一些错误中恢复 - 而不是通常的位翻转错误,在我的情况下,我倾向于缺少更大的块

我希望探索一些选择,有人有想法吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

如果你想用编码理论来做这件事,我首先要看http://en.wikipedia.org/wiki/RAIDhttp://en.wikipedia.org/wiki/Erasure_code

如果你从一个普通的代码开始,你几乎肯定想要交错代码 - 如果你把扇区想象成行,你想把你的数据写成列,这样就失去了一个整个扇区=行,只会失去你每N个1字节(或1位),你有N路交错 - 每列深N行。

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

答案 2 :(得分:0)

听起来正确的事情是

  • 验证写入数据的代码是否正确检查错误代码并返回来自写例程的值。如果它是你自己的代码,那么你可能不会检查数据是否真的完全成为了整个磁盘
  • 如果代码中没有问题,那么您的硬件就会损坏并需要修复