Содержание
Довольно часто встречающаяся ситуация, когда флешка отображается в устройствах, но при попытке открыть её появляется характерное сообщение об ошибке:
Что делать в таком случае – непонятно. Беглый поиск в Интернете дал мне понять, что пользователю, столкнувшемуся с этой проблемой предлагается всякая чушь: форматировать, перепрошивать, выкидывать и т.д.. Не верите? Погуглите и посмотрите, перетирают одну и ту же статью, мол, нет раздела, вирусы или ещё что-то… Изредка попадаются материалы по низкоуровневому форматированию. Общий посыл сводится к тому, что флешку хоть и можно попытаться вернуть к жизни, но данные там уже потеряны.
О причинах
Всякий раз люди спрашивают о причинах. Объясняя тем, что “ничего не кидали, не били, оно само”. Я же обычно говорю, что её время пришло. Ну в самом деле, тут конкретно сказать невозможно. Проблема явно не в файловой системе от того, что флешку “внезапно выдернули”, проблема где-то глубже. На уровне контроллера.
И вот ко мне обратились с именно такой неисправностью и просьбой восстановить именно данные. Судьба самого флеш-накопителя уже не интересовала, важны были несколько файлов с неё.
Решение
Сразу говорю, решение подойдёт не каждому ввиду особых условий. Но если у вас, как и у меня, есть знакомые с нужным арсеналом, можно попробовать. Об арсенале я писал в одной из предыдущих статей.
Сегодня будет практика. Да, этот инструмент PC3000 Flash. Откройте ссылку выше в новом окне, посмотрите на эту аппаратуру, она заслуживает внимания.
Этапы восстановления информации
Мысль написать об этом статью возникла уже после того, как я выполнил задачу, поэтому возможна некоторая неполнота и непоследовательность, но я постараюсь описать хронологически и максимально полно всё, что сделал.
Разбираем флешку
Мне было проще – владелец флешки был не против ухудшения внешнего вида, поэтому я просто сломал корпус гвоздодёром. Чаще всего приходится аккуратно разделять половинки корпуса и отжимать защёлки. Должно получиться что-то вроде этого:
Хотя попадались затянутые в термоусадку, а могут быть и вовсе залитые компаундом. Тут как повезёт. Чаще всего они голые. Да и количество микросхем памяти может быть больше, чем 1. С двух сторон. Здесь лучше ярким фломастером подписать на поверхности чипа порядок. Первый – с той же стороны, что и контроллер, второй – с обратной.
Контроллер – это такой маленькая квадратная микросхема, со всех сторон окруженная ножками. Будет на других фото.
Выпаиваем микросхему памяти
Как делаю я – зажимаю флешку в “третью руку” – специальный зажим. Слегка подогреваю феном микросхему памяти до состояния “очень-преочень тёплая”, затем капаю флюсом под один ряд контактов, например ближайший ко мне. И начинаю феном фокусировать горячий воздух на этом ряду.
Когда флюс начинает закипать и парить, поддеваю лезвием целую сторону и начинаю расклинивать. Как правило, вся сторона выводов тут же отлипает. Здесь важно продолжать прогревать, чтобы не оторвать какой-нибудь контакт вместе с дорожкой. Аналогично повторяю с другой стороной.
Флюс здесь совершенно необходим – тепло равномернее распределяется, контакты получаются чистые и неслипшиеся. И вот, чип у нас. Остужаем и протираем от остатков флюса. Если планируете устанавливать чип обратно, можно подготовить конактные площадки на флешке – убрать лишний припой, пока горячая.
На всякий случай перепишем наименование контроллера – мне повезло, попался Alcor AU6990, это довольно распространённый чип с несложным (как правило) транслятором.
Считываем дамп памяти с чипа
Устанавливаем чип памяти в PC3000 Flash считыватель.
Дальше работает в специальной утилите. Надо сказать, что чип устанавливается с некоторым люфтом. И пока он наконец нормально сможет читаться, приходится его вытаскивать, подчищать, смещать, зажимать заново и т.д., может уйти некоторое количество времени. Для установки чипа есть специальная метка, по направлению которой нужно ориентировать ключ на чипе. В случае, если перепутаете – утилита определяет и ругается, так что спалить чип вряд-ли получится.
Итак, запускаем утилиту, устанавливаем количество микросхем памяти (в нашем случае 1) и видим следующее:
Микросхема неизвестная. Читаем идентификатор микросхемы. Как я уже писал, это может получиться не с первого раза. Но когда наконец получится (я в вас верю!), то получим примерно следующее:
Теперь осталось считать дамп памяти с этой микросхемы и дальше работать уже с ним, сам чип можно будет устанавливать обратно (на самом деле я бы пока не спешил, если данные считаются не очень хорошо – возможно придётся перечитывать ещё раз на пониженной скорости, но у меня такого ещё не было).
Скорость чтения не ахти какая… Но бывает и меньше.
Итак, дамп памяти считан. Проблема в том, что структура памяти в микросхемах NAND принципиально отличается от структуры хранения данных на жёстком диске. Если образ диска можно просто подмонтировать к системе и работать с ним, как с виртуальным диском, то тут так не получится.
Производим корркетировку ECC
ECC – Error Correction Code – в общих чертах это специальные коды для устранения небольших ошибок кодирования информации, типа контрольные суммы или информация для восстановления. Чипы памяти весьма ненадёжная структура и то и дело биты начинают врать. Благодаря этим (ECC) кодам мы даже не замечаем сбоев.
После считывания дампа мы можем создать специальную структуру под названием “Граф преобразований”, где в виде конструктора можем проводить различные операции со считанными данными, комбинируя функции различным образом друг с другом. И на любом этапе можем посмотреть, как выглядят наши данные, пока не получим приемлемый результат.
Дело в том, что для уменьшения неравномерности износа ячеек памяти, запись в них ведётся по особым алгоритмам, поэтому “распутывать” этот клубок без контроллера (который знает этот алгоритм) нам придётся самим.
Выбираем опцию “Автоопределение типа ECC”.
Если нам повезло, то увидим нечто такое:
И после утвердительного ответа:
И длинный прогресс-бар внизу… Можно отправиться попить чай, поскольку процесс весьма продолжителен. Но приятно, когда большинство строк зелёные (много и красных бывает). На данном этапе корректируются страницы памяти с учётом ECC.
Определение алгоритма кодирования
Здесь возможны несколько путей решения.
- У нас есть модель контроллера (AU6990), можем сразу выбрать его в качестве транслятора, останется только экспериментально подбирать преобразования;
- У нас есть модель контроллера и чипа памяти, может пойти в “систему решений” от разработчиков PC3000Flash и получить готовые алгоритмы преобразований, если кто-то уже вычислял для этой связки чипа и контроллера, самый лёгкий вариант. В системе тысячи решений, насколько я успел заметить;
- Автоматическое определение алгоритма. Как повезёт.
Автоматика выглядит вот так:
Затем программа автоматически тестирует различные варианты преобразований и ищет характерные структуры (подозреваю, что корректный MBR), если информация корректна, то принимаются подобранные алгоритмы для всех остальных страниц памяти (но не всегда это работает корректно). Например, вот после ряда преобразований удалось нормально прочитать начало тома:
Вот тут я писал про структуру файловой системы FAT, здорово помогает разобраться.
Итак, продолжим автоматический подбор транслятора. Вот на скрине ниже видно. В голубом столбце у нас – вероятности (в %) применения того или иного транслятора, а внизу – лог.
По логу видно, что обнаружены признаки использования транслятора AU6980 (тепло, но мимо), но информация не подтвердилась. А вот дальше – всё получилось! Транслятор AU6990 определён успешно и информация подтверждена. Вероятность 100%.
Но это ещё не всё. Теперь нужно добавить в граф некоторые преобразования. Сейчас я покажу, какие предварительные преобразования здесь вообще есть – их множество:
Как видите – огромное количество. У большинства из них есть ещё дополнительные параметры, в частности размеры страниц, количество блоков, смещения и т.д. Не запутаться в них – уже подвиг.
А вот так выглядит система поиска готовых решений:
В правой части окна – форма поиска. Затем будут выданы различные варианты, предложенные пользователями (вероятно, у них получилось по данным преобразованиям выполнить задачу и они их загрузили в общий банк). Вот я рамкой и стрелкой выделил решение для конкретно моего чипа.
Для предварительной подготовки нужно изменить формат страницы. В граф преобразований добавим соответствующую функцию и зададим рекомендуемые параметры. А параметры можно открыть нажав на красный листочек. Увидим это:
Данные можно скопировать.
В графе преобразований укажем изменение формата страницы:
Готово. Теперь применим алгоритм транслятора со следующими параметрами (отличается от дефолтных):
Поиск файловой системы
После формирования транслятора (предположим, что мы с первого раза подобрали все верные параметры, что случается не так часто), нам нужно просканировать полученный том на предмет наличия файловых систем:
Флешка малого объёма 99% была отформатирована в FAT16/FAT32, поэтому ограничимся следующим фильтром.
Произведём анализ данных раздела. Обнаружены следы присутствия двух файловых систем, со смещения 8192 и 12 496.
Одна из них оказалась искомой – файлы пошли на ура:
Бывают ситуации, когда напротив файлов красные индикаторы, это означает чаще всего, что неправильно выполнены преобразования или задача недовыполнена. Для мелких файлов проблем обычно нет, они целиком вмещаются в страницу. Крупные же файлы “рвутся” на части, и части эти стыкуются неправильно. Поэтому приходится работать дальше.
Ну чтож, моя задача на этом выполнена, я скопировал все файлы на оптический диск, чип памяти припаял обратно (весьма грубо, флешку в утиль), ну и для надёжности отпаял питающий контакт от разъема, чтобы не воткнули случайно в порт и не попалили что-нибудь, т.к. несколько дорожек у меня слиплось в момент пайки, а разделять было лень. Будут разбирать если – увидят.
Если понравилось – Ставьте лайк! Присылайте флешки, рассмотрим подробно! Есть задумка смонтировать видео, пишите, если интересно!
Очень интересно. Уровень вхождения достаточно высокий. Хотелось бы увидеть видео на эту тему, если есть возможность снять