Bulat_Ziganshin
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору EugeneRoshal понял. у тебя сделано просто и качественно, у меня более гибко, но я на это и потратил несколько месяцев, имея уже готовую ecc бибилиотеку 1. у тебя нет большого смысла хранить crc остальных 9 блоков. в каждом блоке его crc лежит рядом с самими данными, если метаданные отлетят - то вероятно и сами ecc-данные повредятся 2. как и у тебя, у меня при каждом ecc-секторе есть дескриптор, который описывает "геометрию" ECC-алгоритма и место этого сектора в ней, так что даже с одним найденным сектором можно что-то восстановить кстати насчёт терминов - минимальный защищаемый блок я называю сектором (у меня это 4 КБ), data/ecc-сектора кодируемые вместе - группой, а набор включающий i-й сектор из каждой группы - страйпом, то есть архив состоит из последовательности страйпов 3. в дескрипторе у меня хранится 7-байтный id этого архива, случайное число - чтобы при восстановлении с raw образа диска можно было различить несколько записанных на него архивов. 4. вместо crc64 я использую crc32 + 32-битный хеш уровня xxHash - и искать быстрее, и качество хеширования чуть выше 5. при восстановлении с поиском секторов данных 64 бит хеша немного маловато, поэтому принимаются только последовательности из не менее 3-х секторов 6. CRC секторов данных защищаются тем же алгоритмом ECC, только с 5-кратно большей избыточностью, например при -rr10% у них избыточность будет 50%. дальше эти crc и их ecc разделяются равномерно между всеми секторами ecc в группе. итого получается что у меня минимальный уровень избыточности 0.2% (8-байтный хеш на 4КБ сектор данных) при том что в группе может быть до 64000 секторов данных (это ограничение wirehair) 7. если архив записан на диски в raid0, и геометрия raid0 совпадает с геометрией страйпа, например оба 4*64 кб, то при вылете одного диска целиком теряется одна группа. поэтому у меня сектора в страйпе распоалагются не в порядке групп, а в псевдослучайном порядке, генерируемом по номеру страйпа rar может восстановить архив например из raw образа диска, на котором тот был записан? ну т.е. если данные могут смещаться, менться местами и т.д. |