Как восстановить nand память

Обновлено: 04.07.2024

Предлагаю сегодня несколько углубиться в тему SSD накопителей, вернее, в работу NAND памяти как таковой. Не секрет, что в процессе ее функционирования возникают ошибки, которые необходимо предотвращать или корректировать таким образом, чтобы не нарушить целостность данных и обеспечить работоспособность устройства в целом. Давайте поговорим про ошибки NAND памяти и методы борьбы с ними, какие бывают, что является причиной возникновений, как с ними борется контроллер.

Классификация ошибок

Принято делить ошибки на два основных вида – постоянные (некорректируемые) и временные (корректируемые). К первым относится главным образом износ ячеек по причине исчерпания их ресурса. Серьезные производители часто указывают гарантированный ресурс накопителя, т. е. максимальный объем данных, который можно записать без возникновения ошибок.

Так, на момент написания этой статьи у меня тестируются два накопителя – Crucial BX500 с памятью TLC и A-data SU635, в котором установлены чипы NAND типа QLC, способные хранить 4 бита в одной ячейке.

Но вернемся к сегодняшней теме. Второй класс ошибок (временные) можно подразделить на несколько типов, с которыми предлагаю познакомиться немного подробнее.

Read Disturb Error – ошибки чтения

Как следует из названия, эти ошибки никак не связаны с циклами записи/стирания (P/E) ячеек, а причиной возникновения является операция чтения. Почему? Давайте разберемся.

Err_NAND_fets

Кратко напомню, что представляет собой NAND память. В качестве запоминающего элемента ячейки используется транзистор. На данный момент применяется технология изготовления транзисторов с плавающим затвором, который (собственно затвор), и является хранителем заряда, величина коего позволяет определить, какая комбинация бит хранится в ячейке.

Err_NAND_NAND-vs-NOR-Flash-memory-01

Особенностью именно NAND памяти, в отличие от NOR, является организация поблочного доступа к данным, т. е. оперировать отдельными битами/байтами нельзя, можно только считать сразу целый блок данных, произвести там изменения (если требуется) и вернуть этот блок обратно на накопитель.

Для того чтобы определить, какое значение хранится в ячейке, надо измерить уровень заряда, хранящийся в ней. Это пороговое значение напряжения позволит идентифицировать комбинацию бит, которая тут записана. Чтобы выполнить это, на затвор транзистора подается референсное напряжение, что затем позволит измерить пороговое напряжение ячейки.

Err_NAND_fl101_5_Fig1_c

Напряжение считывания (VREAD) изначально выше максимально возможного порогового напряжения, но оно гораздо ниже напряжения, которое необходимо для перепрограммирования ячейки или ее стирания. Казалось бы, в чем может быть проблема?

А проблема в организации NAND памяти. Т. к. мы оперируем не отдельными битами, а блоками данных, то и считывающее напряжение подается на весь блок, из которого потом другим сигналом выбирается нужная нам страница данных. Что при этом происходит?

После считывания нужной порции данных сигнал чтения снимается, и… ничего не происходит? Почти. Проблема в том, что референсное (опорное) напряжение пусть немного, но влияет на ячейки данных, из которых не производилась выборка, но которые «попали под раздачу» по причине того, что находились в том же блоке, что и интересовавшая нас страница. Уровень порогового напряжения изменяется, пусть и на мизерную величину.

Это проблема? После одного чтения нет, и после десяти тоже, и даже после тысячи скорее всего нет. Но все же изменение напряжения в неактивных ячейках неуклонно повышается. Следует отметить, что речь именно о неактивных ячейках на тех страницах, на которые подано опорное напряжение, а чтение из них не производится.

Можно найти результаты исследований, в которых приводится такая цифра – происходит искажение одного бита на каждые 10 5 -10 6 чтений страницы для NAND памяти типа MLC, изготовленной с использованием 16-нм техпроцесса. Следует помнить, что увеличение разрядности ячеек (TLC, QLC) и дальнейшее утончение техпроцесса увеличивают частоту возникновения Read Disturb Error. Оказывает свое влияние и постепенный износ ячеек.

Кстати, на использовании этого эффекта нежелательного изменения значений в ячейках основана хакерская атака на накопитель, цель которой – заставить его выполнять большое количество операций чтения из одних и тех же блоков данных. Это может привести к искажению информации в блоке именно из-за возникновения ошибки Read Disturb.

Как защититься

Как избавиться от ошибки? Есть как минимум два способа. Первый – ошибка будет исправлена «на лету» при помощи используемых алгоритмов коррекции ошибок ECC. Второй - переписать данные, в которых обнаружена ошибка, в другой блок, а исходный очистить и приготовить к повторному использованию. По сути, выполнить операцию «уборка мусора» в сочетании с механизмом выравнивания износа.

Правда, тут есть своя тонкость. Ресурс ячеек отнюдь не бесконечен. Мало того, довольно скромен. Для NAND TLC принято считать, что нормальное значение - 3 000 циклов записи/стирания, для QLC это значение вообще находится на уровне 1 000. Поэтому часто гонять данные туда-сюда не получится, ибо ячейки будут активно изнашиваться.

В то же время и с ошибками Read Disturb мириться нельзя. Часто контроллеры имеют некое заранее заданное количество операций чтения из одного и того же блока, по достижении которого весь блок принудительно переписывается на новое место с последующей очисткой ранее использовавшегося блока данных. В сочетании с системой коррекции ошибок это позволяет избавиться от возникшей ошибки, и обеспечить равномерное расходование ресурса ячеек NAND.

Program Disturb Error – ошибка при программировании ячейки

Следующая ошибка, которая поддается исправлению - Program Disturb Error, т. е. ошибка, возникающая при программировании ячейки. Выше было упомянуто, что для записи/стирания используется напряжение, заметно большее, чем при чтении. И опять суть проблемы в чем-то схожа с рассмотренной выше.

Err_NAND_fl101_5_Fig3_c

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

В данном случае такому нежелательному воздействию подвержены как ячейки из блоков, которые не участвуют в перепрограммировании, так и ячейки, которые располагаются в блоке, выбранном для изменения.

Этот эффект проявляется тем сильнее, чем тоньше техпроцесс, который использовался для изготовления NAND.

Как защититься

Панацеей от этого типа ошибок вновь выступает перенос блока, в котором содержатся поврежденные, но поддающиеся исправлению данные, в другой блок.

Over-Programming Error – ошибка перепрограммирования

Еще один тип корректируемой ошибки – перепрограммирование. Такая ситуация может возникнуть в случае, если при программировании страниц пороговое напряжение в ячейках соседних, находящихся в том же блоке, но не участвующих в операции изменения страниц становится слишком высоким, не соответствующим исходным заданным значениям и не позволяющим провести операцию чтения.

Err_NAND_fl101_5_Fig2_c

Чаще всего это случается с ячейками, в которых по тем или иным причинам после операции стирания в плавающем затворе транзистора сохраняется слишком высокое исходное напряжение. Такое нередко случается с ячейками, ресурс которых уже почти выработан.

Как защититься

На помощь вновь приходит механизм переноса блока данных в новое место, благо ошибка поддается корректировке силами контроллера.

Retention Error – ошибка удержания заряда

Хранящиеся в накопителе данные склонны к повреждению с течением времени. Связано это с падением уровня напряжения в ячейке, точнее, в плавающем затворе транзистора. Хотя он окружен изолирующим оксидным слоем, все же постепенная утечка электронов через этот слой имеет место.

Чем более изношена ячейка, тем активнее идет утечка заряда через изолирующий слой, который постепенно теряет свои физические свойства. Ускорить процесс искажения записанных в NAND память данных могут продолжительное нахождение ячеек в отключенном состоянии, повышенная температура, тип ячеек (MCL, TLC, QLC), использованный для производства чипа техпроцесс, толщина изолирующего оксидного слоя и т. п.

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

Способность держать заряд – одна из важных характеристик любого накопителя. Хотя предполагается, что большинство из них если и обесточивается, то на сравнительно короткое время (часы, максимум несколько дней), все же хочется быть уверенным в том, что спустя более продолжительный период все данные останутся целыми и невредимыми.

Как защититься

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

Механизмы мониторинга и обработки ошибок NAND

Раз возможны ошибки, надо как-то следить за их возникновением и исправлять. Для этого используются несколько технологий и методов.

Error Correction Codes (ECC)

Технология выявления и исправления ошибок в устройствах памяти ECC применяется давно. Используется она, в частности, в модулях RAM, устанавливаемых в сервера, т. е. там, где требования к надежности работы и отсутствию ошибок очень жесткие.

Суть метода заключается в добавлении дополнительных бит к битам данных, что позволяет обнаруживать и корректировать ошибку. Так, к m-битам блока данных добавляется k-бит дополнительной информации, в результате чего блок данных становится равным m+k. Количество дополнительных бит зависит от используемого алгоритма ЕСС.

Такой алгоритм кодирует m+k таким образом, что из всех доступных комбинаций 2 ( m+ k) только минимальное количество комбинаций соответствует корректным данным. Если изменится бит в данных, то это сразу станет видно, и ошибка может быть исправлена.

Количество дополнительных бит варьируется не только в зависимости от применяемого алгоритма ECC, но и от типа NAND памяти, используемой в накопителе. Так, для SLC требуется меньшего всего дополнительных бит, чем для TLC, и тем более для QLC. Количество также зависит от количества циклов P/E, т. к. ячейки постепенно изнашиваются и вероятность появления ошибки становится выше.

Err_NAND_hammond

Производители запоминающих устройств, в частности, контроллеров для них, могут использовать различные алгоритмы ECC. Наиболее распространение получили алгоритмы на базе кода Хэмминга, кода Рида-Соломона, низкоплотностный код (Low Density Parity Codes - LDPC) и ряд других.

Например, код Хэмминга способен определять ошибки в двух битах и корректировать один бит, что делает его пригодным для использования с SLC NAND, где потребуется всего один дополнительный проверочный бит.

Wear Leveling – выравнивание износа ячеек

Операции записи в NAND память не проходя бесследно и являются основной причиной износа ячеек. Для того, чтоб максимально продлить жизнь памяти, используется механизм выравнивания износа. Его смысл в том, чтобы не допускать ситуации, когда в одних блоках NAND содержатся редко изменяемые данные, а в других блоках обновление информации происходит часто.

Wear Leveling и призвана обеспечить равномерное использование всего объема памяти. Контроллер следит за количеством циклов записи в ячейки и стремится, чтобы количество циклов записи/стирания (P/E) было примерно одинаковым у всех блоков. Различают два метода выравнивания износа:

  • Динамический – для равномерного распределения циклов P/E используется весь доступный свободный объем накопителя, не затрагиваются «холодные» данные, т. е. те, которые не обновляются.
  • Статический – выравнивание износа производится на всем объеме накопителя, включая неизменяемые данные.

Второй метод обеспечивает более равномерный износ и, как следствие, большую продолжительность жизни накопителя, но требует больших вычислительных ресурсов и затрачивает больше времени на манипулирование блоками данных внутри накопителя.

Bad-Block Management

Назначение этого механизма знакомо по обычным жестким дискам, где также ведется мониторинг состояния поверхности пластин и вышедшие из строя дорожки отправляются в «плохие» (Bad) и заменяются новыми из резервной области.

В SSD принцип действия тот же. Недопустима ситуация, когда целостность данных нарушается из-за того, что информация была записана в блок, который уже не в состоянии обеспечить полноценную работу. Для этого ведется мониторинг состояния блоков данных, и при получении ошибки, не позволяющей в дальнейшем использовать этот блок, он помечается плохим и прописывается в таблице плохих блоков.

Ошибки NAND памяти

Эта таблица присутствует всегда, т. к. уже на этапе производства или тестирования чипа могут появится плохие блоки. Причем, тестирование на заводе производится в более жестких условиях, чем при обычной работе. Вполне возможна ситуация, когда изначально помеченный как плохой, блок может вполне проходить проверки при повседневном использовании накопителя. Тем не менее, следует избегать использования таких блоков.

Выход из строя одной страницы блока не означает, что другие страницы также проблемные, но тем не менее, весь блок идет «в утиль». После занесения блока в таблицу плохих блоков он больше не используется.

Показываю наглядно самый простой способ восстановить данные с NAND памяти смартфона, независимо от причины, по которой Вам это необходимо. В некоторых случаях телефон неработоспособен из-за повреждения процессора, залитой платы без возможности восстановления, в некоторых телефон заблокирован, а данные необходимо сохранить.

image

Мне посчастливилось работать в компании fix-oscomp, подразделении компании ОСКОМП по ремонту цифровой техники. Здесь я и познакомился на практике с этим способом.

NAND это тип флеш-памяти, наиболее часто используемый в современных смартфонах.

Конструкция NAND — трёхмерный массив. В основе та же самая матрица, что и в NOR, но вместо одного транзистора в каждом пересечении устанавливается столбец из последовательно включенных ячеек. В такой конструкции получается много затворных цепей в одном пересечении. Плотность компоновки можно резко увеличить (ведь к одной ячейке в столбце подходит только один проводник затвора), однако алгоритм доступа к ячейкам для чтения и записи заметно усложняется. Также в каждой линии установлено два МОП-транзистора. Управляющий транзистор разрядной линии (англ. bit line select transistor), расположенный между столбцом ячеек и разрядной линией. И управляющий транзистор заземления, расположенный перед землёй (англ. ground select transistor).

Сегодняшний пациент Xiaomi Mi Max 3:


После залития перестал включаться.


Диагностика показала, что процессор скорее мертв, чем жив. Клиенту необходимы данные с телефона и возможно восстановление самого аппарата.


Плату очистили, но мы не можем заменить процессор, так как процессор и NAND память спарены по ключу и меняем мы их тоже в паре. В таком случае мы берем плату донор от более дешевой модели, в данном случае подойдет Xiaomi Redmi Note 5.

Прогреваем плату нижним подогревом.




Снимаем NAND память.


Очищаем остатки флюса.



Устанавливаем память в считывающее устройство.




В нашем случае нам нужен раздел userdata и boot файлы.


Скорость до 10 MiB/s. Но ждать придется долго. Процесс чтения в среднем занимает 2 часа.


Я думаю некоторые жертвы кирпичей, услышали от мастеров следующее: Память мертвая, вы или замените материнку, или новый смартфон приобретайте. Но, я решил копаться в недрах смартфонов Xiaomi и получить то чего, практически НИКОМУ нельзя использовать даже в Официальных Сервис Центрах Xiaomi, а темболее рядовому пользователю. А именно возможность восстановления битых Flash накопителей. И так, я получил специальное ПО для восстановления Flash накопителей, и специальные программаторы для этого.

Конечно, спросите а как восстанавливаю битый Flash Накопитель ?

Процесс:

•Изначально разбирается смартфон на кусочках.
•Далее, извлекаю Flash накопитель с посадочного места на материнке смартфона через Инфракрасный специальный сеппаратор (Благодарю Alkris2 за ссылку на сие аппарат).
•Подготовится накопитель к восстановлению и посадочное место на материнской платы.
•Накопитель ставится в специальный программатор и заливается прошивка чипа через так называемый Экстренный режим прошивки чипа, не материнки.
•Заливается Сама прошивка смартфона (Благо чип ожил).
•Припается чип обратно на своё посадочное место на материнке.
•Проверяется работоспособность смартфона.
•Если смартфон оживит, собираем и отдаем владельцу, если не оживит, заново повторяем процесс.


Конечно, я думаю, даже сам Админ захочет получить данную Инфу. Но, повторюсь, я НЕ ИМЕЮ ПРАВО дать даже ему такую информацию. Откуда я получил такую инфу ? Тоже молчу. секрет. Это всего лишь была краткое описание по восстановлению кирпичей с битым Flash накопителем. И как описал выше, не дал ничего. Даже на фото не имею право показать, даже готовое устройство. Так как производитель не дает ни в коем случай доступ к такой информации. Но я получил её через моих специальных путей. И к сожалению восстановление чипа (по удаленке) для других Mi Фанов не буду делать, так что не ждите. Повторюсь, штраф мне не по карману, за это меня могут даже посадить в тюрьму. А также, восстановление кирпичей в целом не смогу помочь, из за того что идет слежка за аккаунтом, каждая прошивка регистрируется на серверах Xiaomi. А вы знаете что Китай строго следит за своей продукцией, причем ооочень строго.

Большинство утилит по восстановлению производят полное форматирование памяти, по этому, если нужно сохранить важные данные и не потерять их безвозвратно – обратитесь к специалистам по восстановлению информации. С помощью специального оборудования будет произведено считывание и расшифровка информации непосредственно из микросхемы NAND памяти в обход сбойного или неисправного управляющего контроллера.

Порядок восстановления флэш накопителя.
1. Нужно выяснить модель микросхемы-контроллера чтобы найти утилиту для работы с ним. Это можно сделать двумя способами. Первый – вскрыть корпус флэшки и посмотреть наименование модели контроллера нанесённой на корпусе микросхемы. Если вскрыть корпус проблематично – используем второй способ. Он заключается в определении модели по кодам VID и PID зашитым в микропрограмме контроллера. VID – это идентификатор производителя, а PID – идентификатор устройства. VID и PID имеются в любом USB устройстве. Эти коды можно считать такими программами как CheckUDisk 5.0, UsbIDCheck, ChipGenius, USBDeview, а также средствами операционной системы.

Если VID&PID считать не удаётся или значения пусты то можно попробовать перевести контроллер в тестовый режим. Как это сделать описано здесь. Если и это не поможет - велика вероятность электрического повреждения микросхемы. В данном случае программными способами вылечить накопитель уже не получится.

2. Итак, VID&PID удалось считать, значит шансы на восстановления уже есть. Далее по значениям VID&PID можно найти производителя флэш-накопителя и модель установленного контроллера (например с помощью базы iFlash). Определив контроллер, переходим к поиску сервисной утилиты для работы с ним.

Например:
Вы определили, что VID вашей флэш – 1005, а PID – B113. По базе iFlash находим что во флэш установлен контроллер PS2136 фирмы PHISON. Утилита для этого контроллера USB 2K REL90 (PS2231-UP12). А если тип контроллера был определён вскрытием корпуса, тогда сразу переходим в каталог файлов и ищем подходящую утилиту.

Как работать с утилитами описывать не буду, так как утилит довольно много а порядок работы некоторых из них описан в инструкциях, которые можно найти в архивах с утилитами или прочитать в комментариях к ним.

После восстановления работы контроллера велика вероятность вытащить хоть какие-то данные из памяти флэшки. Для этого можно воспользоваться программой PhotoRec.

Если данные уже не нужны или информация полностью разрушилась, рекомендуется провести тест флэш памяти на наличие сбойных секторов. Сделать это можно программами Flash Memory Toolkit 1.20 PRO, MyDiskTest v2.42, Victoria 4.3 Beta или Flashnul 0.99.

Спасаем потерянную информацию.

Случилось страшное… Исчезла вся важная информация с вашего флэш накопителя или карты памяти! Что может быть страшнее потери информации для того, кто постоянно с ней работает? Случайно отформатировали карту памяти в фотоаппарате с интересными снимками которые делали на отдыхе? Отформатировали USB-флешку с очень нужными вам файлами, а резервных копий не осталось? Ещё не всё потеряно! Утерянную информацию можно попытаться восстановить.

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

Для восстановления потерянных файлов воспользуемся небольшой бесплатной программой PhotoRec 6.10 входящей в пакет testdisk-6.10
Загружаем и распаковываем архив с программой, например в C:\Temp\

Подключаем съёмный носитель к компьютеру и запускаем программу photorec_win.exe

1. В списке найденных дисков выбираем ваш съёмный носитель.

2. Затем выбираем тип файловой системы на носителе, в нашем случае это [Intel].

3. В следующем окне нужно выбрать разделы для поиска удалённых файлов, выбираем первый в списке раздел (Whole disk – поиск на всех разделах диска).

4. Далее, указываем тип файловой системы на диске, т.к. у нас файловая система FAT выбираем [Other]

5. Здесь нужно выбрать директорию для сохранения найденных файлов. По умолчанию эта директория с программой photorec_win.exe, нажимаем «Y».

6. Начнётся процесс поиска удалённых файлов.

7. В результате программа сообщит количество найденных файлов и сохранит их в директорию recup_dir

Читайте также: