1

Тема: Чтение/запись больших бинарных файлов. Поиск смещений.

Приветствую всех.

Некие люди, потерли файлы. Просили восстановить, но уже попользовавшись компьютером пару дней. В итоге, программы восстановления файлов наотрез отказываются что-либо делать. Если бы файлы были бинарными, то я не стал бы продолжать, но нужные файлы были xml. И восстанавливать их полностью не обязательно. Нужен только кусок.
Для начала, я сделал копию раздела с помощью DriveImage XML и получил здоровенный 50Гб файл.
И вот тут вопрос какими инструментами искать? В последнее время мне нравится lua, но он медленный и у него проблемы с открыванием файлов > 2Гб. Решил попробовать (хоть я и не знаю) perl 5.6, но оказалось что он тоже не смог открыть такой большой файл. Причем

open ("fread", "<", "DISC_C.dat") or die "Произошла ошибка $!";

ничего в консоль не пишет. Оно и ясно, наверняка я делаю что то не так.
Тогда я пошел другим путем. Взял 010Editor, и сделал поиск всех известных значений. В итоге получил огромный список  смещений относительно начала файла с искомыми значениями Около 4000 тысяч (файлы частенько копировались на флешку и обратно, от того кусков так много и было). Сделал экспорт в CSV файл. Затем небольшой скрипт, который читает файл со смещениями и запускает утилиту dd.exe

dd.exe if=DISC_C.dat of=out.find bs=512 count=1024*1024/512 skip=XXX/512

где, XXX прочитанное смещение. Таким образом я получил ~4000 файлов по 1Мб каждый. С ними стало уже проще работать. Далее не интересно. Но скажу, что все что нужно, я достал.

Вот тут то я и хотел задать вопросы:

  • Мне все хотелось сделать с помощью консоли, но 1 пункт - поиск всех вхождений, я смог сделать лишь с помощью 010Editor. Расскажите, какие вы знаете программы, для подобной работы. Линуксовые утилиты тоже приветствуются.

  • В моем случае, скорость dd, была великолепной, но лишь потому, что искал начало файлов, а они были выровнены по размеру сектора. От того то и был выбран блок размером 512байт. А если бы пришлось вырезать куски произвольно, то тогда в самом худшем случае bs=1 и скорость падает в разы. И снова вопрос. Кроме dd.exe, как еще можно вырезать куски файла? Что бы была возможность работы не только с текстовыми файлами, но и с бинарными.

  • Почему все-таки perl не ругается?

Нас невозможно сбить с пути, нам пофигу куда идти.

2

Re: Чтение/запись больших бинарных файлов. Поиск смещений.

C perl-ом разобрался. Просто у меня староватая версия.

Нас невозможно сбить с пути, нам пофигу куда идти.