Обновить

Восстановление данных с нуля со сломанной пополам SD-карты памяти

Уровень сложностиСложный
Время на прочтение32 мин
Охват и читатели18K
Всего голосов 191: ↑191 и ↓0+234
Комментарии45

Комментарии 45

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

Спасибо. Я сначала хотел сделать две статьи: взять готовые библиотеки и используя их восстановить данные, а потом уже разобраться в теории. Но подумал, что буду прокрастинировать и вторую потом не допишу.

Но я добавил небольшое оглавление

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

Да и правильно сделал что не стал пилить на куски. Вторая часть стабильно собирает меньше просмотров, а половина авторов ее вообще закидывает. Тут весь кайф именно в цельной картине от паяльника до математики)

Спасибо. Но, честно скажу, было трудно сдержать концентрацию и не потерять мысль на такой большой дистанции.

Шикарная статья! Хабр ещё торт.

Хозяин фотографий будет рад или за эти годы его след безвозвратно потерян?

Спасибо! Хозяин фотографий больше удивлен, чем рад, но рад тоже)

Совершенно верно.
2all: Если есть возможность - дайте автору ещё плюс сверху.

После прочтения данной статьи (а не очередной новости об ИИ, написаной ИИ) понимаешь что Хабр еще торт.

Надеюсь, что статья похожа на "не написанную ИИ" не потому, что она плохо написана)

Когда автор полгода руками лопатит регистры и полиномы, никакой генератор текста рядом не валялся)

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

Шикарная статья! Математику коррекции ошибок даже в таком разжеванном виде прочитать было непросто, а уж как в этом трудно было разобраться - не представляю. Снимаю шляпу перед вашими настойчивостью и усидчивостью!

Спасибо. Мне помогали другие статьи и лекции в открытых источниках. Надеюсь, что такая разобранная (на сколько хватило сил) математика кому-нибудь упростит путь освоения.

Ого! Ничоси! Вот это математика! Люто плюсую! Я прям думал что классический Рид-Соломон сложный, а BCH это надо прям голову сломать! Спасибо за разбор, Прям захотелось посильнее разобраться в BCH. Я так понял, на сегодняшний момент это то, что применяется вместо Рида-Соломона везде. Хороший повод поскрипеть мозгами!

На сколько я понял, это тоже не БЧХ в чистом виде, а что-то оптимизированное под быструю аппаратную обработку.

Используется везде, но что меня удивило: либо я плохо искал, либо нигде нет хоть какого-нибудь разбора такого алгоритма кодирования/декодирования. В том числе, на отличном, от русского, языке.

Будем ликвидировать безграмотность! С первого раза я мало чего (ничего) понял, если Вы не против, попробую ещё одну статью для чайников (как я) написать. Если, конечно, получится разобраться

Только за. Надеюсь, я тоже нигде не допустил грубых ошибок.

Алгоритм оказался намного проще (как мне показалось), чем описанный в вашей статье.

А на что же это так похоже? Оно же каждому тут должно напоминать кое-что...

Открыть

@LitLageR это мне напомнило мою плату подключения 19шт. вентиляторов в обычном АТХ корпусе, без блокнота я даже не вспомню что-где и как в материнке настроены, но 3 год работает тихо и хоть в духовку комп засовывай :)

Скрытый текст

Неожиданно. Это не было пасхалкой)

Ну Вы просто монстр! В хорошем смысле ;)

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

Примерно 5000 секторов по 1кб остались с неисправляемыми ошибками (в реальности с дефектами было около 2% файлов). С учётом того, что примерно столько же удалось исправить "играя напряжением питания", то заряд всё-таки уплыл.

Как зазывно всё начиналось, с распаивания микросхемы памяти на макетку монтажным проводом..., а кончилось абелевыми группами и полями Галуа... 8-)))

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

Трюк с подбором питания от 1.7 до 3.6 вольта порадовал, старая школа. На уставших ячейках плавающий затвор только так иногда и получается прочесть

Спасибо, у меня опытные учителя.

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

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

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

Вот такие истории старой школы)

Чувак, ты больной! Лайк/подписка!

Упоролись на отличненько. Моё почтение.

Это безумно круто!

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

К сожалению, мне трудно запоминается сухая теория без практического применения. Алгебра с ее фундаментальными понятиями групп, колец, полей и т.д. была в вузе в 2010-2011гг, но когда я стал разбираться в изложенном в статье материале, я выглядел как Ди Каприо из этого мема)

Жаль, не было теории кодирования, но мне кажется, что на тот момент, она бы тоже прошла как "материал для сдачи сессии"

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

Вот это уровень. Вот это статья. Всю дорогу меня терзал вопрос: сколько же времени заняло написание статьи и сам процесс - дочитываю до конца, а там все черным по белому написано) БРАВО

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

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

Огонь! Редчайший и уникальный материал в такой абсолютно недружелюбной области, как data recovery.

Спасибо, я старался сделать так, чтобы почти весь материал, который необходим для понимания статьи, содержался в самой статье. Мне кажется, что это должно упростить порог "входа в тему", чтобы эта область стала чуточку дружелюбней

Мне статья понравилась!
Вдохновляющая на подвиги в IT.
Плюс Вам в карму!

отплюсовал в двойном размере, настоящий гик, статья гром. У меня тоже лежит такая карта только не сломана.... надо посмотреть на нее свежим взглядом))

предполагаю автор - поколение Х?)

Большое спасибо! Нет, в этом году я последний год, как "молодежь"

Обычно используют термины die -> plane -> block -> page -> cell.

Я, когда считывал oneNAND с помощью того же stm32, не рискнул использовать подпаянные проводочки, а быстро набросал платку под bga. Не исключено что часть ошибок сыпалось не из ячеек, а из-за такой разводки.

Я считывал дамп несколько раз:

Сначала просто полный дамп без инверсии и коррекции, потом полный дамп с 128 попытками чтения и новой коррекции (причем ошибки оставались только в 1 cell из 8 в page), затем отдельно вычитал именно эти страницы на разных напряжениях. И уже в конце, для чистоты эксперимента, после написания всей статьи, повторил последние шаги. Ошибки остались ровно в тех адресах, что и в прошлый раз.

Кстати, одна из проблем, о которой вспомнил: я снижал ток выходных падов stm32 (ведь я думал, что чем круче фронт, тем быстрее и лучше будет работа), но индуктивные выбросы порождали наводки и ошибки. Так что разводка тоже имеет место быть.

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

Может получилось бы восстановить ещё пару тысяч секторов.

По 2-3 ошибки было почти в каждом секторе. Секторов без ошибок были единицы на весь дамп.

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации