Кодирование данных для обработки коррупции - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть некоторые данные, которые нужно хранить на дисках (жестких дисках). Я вижу повреждение, обычно один или два сектора (512 байт) при записи на USB-диск.

Данные хранятся в файлах, размер файлов обычно составляет один или два МБ

Я хотел бы закодировать данные таким образом, чтобы я мог восстановить некоторые ошибки, а не обычные ошибки переворота битов, в моем случае, как правило, я пропускаю большие фрагменты

Я надеюсь изучить некоторые варианты, у кого-нибудь есть идеи?

Ответы [ 3 ]

3 голосов
/ 16 апреля 2011

Возможно, вы захотите исследовать Исправление ошибок Рида – Соломона , используемое на CD, DVD и Blu-ray дисках.Он может исправлять гораздо более длинные последовательности ошибок, чем коррекция переворота битов, используемая в памяти ECC.Честно говоря, я бы купил более надежные диски или записывал каждый файл дважды.

1 голос
/ 16 апреля 2011

Интересно, не записывается ли что-то на диск в нужное время - например, к тому времени, когда вы выключите питание.

Если вы хотите сделать это с помощью теории кодирования, я бы начал с рассмотрения http://en.wikipedia.org/wiki/RAID и http://en.wikipedia.org/wiki/Erasure_code.

Если вы начинаете с обычного кода, вы почти наверняка захотите чередовать код - если вы думаете о секторах как о строках, вы хотите записать свои данные в столбцы, так что потеря одного целого сектора = строки потеряет вас только 1 байт (или 1 бит) в каждом N, где у вас есть N-способ чередования - каждый столбец имеет глубину N строк.

Если это хитрое оборудование - возможно, основная флэш-память слишком часто перезаписывалась (делает ли ваш USB-накопитель http://en.wikipedia.org/wiki/Wear_levelling?), возможно, имеет смысл поставить контрольную сумму в каждом секторе, чтобы вы знали, какие из них повреждены. Если вам вообще не удается что-то написать, вам нужно сделать что-то более хитрое, например, проверить контрольную сумму некоторых метаданных файла, а также сам сектор, чтобы убедиться, что сектора, которые должны были быть перезаписаны, но не выглядят так, как будто они действительны, потому что предыдущее содержимое также имело правильную контрольную сумму.

0 голосов
/ 16 апреля 2011

Звучит так, как надо:

  • убедитесь, что код, который записывает данные, правильно проверяет коды ошибок и возвращает значения, полученные из процедуры записи. если это ваш собственный код, возможно, вы не проверяете, что данные действительно попали на диск целиком
  • если это не проблема в вашем коде, ваше оборудование сломано и должно быть исправлено
...