我有一些需要存储在磁盘(硬盘驱动器)上的数据。我在写入USB磁盘时看到了损坏,通常是一个或两个扇区(512字节)。
数据存储在文件中,文件大小为1或2 MB
我想对数据进行编码,以便我可以从一些错误中恢复 - 而不是通常的位翻转错误,在我的情况下,我倾向于缺少更大的块
我希望探索一些选择,有人有想法吗?
答案 0 :(得分:3)
您可能想要研究CD,DVD和蓝光光盘使用的Reed–Solomon error correction。与ECC内存中使用的位翻转校正相比,它可以纠正更长的错误序列。老实说,我只是购买更可靠的磁盘或两次写每个文件。
答案 1 :(得分:1)
我想知道是否有东西没有在正确的时间写入磁盘 - 例如当你关闭电源时。
如果你想用编码理论来做这件事,我首先要看http://en.wikipedia.org/wiki/RAID和http://en.wikipedia.org/wiki/Erasure_code。
如果你从一个普通的代码开始,你几乎肯定想要交错代码 - 如果你把扇区想象成行,你想把你的数据写成列,这样就失去了一个整个扇区=行,只会失去你每N个1字节(或1位),你有N路交错 - 每列深N行。
如果这是狡猾的硬件 - 也许底层闪存已被覆盖了太多次(你的USB驱动器做http://en.wikipedia.org/wiki/Wear_levelling?),在每个扇区放置校验和以便你知道哪些被破坏可能是有意义的。如果你根本没有写东西,你需要做一些比较棘手的事情,例如:校验和一些文件元数据以及扇区本身,以确保应该被覆盖但看起来不是有效的扇区,因为之前的内容也有一个有效的校验和。
答案 2 :(得分:0)
听起来正确的事情是