Нам часто задают вопрос "С флешки/жесткого диска пропали файлы, я пробовал восстановить при помощи таких-то программ - ничего не получилось, имеет ли смысл привозить устройство вам?". Почти всегда на этот вопрос можно ответить утвердительно. Конечно бывают ситуации когда по описанию проблемы можно почти однозначно сделать вывод что вероятность маленькая. Эта статья - как аргумент в пользу ответа что смысл попробовать есть всегда. В статье речь пойдет про неочевидное поведение USB Flash при неисправном контроллере.

Поступила USB Flash с проблемами с файловой системой - определяется корректно, показывает корректный объем, первых несколько тысяч секторов заполнено 00, при этом посекторная копия сделалась без ошибок и просадок по скорости. Классика - или было запущено форматирование на несколько секунд, или сбой в работе файловой системы. Чаще всего с решением таких задач справляется PC3000 Data Extractor, обладающий набором различных функций для работы с поврежденными файловыми системами. Однако сканирование не дало практически никаких результатов - реконструированная файловая система FAT32 содержала некорректные имены директорий, содержимое практически всех файлов было битым (что намекает на проблемы с адресацией). При этом содержимое корневого каталога и вовсе найдено не было. Это распространенная ситуация, когда описание корневного каталога сдвигается на небольшое количество секторов (как правило, от 10 до 1024 байт) - после внесения вручную необходимых правок все папки и файлы становятся видны.

Возвращаемся к флешке - в случаях, когда автоматические средства не дают нужного результата, прибегаем к ручному анализу. Для этого требуются уверенные знания файловой системы и HEX-редактор. Таблица разделов пуста, boot sector FAT32 отсутствует. В boot-секторе содержится информация, которая упрощает ручной анализ файловой системы - это размер зарезервированной области, количество секторов раздела, размер кластера, количество FAT-таблиц и их размер. Пример корректного boot-сектора для FAT32 ниже:

Ничего критичного в отсуствии этой информации нету - потратив немного времени узнаем нужные нам параметры. После этого необходимо найти описание корневых папок - в случае FAT32 он хранится во 2 кластере файловой системы. По заданным смещениям вместе ожидаемого описания корневых папок находится совсем не то, что ожидаем увидеть. Еще раз перепроверяем все расчеты, изучаем соседние кластера - видим корректные описания папок 2,3-уровней, корня - нет. Так как имена директорий в FAT32 хранятся в почти явном виде, можно спросить у клиента несколько названий корневых директорий или поискать стандартную системную папку, например "System Value Information". Ниже - корректный root-каталог (разумеется, скриншот не с клиентской флешки по соображениям конфиденциальности):

Красным подчеркнуты названия каталогов и файлов. Задаем в поиск имя папки "System Value Information". Область поиска - вся флешка, но место, где он должен быть - ~10-30 мегабайт от начала раздела. Нужная нам запись о папке находится, изучаем кластер - видим описание вполне себе корректного root-каталога. Только находится он аж за серединой раздела. Изучаем ближайшие области (отталкиваясь от того, что root-каталог - это 2 кластер, то через 2 кластера вверх должны быть FAT-таблицы. И они есть, но их содержимое кажется не совсем корректным. К этому моменту появляются подозрения о том, что дело вовсе не в проблемах с файловой системой, а с физическим состоянием самой флешки. Сформировали вручную корректный BOOT-сектор и записали его в нужную область, перенесли FAT таблицы и root-каталог в нужное место (разумеется, все этим манипуляции производились на посекторной копии, а не на исходном устройстве). После всех изменений построили виртуальную файловую систему, увидели корректные корневые каталоги и файлы в них, но содержимое файлом попрежнему было совершенном не тем, каким должно быть.

Напомним, изначальным был диагноз о повреждении файловой системы. На это указывало абсолютно всё - отсутствие сбоев при создании копии, большое количество корректных файлов, найденных сигнатурным поиском, не было никаких намеков на физическую неисправность флешки. Однако полученная в ходе выполнения работ картина дала нам основания полагать, что причина такого странного разрушения файловой системы именно в физическом состоянии. Все это было сообщено клиенту с предложением прибегнуть к восстановлению данных при физической неисправности флешки. Получив согласие на выполнение работ выпаяли микросхему памяти, вычитали дамп на программно-аппаратном комплексе PC3000 Flash Edition. Ниже - несколько скриншотов:

Итог всех манипуляций - корректная файловая система, практически все файлы восстановлены с сохранением структуры (имена папок и файлов замазаны по соображениям конфиденциальности):

Эта задача - иллюстрация того, насколько различные неисправности и неочевидное поведение устройств встречается в практике.