【发布时间】:2016-01-17 05:55:15
【问题描述】:
我有一些数据需要存储在磁盘(硬盘)上。在写入 USB 磁盘时,我看到了损坏,通常是一两个扇区(512 字节)。
数据存储在文件中,文件大小往往是一两MB
我想对数据进行编码,以便我可以从一些错误中恢复 - 不是通常的位翻转错误,在我的情况下,我往往会丢失更大的块
我希望探索一些选项,有人有想法吗?
【问题讨论】:
标签: algorithm disk corruption
我有一些数据需要存储在磁盘(硬盘)上。在写入 USB 磁盘时,我看到了损坏,通常是一两个扇区(512 字节)。
数据存储在文件中,文件大小往往是一两MB
我想对数据进行编码,以便我可以从一些错误中恢复 - 不是通常的位翻转错误,在我的情况下,我往往会丢失更大的块
我希望探索一些选项,有人有想法吗?
【问题讨论】:
标签: algorithm disk corruption
您可能想研究 CD、DVD 和蓝光光盘使用的Reed–Solomon error correction。与 ECC 存储器中使用的位翻转校正相比,它可以校正更长的错误序列。不过老实说,我只会购买更可靠的磁盘或将每个文件写入两次。
【讨论】:
我想知道是否没有在正确的时间将某些内容写入磁盘 - 例如等你关掉电源。
如果你想通过编码理论来做到这一点,我会先看看 http://en.wikipedia.org/wiki/RAID 和 http://en.wikipedia.org/wiki/Erasure_code。
如果你从一个普通的代码开始,你几乎肯定想要交错代码——如果你把扇区看作行,你想把你的数据写成列,这样丢失一个完整的扇区 = 行,只会丢失你每 N 个字节(或 1 个位),其中您有 N 路交错 - 每列有 N 行深。
如果它是不可靠的硬件 - 可能底层闪存的内容被覆盖了太多次(您的 USB 驱动器是否执行http://en.wikipedia.org/wiki/Wear_levelling?)在每个扇区中放置一个校验和可能是有意义的,这样您就知道哪些是坏的。如果你根本没有写东西,你需要做一些更棘手的事情,例如校验和一些文件元数据以及扇区本身,以确保应该被覆盖但没有看起来像它们的扇区是有效的,因为以前的内容也有一个有效的校验和。
【讨论】:
听起来应该做的事情是
【讨论】: