EugeneRoshal
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Bulat_Ziganshin Цитата: А RAR неплохо защищает метаинформацию, но в нём не реализован такой изощрённый поиск сохранившихся данных. Хотя я не знаю, может без переставновок он справится? | Раз об этом зашла речь, я решил этот момент доделать. Добавил уникальный ID к ECC секторам, а в старых версиях RR за уникальный ID сойдет размер защищаемой области. Сделал поиск секторов данных и ECC по всему файлу. Bloom filter для поиска CRC64 оказался полезен и экономен к памяти, спасибо за совет. Я пока использовал 16 бит фильтра на одну CRC64, а в качестве хэш-функций саму CRC64 и CRC64>>30. Пробовал больше функций или более сложные - выигрыша по сравнению с этим вариантом не получил. Еще для ускорения поиска можно не искать данные с текущим ID в уже найденных блоках с этим же ID при условии, что блок не начинается с нуля. ID надо учитывать, так как в ситуации "архив в архиве", если оба архива с -rr и внешний с -m0, границы блоков данных могут пересекаться. Еще при поиске данных можно пропускать найденные ECC блоки с текущим ID. Сейчас тестировал черновую версию. Взял 10 архивов от 2 мб до 1 гб с 20% RR, порезал на блоки по 1 мб, перемешал в случайном порядке, записал в файл 7.7 гб размером, запустил его восстановление. RAR возился с ним 15 минут, но вытащил из него все исходные архивы в целости, починив места склеек. Изнутри это выглядит как один проход для сбора ECC, а потом 10 проходов поиска данных и починки каждый с новым ID. Добавил к этому файлу 100 erasures, 10 insertions и 10 deletions, RAR починил его за те же 15 минут. Если в архиве все сектора с одним ID, восстановление идет быстрее, так как в блоках данных и ECC можно не искать CRC64. Я упаковал те же исходные файлы в 1 RAR архив 7.7 гб с 20% RR, и аналогично перемешал его содержимое 1 мб блоками. RAR починил его за 200 секунд. Правда теперь расход памяти при восстановлении зависит от размера архива. По первым оценкам примерно как 0.001 от размера. С архивами на десятки TB отъест немало. Но тут или продвинутое восстановление, или постоянный расход памяти. Если не обнаружатся какие-нибудь проблемы, включу это в 5.60. Правда насколько восстановление перемешанных данных употребимо на практике - вопрос. Твой комментарий по упавшей файловой системе я видел. В любом случае пусть эта возможность будет хотя бы ради эстетики Кстати, получился интересный побочный эффект. Если чиним архив c -m0 и -rr со вложенным архивом с -rr, теперь Repair вытаскивает оба архива по отдельности. |