Мне нужно проверить устойчивость некоторого кода чтения / записи для некоторого встроенного оборудования. Как я могу пожертвовать несколькими SD-картами и сломать несколько известных секторов для контролируемого исследования?
Единственное, о чем я могу думать, это перезаписать один сектор несколько миллионов раз. Интересно, можно ли создать скрипт Linux badblocks для повторного выполнения своего разрушительного теста в одном секторе в течение нескольких часов.
sd-card
bad-sectors
bad-blocks
Гейб Краузе
источник
источник
Ответы:
Альтернативный подход, который может быть полезен.
Если ваш код работает под Linux, то, возможно, вы можете протестировать его с «неисправным» логическим устройством.
dmsetup
может создавать устройства, которые возвращают ошибки ввода-вывода. Просто создайте свое устройство, используяerror
и / илиflakey
цель. Отman 8 dmsetup
:Примечание:
flakey
целевое использование задокументировано здесь . Основной пример здесь .Насколько я знаю, об ошибке ввода-вывода будет сообщено немедленно, так что это отличается от реального поведения SD-карты, где вы можете ожидать задержки, зависания и т. Д. Тем не менее, я думаю, что этот подход может быть полезен в некоторых случаях, по крайней мере, для быстрого выполнения предварительный тест или около того.
источник
dmsetup
команда для настройкиerror
устройства, которое всегда возвращает ошибки чтения: stackoverflow.com/questions/1870696/…Этот парень взломал микроконтроллер на SD-картах, используемых для маркировки плохих блоков: https://www.bunniestudios.com/blog/?p=3554
Вы можете сделать то же самое и произвольно пометить блоки как неисправные.
,
,
,
источник
Обычно это не работает, потому что большинство последних SD-карт (или eMMC) используют статическое и динамическое выравнивание износа, что означает, что интеллектуальный контроллер интерпретирует вашу инструкцию записи и отображает ее в один из наименее используемых флеш-секторов.
Единственное, что вы можете сделать, это попытаться связаться с вашими поставщиками и попросить их таблицу данных; могут быть некоторые (специфичные для поставщика) способы получения состояния их алгоритма выравнивания износа. Это потенциально позволит вам запрашивать состояние / использование базовой флэш-памяти. Или вам может не повезти, а этого может и не быть.
Если ваша цель на самом деле уничтожить флэш-память, все, что вы можете сделать, это запустить массивные циклы чтения и записи и постоянно проверять, чтобы данные, которые вы читаете, все еще были согласованными. Например, создайте два больших файла, сохраните их контрольные суммы и прочитайте / запишите их, чтобы проверить их контрольную сумму. Чем больше вспышка, тем дольше будет длиться этот процесс.
источник
Вы можете увеличить износ транзистора, увеличив рабочую температуру. Используйте циклы записи-стирания на нагретом чипе (70-120 ° C); это будет носить быстрее.
источник
Предисловие: этот параметр требует дополнительных программных и аппаратных модификаций, но он позволяет осуществлять контролируемое чтение, наиболее вероятно, прозрачное для хоста.
SD-карта имеет несколько вариантов ввода / вывода, но ее можно контролировать через SPI. Если вы возьмете SD-карту и измените ее так, чтобы вы могли прикрепить контакты к микроконтроллеру (например, Arduino), вы можете сделать так, чтобы Arduino имитировал SD-карту и был прозрачен для устройства, читающего SD-карту. Ваш код на микроконтроллере может преднамеренно возвращать неверные данные при необходимости. Кроме того, вы можете поместить SD-карту в микроконтроллер, чтобы показания могли проходить через микроконтроллер к SD-карте, чтобы обеспечить гигабайты тестирования.
источник
Я пошел бы на ebay / aliexpress и купил бы самую дешевую SD-карту, которую я могу найти из Китая, ту, которая "слишком хороша, чтобы быть правдой". Они часто поставляются с неисправными секторами или имеют в программном обеспечении гораздо больше, чем есть на самом деле. В любом случае, вы должны получить неисправную SD-карту для тестирования.
источник
Когда-то, много лет назад, мне платили за то, чтобы получить набор выпускных фотографий и видео с SD-карты для довольно расстроенной матери. После тщательного осмотра карта была каким-то образом физически повреждена с видимой трещиной во внешнем корпусе и имела несколько поврежденных секторов, особенно несколько ранних, критических секторов, что делало даже самые надежные программы восстановления в тот момент, когда они полностью не читали карту , Кроме того, инструменты судебной экспертизы тогда стоили целое состояние.
В итоге я приобрел SD-карту идентичного бренда и размера и написал свою собственную утилиту для восстановления и восстановления необработанных данных, чтобы скопировать данные с плохой карты на хорошую. Каждый раз, когда утилита попадает в неисправный сектор, она несколько раз повторяет попытку, прежде чем записать все нули для этого сектора, и вместо того, чтобы сдаваться и останавливаться, игнорирует сбой и переходит к следующему сектору. Попытки повторных попыток были предприняты, так как я также заметил, что в некоторых секторах показатель успешности чтения все еще составляет около 40%. Как только данные были на новой SD-карте, инструменты восстановления, которые ранее не работали, работали безупречно с минимальной потерей / повреждением данных. В целом, около 98% всех файлов были восстановлены. Ряд ранее удаленных элементов также был восстановлен, потому что на самом деле ничего не удалялось - просто помечалось как таковое и медленно перезаписывалось. То, что начиналось как немного скучное занятие по восстановлению данных, стало одним из моих самых запоминающихся и интересных личных проектов по разработке программного обеспечения. Если вам было интересно, мать была в восторге.
В любом случае, эта история показывает, что можно физически повредить SD-карту таким образом, что данные все еще доступны, но есть сектора, которые едва функционируют, и что-либо, пытающееся прочитать их, испытывает трудности при этом. Пластик SD-карты, как правило, довольно хрупкий, поэтому сгибание или нарезка на некоторые дешевые могут помочь. Ваш пробег может варьироваться.
Вы также можете спросить в некоторых местах восстановления данных в вашем районе. Поскольку они специализируются на восстановлении данных с различных отказавших или вышедших из строя устройств, они должны иметь некоторые полезные входные данные / подсказки и могут даже иметь в руках несколько предварительно отобранных SD-карт (например, в учебных целях), которые вы могли бы получить от них.
источник
dd
заставить его вести себя аналогично этому, в настоящее время. Я не уверен, хотя.Этот ответ является дополнением к комментарию @Ruslan
Возможная альтернатива:
Не уверен, что это работает для ваших целей, но, возможно, на самом деле этого будет достаточно, чтобы физически повредить вашу карту, что может быть намного быстрее.
источник
Вы можете попробовать ввести нестабильный источник питания или сигнализацию более высокого напряжения.
Я знаю, что распространенная ошибка семейства устройств - это сильная корреляция между повреждением SD-карты и прерывистым контактом батареи.
источник
Некоторые старые SD-карты малой емкости (16 МБ) используют флэш-чипы в пакетах в стиле TSOP / TSSOP. Мастерская, способная к доработке SMT (если вы выполняете встроенную работу, возможно, у вас есть этот навык, в противном случае проверьте, есть ли небольшие компании, занимающиеся ремонтом телефона / ноутбука на уровне платы), можно было бы отделить и заново прикрепить этот чип, чтобы его можно было читать и записывать raw (включая коды ECC) с программатором устройства.
Тем не менее, имейте в виду, что вы будете в основном тестировать:
и в худшем случае
Если вы просто хотите проверить, как оно ведет себя с ошибочным поведением по какой-либо причине от SD-карты, вероятно, лучше всего просто ввести электрический шум в интерфейсные линии (например, путем установки переключателя шины FET между ними и случайного переключения это к источнику бессмысленных сигналов (хотя правильных электрических уровней).
источник
Относительно ответа OlafM, но другого: вы можете запрограммировать собственный микроконтроллер так, чтобы он говорил по протоколу SD-карты, а затем эмулировать любое поведение, которое вам нужно.
источник
Область основной загрузочной записи FAT32, вероятно, наиболее подвержена злоупотреблениям, поскольку на логическом уровне она всегда должна находиться в одном и том же месте. (Возможно, это происходит с помощью мягкого переназначения плохих секторов, но я несколько скептически отношусь к тому, что это реализовано на всех аппаратных средствах.) Таким образом, вы можете запустить
sfdisk
цикл и посмотреть, сможете ли вы разрушить его таким образом.Но я попрошу вас сделать все возможное для повышения надежности оборудования, вместо того, чтобы пытаться работать с плохим оборудованием в программном обеспечении. Проблема в том, что SD-карты выходят из строя разными способами. Они становятся нечитаемыми, они перезаписываются, дают неверные данные, они истекают во время операций и т. Д. Попытка предсказать все возможные ошибки карты очень трудна.
Вот одна из моих любимых ошибок, «режим больших данных»:
SD-карты - это потребительские товары широкого потребления. Части быстро меняются, и данные трудно найти. Поддельный товар не случайно. Что касается дешевого хранилища, то его сложно превзойти, но, хотя твердотельные накопители делают надежность надежнее, приоритет для SD-карт - скорость, емкость и стоимость (вероятно, не в таком порядке).
Ваша первая линия защиты - использовать съемную деталь eMMC с реальной таблицей данных от известного производителя вместо съемной SD-карты. Да, они стоят больше за ГБ, но часть будет в производстве в течение более длительного периода времени, и, по крайней мере, вы знаете, что вы получаете. Припайка детали также позволяет избежать целого ряда потенциальных проблем (срыв карт во время записи, плохой электрический контакт и т. Д.) Со съемной картой.
Если вашему продукту требуется съемное хранилище или уже слишком поздно что-либо менять, подумайте о том, чтобы потратить дополнительные деньги на карты «промышленного» класса или относиться к ним как к одноразовым предметам. Что мы делаем (под linux) -
fsck
это карта при загрузке и переформатируем ее, если сообщается о каких-либо ошибках, так как переформатирование приемлемо в этом случае использования. Тогда мыfsck
это снова. Если после переформатирования он все еще сообщает об ошибках, мы отправляем его в RMA и заменяем аппаратное обеспечение более новым вариантом, использующим eMMC.Удачи!
источник
Возможно, это не то направление, которое вы хотели, но я обнаружил, что удаление моей SD-карты во время чтения с нее радио или ноутбука гарантирует сбой SD-карты примерно в 1/5 или 1/10 раз. Кажется, что карты плохо справляются с отключением питания во время чтения и предположительно записи. После прочтения комментариев Роберта Кэлхуна ниже, это заставляет меня думать, что это может повредить FAT. Хотя я не знаю, почему простое чтение приводит к сбою - не должно быть никаких записей?
источник
Если ваша SD-карта отформатирована в FAT32, вы можете отредактировать 2 жира в шестнадцатеричном формате и пометить сектор как плохой с правильным шестнадцатеричным кодом. Это всего лишь хитрость, если вы хотите провести логическое тестирование программного обеспечения, которое должно найти плохой сектор в этом конкретном месте; это также не повредит вашей SD-карте, переформатирование вернет ее в нормальное состояние.
источник
--make-bad-sector
Флаг выглядит многообещающим! Тем не менее, я не могу сказать, будет ли это работать только в системе Linux, которая изначально запускает эту команду. Я надеюсь, что командаhdparm --make-bad-sector 20000 /dev/sd#
каким-то образом сделает сектор 20000 плохим и будет обнаружен как плохой на моем встроенном аппаратном устройстве, на котором не работает Linux. есть идеи?В одном секторе - нет, потому что код выравнивания износа внутри SD-карты будет отображать логические блоки повсюду.
Но вы можете легко работать
badblocks -w
в цикле, пока не появятся некоторые плохие блоки. Примерно так должно работать:при условии, что badblocks возвращает 0, если не было обнаружено плохих блоков, и ≠ 0 в противном случае (на странице руководства ничего не сказано, а я не проверял исходный код).
источник
Обычно с SD / USB-картами они осуществляют выравнивание износа, так что это может быть довольно сложно. В зависимости от типа (однослойная ячейка, многослойность, TLC, 3D-NAND и т. Д.) Цикл записи, необходимый для его прерывания настолько, чтобы исчерпать пул секторов, может составлять несколько ТБ.
Я действительно тестировал это с 4 ГБ, 64 ГБ и 256 ГБ Pro Duo, SSD и флэш-накопителем, 64 ГБ K --- s --- с использованием 4-микронных микросхем 16 ГБ работало около 3,84 ТБ, прежде чем он потерпел неудачу с единственной мягкой ошибкой в области FAT , Использование 256 ГБ длилось немного меньше, но, по оценкам, без прямого доступа к микросхеме оно, вероятно, записало около 5 ТБ, прежде чем оно окончательно выдало с повреждением MBR, но неясно, вызвал ли контроллер его исправную работу в режиме USB3, но у USB2 было больше глюков во время чтения и это также побежал очень жарко. При копировании данных в считывателе произошел сбой 4 ГБ Duo, опять же, я не уверен, что соответствует 6 годам использования, и камера также показала сообщения «Восстановление». Случайно изменяющееся напряжение питания во время записи заставит его работать намного быстрее. Мой microSD объемом 128 ГБ вышел из строя примерно через 2 года использования с похожими симптомами,
Убраны неактуальные заметки о рентгеновских экспериментах.
источник