UFD Silicon Power 32 Гб

admin Восстановление данных, Флешки

Проблемы восстановления данных с современных флеш-накопителей на примере не самого простого случая
Флешка объёмом 32 Гб пришла от одного из наших партнеров уже без корпуса, поэтому модель не известна. По косвенным признакам можно утверждать, что производитель Silicon Power.
Современный контроллер Phsion PS2251-03 Q. Две микросхемы памяти Toshiba с маркировкой TC58TEG7T2JTA00.
Выпаиваем микросхемы, контролируя температуру и помещаем их в программатор. Дамп памяти снимался довольно долго, на каждый из чипов ушло более 1,5 часов. После этого первым делом проверяем наличие вставок.

Вставки

Вставки – это столбцы бит исключенные из адресации, впервые они стали использоваться в TLC микросхемах Toshiba и SanDisk. Причиной их появления было естественное желание производителя увеличить количество годных микросхем.
Поэтому было придумано при обнаружении проблемных участков памяти не браковать целиком весь чип, а исключать их из работы. Таблица таких вставок формируется на производстве и хранится в самой памяти. Это Hardware-вставки выполняемые производителями микросхем памяти.
Тестирование флеш-накопителя после сборки может выявить новые проблемные места, да и производитель флешки в погоне за прибылью может использовать бракованую память. Решением стал отказ от встроенных в память таблиц вставок и применение так называемых софтовых вставок. На сегодня софтовые вставки встречаются в контроллерах Alcor Micro, Phsion, SanDisk, SM3257EN, но производители добавляют эту функцию во все большее число контроллеров и список растет, поэтому всегда стоит проверять наличие вставок.

Вставка в микросхеме TC58TEG7T2JTA00

Битовые вставки в микросхеме TC58TEG7T2JTA00

Проверка показала, что в данном экземпляре используются только hardware-вставки, удаляем их (первая цифра указывает на смещение вставки от начала страницы, вторая на её размер):

Позиции вставок для блока 0 : 172-2,3334-2,4438-2,5864-2,6494-2,6870-2,7070-2,7446-2,7646-2,
Позиции вставок для блока 1 : 4628-2,4860-2,6134-2,6238-2,7158-2,7494-2,9082-2,
Позиции вставок для блока 2 : 836-2,838-2,1412-2,3818-2,4664-2,5136-2,5534-2,5982-2,8986-2,
Позиции вставок для блока 3 : 500-2,1420-2,1522-2,5648-2,5934-2,6224-2,

XOR

Подбираем подходящий XOR-паттерн и устраняем преобразование. С уменьшением физических размеров ячеек памяти остро встает проблема перетекания заряда из одной в другую, особенно при одинаковых значениях соседних ячеек. Чтобы уменьшить вероятность появления областей ячеек с одинаковыми значениями контроллер ксорит данные со специальным паттерном (он может быть как постоянный, так и меняющийся от страницы к странице). После этой операции даже большой массив одинаковых данных будет выглядеть как белый шум.
Одновременно с этим преобразованием изменяем формат страницы (разделяем пользовательские данные и служебные области)

0-512;1024-16;
512-512;1024-16;
1152-512;1024-16;
1664-512;1024-16;
2296-512;1024-16;
2808-512;1024-16;
3440-512;1024-16;
3952-512;1024-16;
4584-512;1024-16;
5096-512;1024-16;
5728-512;1024-16;
6240-512;1024-16;
6872-512;1024-16;
7384-512;1024-16;
8016-512;1024-16;
8528-512;1024-16;

Это сложное на вид преобразование легко устранить, если знать в каких участках дампа можно найти большой массив однотипных данных (например х00 или xFF).

Внутренний интерлив

Многие микросхемы хранят данные по принципу аналогичному RAID0. Память микросхем делится на плоскости (количество которых может доходить до четырёх), данные разбиваются на блоки определенного размера, которые с чередованием помещаются контроллером в разные плоскости. Необходимо определить наличие чередования (несколько плоскостей в микросхеме еще не означают, что контроллер использует Multiplane Read), вычислить размер блока и устранить интерлив. В некоторых случаях это непростое преобразование усложняется нелинейным порядком следования плоскостей.  В одной встреченной USB флешке управляемой контроллером SM324QF блоки писались в восемь плоскостей (по две плоскости в каждом из чипов) в следующем порядке 2, 0, 3, 1, 4, 6, 5, 7. В данном случае блоки писались контроллером в плоскости  0, 2, 1, 3.

Изменение порядка (Новый порядок 0,2,1,3)
Разделение по блокам (Размер блока 4128)
Объединение по блокам попарно (Размер блока 16)
Объединение по блокам попарно (Размер блока 32)
Разделение по блокам (Размер блока 16512)
Объединение по блокам попарно (Размер блока 64)

Про ротацию страниц внутри блока и сборку трансляторов можно будет узнать в отдельной заметке.