2011-04-16 117 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?)它可能是有意義的把校驗在每個扇區,所以你知道哪些是壞。如果你沒有寫任何東西,你需要做一些棘手的事情,例如,校驗一些文件元數據以及扇區本身,以確保應該被覆蓋但不是看起來有效的扇區,因爲之前的內容也具有有效的校驗和。