Вероятностный алгоритм проверки файлов или библиотеки?

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

Например, для конкретных чисел терабайт данных через USB2. Проверка того, что эти данные все еще действительны, путем чтения каждого байта в хэш или контрольную сумму требует дня и увеличивает риск отказа диска.

Вместо этого этот код должен будет проверять случайные фрагменты данных и обеспечивать вероятность достоверности в зависимости от доступного времени. Если позволить работать достаточно долго, все блоки будут проверены (базовый случай чтения всего набора данных).

«История» использования:
 — данные хранятся в больших зашифрованных контейнерах (размером от 1 ТБ до 1 ГБ).
 – каждый контейнер резервируется на нескольких наборах дисков в разных местах.
 — проверка проверки. должно выполняться без знания базовых данных или ключей.

Какие режимы сбоя необходимо ОБНАРУЖИТЬ в этом подходе:
 – сбои при транспортировке хранилища (например, контроллер отбрасывает части физического адреса); – ошибки сектора (данные не возвращаются для определенного блока); память или кэш)

При обнаружении ошибок данные восстанавливаются из резервного хранилища. Данные проверки, вероятно, должны храниться отдельно.

Поскольку целью является целостность данных, методы файлообменных сетей кажутся неприменимыми — «дерево хэшей» потребует полного хранения хэшей на каждом узле, что кажется большим объемом памяти, чем необходимо для сценариев без активного злоумышленники.

  • Как определить компромисс между объемом памяти и временем чтения соответствующих блоков файла?
  • Если хэш-дерево/хэш-список — лучший способ, насколько безопасно хранить частичные значения хэшей?
  • Будет ли какая-то контрольная сумма или код исправления ошибок лучшим выбором, чем хэши для эквивалентной защиты?

person Community    schedule 23.11.2008    source источник
comment
Вы упомянули о возможности отказа диска. Является ли это соображением для вашего алгоритма? В пунктах он не указан.   -  person mseery    schedule 23.11.2008
comment
Это один большой файл или несколько файлов?   -  person some    schedule 23.11.2008
comment
Поскольку это фокусируется на обнаружении ошибок, любой подход будет учитывать это. В худшем случае я предполагаю один массивный файл, поэтому проверка произвольных файлов на наличие полного хэша нецелесообразна.   -  person    schedule 23.11.2008


Ответы (3)


Передача происходит через USB2, верно? Поэтому вы должны знать, что:

  • Связь через USB осуществляется в виде пакетов с полезной нагрузкой до 1024 байт для высокоскоростной передачи и 16-битным CRC.
  • Каждый пакет подтверждается и потенциально передается повторно.

Вы должны принять во внимание эту информацию, чтобы развернуть алгоритм, который добавляет некоторые гарантии по сравнению с теми, которые предоставляет CRC, иначе это будет бесполезно. Если я хорошо помню, 16-битный CRC может обнаруживать любые пакеты одиночных ошибок не длиннее 16 бит и часть из них длиннее.

Вы можете начать с википедии: http://en.wikipedia.org/wiki/USB2 и http://en.wikipedia.org/wiki/Cyclic_redundancy_check.

person Nicola Bonelli    schedule 23.11.2008
comment
Я добавил в описание несколько возможных режимов отказа. Даже если бы я остался с 16-битным CRC, если бы я использовал полином, отличный от USB2, разве это не обеспечило бы больше возможностей обнаружения (сквозного)? - person ; 23.11.2008
comment
Это, безусловно, защитит от различных сценариев отказа. USB2 предотвратит (или уменьшит вероятность) ошибок при передаче, но вы все равно можете иметь ошибки, внесенные в носитель данных. - person Nick Johnson; 23.11.2008

Вы можете попробовать использовать что-то вроде PAR2 для создания избыточных данных. это позволит вам как проверять, так и исправлять данные и, вероятно, будет преобразовано для использования произвольного доступа.

person Hasturkun    schedule 24.11.2008
comment
Поскольку PAR2 является DETECT+CORRECT, он добавит значительно больше требований к хранилищу (по сравнению с хэш-деревом) — цель состоит в том, чтобы просто обнаружить и использовать чистую избыточность для исправления. - person ; 24.11.2008

Как насчет хранения значений хэша или контрольной суммы для прогонов данных в файле? Тогда вам нужно будет только прочитать ограниченную часть данных для ограниченной проверки содержимого файла.

person 1800 INFORMATION    schedule 23.11.2008