【问题标题】:Encoding data to handle corruption编码数据以处理损坏
【发布时间】:2016-01-17 05:55:15
【问题描述】:

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

数据存储在文件中,文件大小往往是一两MB

我想对数据进行编码,以便我可以从一些错误中恢复 - 不是通常的位翻转错误,在我的情况下,我往往会丢失更大的块

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

【问题讨论】:

    标签: algorithm disk corruption


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        听起来应该做的事情是

        • 验证写入数据的代码是否正确检查错误代码并返回来自写入例程的值。如果是您自己的代码,则可能是您没有检查数据是否确实完整地进入了磁盘
        • 如果您的代码没有问题,则说明您的硬件已损坏,需要修复

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-13
          • 1970-01-01
          • 1970-01-01
          • 2012-04-11
          • 1970-01-01
          • 2011-02-13
          相关资源
          最近更新 更多