我有一些數據需要存儲在磁盤(硬盤驅動器)上。寫入USB磁盤時,我看到損壞,通常是一個或兩個扇區(512字節)。編碼數據來處理損壞
的數據被存儲在文件中,這些文件往往是在大小
一個或兩個MB,我想對數據進行編碼,這樣我可以從一些錯誤中恢復 - 不是通常的位翻轉錯誤,在我的情況下,我往往缺少更大的塊
我希望探索一些選項,任何人有想法?
我有一些數據需要存儲在磁盤(硬盤驅動器)上。寫入USB磁盤時,我看到損壞,通常是一個或兩個扇區(512字節)。編碼數據來處理損壞
的數據被存儲在文件中,這些文件往往是在大小
一個或兩個MB,我想對數據進行編碼,這樣我可以從一些錯誤中恢復 - 不是通常的位翻轉錯誤,在我的情況下,我往往缺少更大的塊
我希望探索一些選項,任何人有想法?
您可能想要研究用於CD,DVD和藍光光盤的Reed–Solomon error correction。與ECC內存中使用的位翻轉校正相比,它可以糾正更長的錯誤序列。老實說,我只是買更可靠的磁盤或寫每個文件兩次。
聽起來就像是正確的事情做的
我想知道是否有某些東西沒有在正確的時間寫入磁盤 - 例如當你關掉電源時。
如果你想用編碼理論做到這一點,我首先看http://en.wikipedia.org/wiki/RAID和http://en.wikipedia.org/wiki/Erasure_code。
如果你從一個普通的代碼開始,你幾乎肯定希望交錯代碼 - 如果你想把這些扇區看作行,你想要在列中寫入你的數據,那麼失去一個整個扇區= row,會失去你在每個N中只有1個字節(或1個位),其中有N路交錯 - 每列爲N行深。
如果它是狡猾的硬件 - 也許是潛在的閃光燈已經有東西覆蓋次數太多(沒有你的USB驅動器做http://en.wikipedia.org/wiki/Wear_levelling?)它可能是有意義的把校驗在每個扇區,所以你知道哪些是壞。如果你沒有寫任何東西,你需要做一些棘手的事情,例如,校驗一些文件元數據以及扇區本身,以確保應該被覆蓋但不是看起來有效的扇區,因爲之前的內容也具有有效的校驗和。