Wie kann ich einen Sektor auf einer SD-Karte absichtlich beschädigen?


142

Ich muss die Ausfallsicherheit von Lese- / Schreibcode für einige eingebettete Hardware testen. Wie könnte ich ein paar SD-Karten opfern und mehrere bekannte Sektoren für eine kontrollierte Studie aufteilen?

Ich kann mir nur vorstellen, einen einzelnen Sektor ein paar Millionen Mal zu überschreiben. Ich frage mich, ob ein Linux-Badblockskript erstellt werden kann, um den zerstörerischen Test für einen einzelnen Sektor mehrere Stunden lang wiederholt auszuführen.


20
Können Sie den Low-Level-SD-Treiber ändern, um so zu tun, als ob es einen fehlerhaften Block gäbe, oder kommt das nicht in Frage?

3
@ MarkYisri, ich glaube nicht, dass der Treiber sehr zugänglich ist. Welcher Treiber auch immer verwendet wird, ist äußerst rudimentär, um die Speicherzuordnung für den Rest der Firmware zu maximieren. Wenn es möglich wäre, würde das wahrscheinlich über meine Möglichkeiten hinausgehen.
Gabe Krause

3
Kannst du einen SD-Kartenemulator bauen? Wohlgemerkt nicht das einfachste Projekt.
user20574

11
In Anbetracht des Ziels könnten Sie gebrauchte SD-Karten für wenig Geld kaufen und Sie könnten leicht eine fehlerhafte bekommen oder eine "Suche nach ..." -Ankündigung platzieren, um gezielt nach fehlerhaften Karten zu suchen. Oder suchen Sie bei eBay nach defekten Karten. Dann testen Sie die Karte und Sie werden die Position der fehlerhaften Bereiche kennen.
FarO

28
Fragen Sie jeden professionellen Fotografen. Sie werden sicherlich einen Stapel lückenhafter SD-Karten haben.
J ...

Antworten:


168

Ein alternativer Ansatz, der kann nützlich sein.

Wenn Ihr Code unter Linux läuft, können Sie ihn möglicherweise mit einem "fehlerhaften" logischen Gerät testen. dmsetupkönnen Geräte erstellen, die E / A-Fehler zurückgeben. Bauen Sie Ihr Gerät einfach mit errorund / oder als flakeyZiel. Von man 8 dmsetup:

error
Fehler bei allen E / A, die in diesen Bereich gehen. Nützlich zum Testen oder zum Erstellen von Geräten mit Löchern.

flakey
Erstellt eine ähnliche Zuordnung zum linearZiel, zeigt jedoch in regelmäßigen Abständen ein unzuverlässiges Verhalten. Nützlich für die Simulation fehlerhafter Geräte beim Testen.

Hinweis: Die flakeyZielnutzung wird hier dokumentiert . Ein einfaches Beispiel hier .

Soweit ich weiß, wird ein E / A-Fehler sofort gemeldet. Dies unterscheidet sich also vom tatsächlichen Verhalten der SD-Karte, bei dem Sie mit Verzögerungen, Blockierungen usw. rechnen müssen. Ich denke jedoch, dass dieser Ansatz in einigen Fällen nützlich sein kann, um zumindest eine schnelle Leistung zu erzielen Vorversuch oder so.


34
Ich schätze dieses Out-of-Box-Denken! Wir sind auf Blockebene über einen 80-MHz-Atmel-Chip und kein echtes Betriebssystem mit der SD verbunden.
Gabe Krause

1
@GabeKrause In diesem Fall hängt der Nutzen dieser Antwort davon ab, wie ähnlich die Linux-Block-Geräte-API der API Ihres eingebetteten Gerätetreibers sein kann.
Qsigma

1
dmsetupBefehl zum Einrichten eines errorGeräts, das immer Lesefehler zurückgibt
Peter Cordes

1
Ich stimme zu, dass dies nach einer besseren Lösung klingt. Zunächst können Sie über jede Hardware replizieren. Außerdem können Sie die verschiedenen Fehlermodi simulieren. Zum Beispiel habe ich ein 16 GB USB-Flash-Laufwerk, das alles in Ordnung funktioniert. Nach einiger Zeit werden in einem bestimmten Bereich falsche Daten zurückgegeben. Es liegt kein FS-Fehler jeglicher Art vor. Sie haben die Datei gelesen, aber der Inhalt ist anders. Einige Sektoren sind offensichtlich instabil. Wie sich ein bestimmtes Gerät verhält, ist jedoch nicht im Voraus bekannt.
Akostadinov

76

Dieser Typ hat den Mikrocontroller auf SD-Karten gehackt, mit denen fehlerhafte Blöcke markiert wurden: https://www.bunniestudios.com/blog/?p=3554

Möglicherweise können Sie das Gleiche tun und Blöcke willkürlich als fehlerhaft markieren.

Heute auf dem Chaos Computer Congress (30C3) haben xobs und ich festgestellt, dass einige SD-Karten Schwachstellen enthalten, die eine willkürliche Codeausführung ermöglichen - auf der Speicherkarte selbst. Auf der dunklen Seite ermöglicht die Codeausführung auf der Speicherkarte eine Klasse von MITM-Angriffen (Man-in-the-Middle), bei denen sich die Karte scheinbar in eine Richtung verhält, aber tatsächlich etwas anderes tut. Auf der leichten Seite bietet es auch Hardware-Enthusiasten die Möglichkeit, auf eine sehr billige und allgegenwärtige Quelle von Mikrocontrollern zuzugreifen.

.

Diese Algorithmen sind zu kompliziert und zu gerätespezifisch, um auf Anwendungs- oder Betriebssystemebene ausgeführt zu werden. Daher wird jede Flash-Speicherplatte mit einem einigermaßen leistungsfähigen Mikrocontroller ausgeliefert, mit dem eine benutzerdefinierte Gruppe von Festplattenabstraktionsalgorithmen ausgeführt werden kann. Sogar die winzige microSD-Karte enthält nicht nur einen, sondern mindestens zwei Chips - einen Controller und mindestens einen Flash-Chip (Karten mit hoher Dichte können mehrere Flash-Chips stapeln).

.

Der eingebettete Mikrocontroller ist normalerweise eine stark modifizierte 8051- oder ARM-CPU. In modernen Implementierungen nähert sich der Mikrocontroller dem 100-MHz-Leistungsniveau und verfügt auch über mehrere Hardware-Beschleuniger auf dem Chip. Erstaunlicherweise liegen die Kosten für das Hinzufügen dieser Controller zum Gerät wahrscheinlich in der Größenordnung von 0,15 bis 0,30 US-Dollar, insbesondere für Unternehmen, die sowohl den Flash-Speicher als auch die Controller innerhalb derselben Geschäftseinheit herstellen können. Es ist wahrscheinlich billiger, diese Mikrocontroller hinzuzufügen, als jeden Flash-Speicherchip gründlich zu testen und zu charakterisieren, was erklärt, warum verwaltete Flash-Geräte trotz der Integration eines Mikrocontrollers pro Bit billiger sein können als unformatierte Flash-Chips.

.

Das Entscheidende ist, dass ein Mechanismus zum Laden und Aktualisieren der Firmware praktisch obligatorisch ist, insbesondere für Controller von Drittanbietern. Endbenutzer sind diesem Prozess nur selten ausgesetzt, da dies alles in der Fabrik geschieht, aber dies macht den Mechanismus nicht weniger real. Bei meinen Erkundungen der Elektronikmärkte in China habe ich gesehen, wie Ladenbesitzer Firmware auf Karten brannten, die die Kapazität der Karte „erweiterten“ - mit anderen Worten, sie luden eine Firmware, die angab, dass die Kapazität einer Karte viel größer ist als die der tatsächlich verfügbarer Speicher. Die Tatsache, dass dies am Point of Sale möglich ist, bedeutet, dass der Aktualisierungsmechanismus höchstwahrscheinlich nicht gesichert ist.

In unserem Vortrag bei 30C3 berichten wir über unsere Erkenntnisse, die sich mit einer bestimmten Mikrocontroller-Marke befassen, nämlich Appotech und deren AX211- und AX215-Angebote. Wir entdecken eine einfache "Klopf" -Sequenz, die über vom Hersteller reservierte Befehle (CMD63, gefolgt von "A", "P", "P", "O") übertragen wird und die Steuerung in einen Firmware-Lademodus versetzt. Zu diesem Zeitpunkt akzeptiert die Karte die nächsten 512 Bytes und führt sie als Code aus.


10
Von allen Antworten kommt diese wahrscheinlich der Frage, nach der das OP tatsächlich gefragt hat, am nächsten.
Cort Ammon

11
Das war eine fantastische Lektüre!
Gabe Krause

@Twisty hat einige der relevanten Teile kopiert.
FarO

2
Runter aus dem Kaninchenbau in die Welt der SD-Kartenarchitektur.
Tejas Kale

38

Dies funktioniert normalerweise nicht, da die neuesten SD-Karten (oder eMMC) statische und dynamische Abnutzungskorrekturen verwenden. Dies bedeutet, dass ein intelligenter Controller Ihre Schreibanweisungen interpretiert und sie einem der am wenigsten verwendeten Flash-Sektoren zuordnet.

Das einzige, was Sie tun können, ist zu versuchen, sich an Ihre Lieferanten zu wenden und deren Datenblatt anzufordern. Möglicherweise gibt es einige (herstellerspezifische) Möglichkeiten, den Status ihres Algorithmus zum Ausgleich des Verschleißes abzurufen. Auf diese Weise können Sie möglicherweise den Status / die Verwendung des zugrunde liegenden Flash-Speichers abfragen. Oder Sie könnten Pech haben und dies könnte nicht existieren.

Wenn Sie Flash wirklich zerstören möchten, müssen Sie nur massive Lese- und Schreibzyklen ausführen und kontinuierlich überprüfen, ob die zurückgelesenen Daten noch konsistent sind. ZB zwei große Dateien erstellen, ihre Prüfsummen speichern und lesen / schreiben, um ihre Prüfsumme zu überprüfen. Je größer der Blitz, desto länger dauert dieser Vorgang.


2
Funktioniert das nicht immer noch, wenn die SD-Karte vollständig mit Daten gefüllt ist, so dass nicht viel neu zugeordnet werden kann? Ich glaube nicht, dass sie viele versteckte Sektoren haben.
Ruslan

2
@ Ruslan Das Gerät muss nicht wissen, ob ein Sektor mit etwas gefüllt ist. Es muss nur den Inhalt der Sektoren kennen, die auf Anfrage geliefert werden sollen, und die Sektoren, die auf Anfrage geschrieben werden sollen. Und dann kann es eine Abstraktionsschicht geben, die es dazu bringt, andere physische Speicher zu verwenden, um diese Sektoren nach einem unbekannten Algorithmus darzustellen ... - "voll" bedeutet natürlich nur "Schwelle für momentan befüllbare Blöcke erreicht".
Alexander Kosubek

6
@ Ruslan: Auch wenn auf dem gesamten Gerät Daten gespeichert sind, kann der Abnutzungsgrad dennoch wirksam sein: Wenn beispielsweise Sektor A einmal und Sektor B 1000 Mal geschrieben wurde, wird erneut geschrieben Sektor B Die Karte kann die Daten für die beiden Sektoren tauschen, so dass Sektor A die Daten von Sektor B enthält (und wahrscheinlich viel häufiger überschrieben wird - aber das ist in Ordnung, weil es frisch ist), und Sektor B die Daten von Sektor A enthält (was wird) hoffentlich nicht viel ändern). Natürlich muss das Gerät auch die Zuordnung speichern, welcher Sektor wo gespeichert wird.
Psmears

2
@GabeKrause ja, das ist die Natur des Tieres. Auf der untersten Ebene gibt es weder NAND- noch Flash-Chips (heutzutage verwendet alles NAND), und vor dem NAND-Chip befindet sich ein intelligenter Controller, der den Bus terminiert (z. B. USB für einen USB-Stick oder MMC für eine SD-Karte) ), und dieser Chip ist für das Mapping / Wear Leveling usw. verantwortlich. Er abstrahiert den Blitz von Ihnen weg. Wenn Sie nand unter Embedded Linux verwenden würden, würde dies beispielsweise ubifs für Sie tun.
amo-ej1,

2
SD-Karten verfügen über einen Mikrocontroller, der eine "Flash Translation Layer" implementiert. Blockanforderungen werden von diesem Mikrocontroller in unformatierte NAND-Befehle übersetzt. Einige SD-Karten verfügen über verborgene Befehle zum Ändern / Aktualisieren der MCU-Firmware, und es werden sogar einige Reverse-Engineering-Anstrengungen unternommen. Die meisten anderen Flash-Speichergeräte als RAW-NAND (die in einigen Fällen wie viele Heimrouter auftreten können) sind wahrscheinlich "überprovisioniert" - was bedeutet, dass Ihre 1-GB-SD-Karte wahrscheinlich etwa 1024 MB + 128 MB RAW-NAND-Speicherplatz enthält, um den Verschleiß auszugleichen, wenn sie voll ist und auch Sektor-Sparing für schlechte Flash-Seiten.
LawrenceC

32

Sie können den Transistorverschleiß erhöhen, indem Sie die Betriebstemperatur erhöhen. Verwenden Sie Schreib-Lösch-Zyklen auf einem erhitzten Chip (70-120 ° C). es wird sich schneller abnutzen.


18
Eine zu hohe Lagertemperatur ist ebenfalls schädlich. Es kann daher praktischer sein, den Chip einige Zeit bei 120 ° C (oder sogar mehr) zu "garen" und dann auf Defekte zu überprüfen.
Dmitry Grigoryev

2
Möglicherweise ist auch eine leichte Überspannung an der Stromversorgung der Karte möglich, die ebenfalls experimentiert werden muss.
Chris H

Unterspannung kann auch verschiedene Arten von Defekten verursachen, z.
user20574

18

Vorwort: Diese Option erfordert zusätzliche Programmier- und Hardwaremodifikationen, ermöglicht jedoch kontrollierte Lesevorgänge, die für den Host höchstwahrscheinlich transparent sind.

Eine SD-Karte verfügt über mehrere E / A-Optionen, kann jedoch über SPI gesteuert werden. Wenn Sie eine SD-Karte nehmen und ändern, so dass Sie die Stifte an einen Mikrocontroller (wie einen Arduino) anschließen können, kann der Arduino die SD-Karte imitieren und für das Gerät, das die SD-Karte liest, transparent sein. Ihr Code auf dem Mikrocontroller kann bei Bedarf absichtlich fehlerhafte Daten zurückgeben. Darüber hinaus können Sie eine SD-Karte in den Mikrocontroller einlegen, damit die Lesevorgänge den Mikrocontroller an die SD-Karte weiterleiten können, um einen Test in Gigabytes zu ermöglichen.


3
Die meisten Hochgeschwindigkeitsgeräte (einschließlich PC-Kartenleser) lehnen es einfach ab, mit einer Karte zu arbeiten, die kein 4-Bit-SD unterstützt.
Dmitry Grigoryev

1
Das OP teilte mit, dass es sich um ein eingebettetes System handele, das die Karte verwenden würde, wodurch es wahrscheinlicher würde, SPI für SD-Karten zu unterstützen
Eric Johnson,

3
Eine Variante davon, die allerdings härter ist, wäre, eine SD-Karte zu finden, für die Sie die Firmware neu flashen können .
Peter Taylor

2
Das ist super interessant! Unser eingebettetes System führt E / A über SPI aus. Ich bin nicht sicher, ob ich die Bandbreite habe, um unsere Hardware zu modifizieren, um eine solche Ergänzung zu erzielen, aber ich denke, es ist ein brillantes Denken.
Gabe Krause

2
Wenn ich mich mit dynamischem Verschleißausgleich auseinandersetze, glaube ich, dass die strategische Erstellung einer "schlechten" SD-Karte mit bekanntermaßen fehlerhaften Sektoren weitaus schwieriger (oder gar nicht möglich) ist, als ich es mir bei der Beantwortung der Frage erhofft hatte. Dies scheint der kontrollierbarste und technisch vielversprechendste Ansatz zu sein, der derzeit nicht in meinem Rahmen liegt, möglicherweise gefolgt von @Olafm. Das Anpassen von Intermediate-Hardware zum Abfangen und "Verfälschen" von Daten an einer vordefinierten Sektorposition während der Datenübertragung scheint ein guter Ansatz zu sein.
Gabe Krause

15

Ich würde zu ebay / aliexpress gehen und die preiswerteste Sd-Karte kaufen, die ich von China finden kann, die, die "zu gut sind, um wahr zu sein". Sie kommen oft mit fehlerhaften Sektoren oder sind in der Software viel größer eingestellt als sie tatsächlich sind. In jedem Fall sollten Sie eine fehlerhafte SD-Karte zum Testen verwenden.


Interessanter Ansatz, aber wie würden Sie in die fehlerhaften Bereiche schreiben, um die Auswirkungen der fehlerhaften Blöcke auf den gespeicherten Code zu testen?
Fixer1234

@ fixer1234, ich hatte eine dieser SD-Karten mit 32 GB, aber nur 128 MB. Ich habe es in meine Kamera gesteckt und konnte Fotos jenseits der 128 MB aufnehmen, aber nur die ersten Fotos konnten zurückgelesen werden. Der Rest wurde aufgelistet, aber als defekt zurückgelesen. Vermutlich möchten sie, dass Sie die Probleme mit der Karte zuerst bemerken, wenn es zu spät ist, sich zu beschweren ...
GuzZzt

11

Es war einmal vor vielen Jahren, als ich für eine ziemlich verstörte Mutter dafür bezahlt wurde, eine Reihe von Abschlussfotos und -videos von einer SD-Karte abzurufen. Bei genauer Betrachtung war die Karte durch einen sichtbaren Riss im äußeren Gehäuse physisch beschädigt worden und hatte mehrere fehlerhafte Sektoren, insbesondere mehrere frühe, kritische Sektoren, wodurch selbst die zu diesem Zeitpunkt zuverlässigsten Wiederherstellungsprogramme die Karte überhaupt nicht lesen konnten . Auch forensische Datentools kosteten damals ein Vermögen.

Am Ende besorgte ich mir eine identische SD-Karte der Marke / Größe und schrieb meinen eigenen benutzerdefinierten Rohdatenspeicherauszug und das Wiederherstellungsdienstprogramm, um die Daten von der fehlerhaften Karte auf die gute zu kopieren. Jedes Mal, wenn das Dienstprogramm auf einen fehlerhaften Sektor stößt, wird der Versuch mehrmals wiederholt, bevor alle Nullen für diesen Sektor geschrieben werden. Anstatt aufzugeben und anzuhalten, wird der Fehler ignoriert und mit dem nächsten Sektor fortgefahren. Die Wiederholungsversuche wurden durchgeführt, da ich auch bemerkt hatte, dass einige Sektoren immer noch eine Leseerfolgsrate von etwa 40% hatten. Sobald sich die Daten auf der neuen SD-Karte befanden, funktionierten die zuvor fehlgeschlagenen Wiederherstellungstools einwandfrei mit minimalem Datenverlust / minimaler Beschädigung. Insgesamt wurden ca. 98% aller Dateien wiederhergestellt. Eine Reihe von zuvor gelöschten Elementen wurde ebenfalls wiederhergestellt, da nichts wirklich gelöscht wurde - nur als solches markiert und langsam überschrieben. Was als etwas langweilige Datenwiederherstellungsübung begann, wurde zu einem meiner unvergesslicheren und interessanteren persönlichen Softwareentwicklungsprojekte. Für den Fall, dass Sie sich wunderten, war die Mutter begeistert.

In jedem Fall zeigt diese Geschichte, dass es möglich ist, eine SD-Karte physisch so zu beschädigen, dass auf Daten weiterhin zugegriffen werden kann, diese jedoch nur in schwer funktionierenden Sektoren vorhanden sind. SD-Kartenplastik ist in der Regel recht dünn, daher kann es hilfreich sein, sich zu verbiegen oder in billige zu schneiden. Ihr Kilometerstand kann variieren.

Sie können sich auch an einigen Orten für die Datenwiederherstellung in Ihrer Nähe umsehen. Da sie sich auf die Datenwiederherstellung von verschiedenen fehlerhaften oder ausgefallenen Geräten spezialisiert haben, sollten sie einige nützliche Eingaben / Tipps haben und möglicherweise sogar einige vorinstallierte SD-Karten zur Hand haben (z. B. für Schulungszwecke), die Sie von ihnen erhalten könnten.


2
Haben Sie dieses Dienstprogramm online veröffentlicht? Das wäre großartig, um mein Arsenal zu erweitern.
Ploni

1
Zu diesem Zeitpunkt würde es wahrscheinlich nicht einmal richtig funktionieren, wenn man bedenkt, wie weit der Fortschritt der Technologie fortgeschritten ist (möglicherweise nicht einmal kompiliert) und welche Systemaufrufe ich auf niedriger Ebene verwendet habe. Es gibt auch ein paar moderne Open-Source-Tools zum Klonen von forensischen Geräten / Laufwerken, die ich eher als Erstes verwenden würde, als meine alte Software aus Mottenkugeln herauszuholen.
CubicleSoft

Ich gehe davon aus, dass Sie wahrscheinlich nur einige Parameter angeben können dd, damit es sich heutzutage ähnlich verhält. Ich bin mir aber nicht sicher.
wizzwizz4

@ wizzwizz4, schau auf ddrescue.
Hildred

"Auch forensische Datentools kosteten damals ein Vermögen." Ich bin mir ziemlich sicher, dass sie es immer noch tun.
jpmc26

5

Diese Antwort ist eine Erweiterung des Kommentars von @Ruslan

  1. Füllen Sie Ihre SD-Karte bis zu 99,9%
  2. Schreiben Sie den Inhalt der verbleibenden 0,1% fortlaufend neu (Schreiben A - Löschen - Schreiben B - Löschen - Schreiben A ...)
  3. Prüfen Sie (in regelmäßigen Abständen), ob Sie die Karte bereits beschädigt haben

Mögliche Alternative:

Ich bin mir nicht sicher, ob dies für Ihre Zwecke funktioniert, aber vielleicht reicht es tatsächlich aus, Ihre Karte physisch zu beschädigen, was viel schneller sein könnte.


6
Das Ausfüllen der Karte zu 99% hilft nicht, da der gesamte Zweck des Verschleißausgleichs darin besteht, genau diese Art von vorzeitigem Schaden zu verhindern. Eine physische Beschädigung der Karte führt mit ziemlicher Sicherheit dazu, dass die Karte nicht mehr initialisiert wird.
Dmitry Grigoryev

2
@DmitryGrigoryev Wie kann das Abnutzungsnivellieren helfen (in diesem Fall ein Hindernis), es sei denn, die Karte hat viel mehr Speicher als die offizielle Kapazität?
ispiro

12
@ispiro Wenn beispielsweise ein Sektor mit hoher Schreibanzahl das nächste Mal überschrieben wird, kann sein Inhalt durch einen Sektor mit niedriger Schreibanzahl ersetzt werden.
Dmitry Grigoryev

1
@DmitryGrigoryev Wenn ich diese Antwort richtig interpretiere, sollte es SD-Karten geben, die kein Level tragen: electronics.stackexchange.com/a/27626/16104
Dennis Jaheruddin

1
@DennisJaheruddin Ja, ältere Karten machen das nicht. Bei diesen Karten reicht es aus, eine leere Datei wiederholt zu erstellen / zu entfernen, bis der Sektor in der Zuordnungstabelle abgenutzt ist.
Dmitry Grigoryev

3

Sie könnten versuchen, eine instabile Stromversorgung oder eine Signalisierung mit höherer Spannung einzuführen.

Ein häufiger Fehler für eine Familie von Geräten, von denen ich weiß, dass sie eine starke Korrelation zwischen der Beschädigung der SD-Karte und dem zeitweiligen Kontakt mit dem Akku aufweisen.


3

Einige ältere SD-Karten mit geringer Kapazität (16 MB) verwenden Flash-Chips in TSOP / TSSOP-Paketen. In einer Werkstatt, die SMT-Nacharbeiten ausführen kann (wenn Sie eingebettete Arbeiten ausführen, verfügen Sie möglicherweise über diese Fähigkeiten im eigenen Unternehmen, um zu prüfen, ob kleine Unternehmen Telefon- / Laptopreparaturen auf Platinenebene durchführen), könnte der Chip möglicherweise getrennt und neu angebracht werden, damit er gelesen und geschrieben werden kann raw (einschließlich der ECC-Codes) mit einem Geräteprogrammierer.

Beachten Sie jedoch, dass Sie hauptsächlich Folgendes testen:

  • Wie Ihr Gerät mit möglichen Timing-Fehlern / Schluckauf fertig wird, die durch die interne Fehlerkorrektur verursacht wurden

und im schlimmsten Fall

  • Wie Ihr Gerät mit einer fehlerhaften SD-Karte umgeht.

Wenn Sie nur überprüfen möchten, wie sich eine SD-Karte aus irgendeinem Grund bei einem fehlerhaften Verhalten verhält, ist es wahrscheinlich am besten, nur elektrisches Rauschen in die Schnittstellenleitungen einzuführen (z. B. indem Sie einen FET-Busschalter dazwischen schalten und zu zufälligen Zeiten vorübergehend umschalten es zu einer Quelle von unsinnigen Signalen (von den richtigen elektrischen Pegeln obwohl).


Terminalausfallende SD-Karten erzeugen kein "elektrisches Rauschen", sondern geben lediglich Fehlercodes für Schreibvorgänge zurück.
Dmitry Grigoryev

2

Bezogen auf die Antwort von OlafM, aber anders: Sie können einen eigenen Mikrocontroller zum Sprechen des SD-Kartenprotokolls programmieren und dann jedes gewünschte Verhalten emulieren.


1

Der Bereich FAT32 Master Boot Record ist wahrscheinlich am anfälligsten für Missbrauch, da er sich logischerweise immer an derselben Stelle befinden muss. (Vielleicht wird dies durch das Soft-Remapping von fehlerhaften Sektoren erledigt, aber ich bin etwas skeptisch, dass dies auf jeder Hardware implementiert ist.) Sie könnten also sfdiskin einer Schleife laufen und sehen, ob Sie es auf diese Weise zerstören können.

Aber ich werde Sie bitten, alles zu tun, um die Zuverlässigkeit der Hardware zu verbessern, anstatt zu versuchen, mit fehlerhafter Hardware in der Software umzugehen. Das Problem dabei ist, dass SD-Karten auf seltsame Weise versagen. Sie werden unlesbar, können nicht mehr beschrieben werden, geben Ihnen schlechte Daten, treten während des Betriebs eine Zeitüberschreitung auf usw. Es ist sehr schwierig, alle möglichen Fehler einer Karte vorherzusagen.

Hier ist einer meiner Lieblingsfehler, der "Big-Data-Modus":

schlechte sd fake big data

SD-Karten sind Gebrauchsgüter, die einem enormen Kostendruck ausgesetzt sind. Teile ändern sich schnell und Datenblätter sind schwer zu bekommen. Gefälschte Produkte sind keine Seltenheit. Bei billigem Speicher sind sie schwer zu übertreffen, aber während bei SSDs Zuverlässigkeit an erster Stelle steht, sind Geschwindigkeit, Kapazität und Kosten bei SD-Karten an erster Stelle (wahrscheinlich nicht in dieser Reihenfolge).

Ihre erste Verteidigungslinie ist die Verwendung eines lötbaren eMMC-Teils mit einem echten Datenblatt eines seriösen Herstellers anstelle einer austauschbaren SD-Karte. Ja, sie kosten mehr pro GB, aber das Teil wird über einen längeren Zeitraum in Produktion sein, und zumindest wissen Sie, was Sie bekommen. Durch das Einlöten des Teils werden auch zahlreiche potenzielle Probleme (beim Schreiben herausgerissene Karten, schlechter elektrischer Kontakt usw.) mit einer herausnehmbaren Karte vermieden.

Wenn Ihr Produkt einen Wechselspeicher benötigt oder es einfach zu spät ist, etwas zu ändern, sollten Sie entweder das zusätzliche Geld für Karten mit "industrieller" Qualität ausgeben oder sie als Einwegartikel behandeln. Was wir tun (unter Linux), ist fsckdie Karte beim Booten und formatieren sie neu, wenn Fehler gemeldet werden, da eine Neuformatierung in diesem Anwendungsfall akzeptabel ist. Dann haben wir fsckes wieder. Wenn nach der Neuformatierung immer noch Fehler gemeldet werden, wird die Hardware durch eine neuere Variante mit eMMC ersetzt.

Viel Glück!


Ich habe dir einen Daumen hoch gegeben. Ich verwende viel SD-Karten und habe ein paar Mal im Jahr einen Fehler. Ich hatte nie viel darüber nachgedacht, aber meiner eigenen Erfahrung nach zeigten meine fehlgeschlagenen Karten die Symptome einer fehlgeschlagenen FAT, bevor sie schließlich wertlos wurden. Ich denke, Sie sind auf etwas hier :) So einfach das Erstellen und Löschen von Dateien sollte das Heck aus der FAT ausüben.
Jwzumwalt

1

Vielleicht ist dies nicht die Richtung, die Sie wollten, aber ich habe festgestellt, dass ich meine SD-Karte entfernt habe, während mein Radio oder Laptop davon gelesen hat. Dies garantiert eine abgestürzte SD-Karte etwa 1/5 oder 1/10 Mal. Es scheint, dass die Karten nicht gut damit abschneiden, wenn sie während eines Lesevorgangs und vermutlich während eines Schreibvorgangs abgeschaltet werden. Nachdem ich die Kommentare von Robert Calhoun gelesen habe, kann ich davon ausgehen, dass dies die FAT schädigt. Obwohl ich nicht weiß, warum nur das Lesen einen Absturz verursacht - es sollte kein Schreiben stattfinden?


Dies könnte die FS beschädigen, aber nicht sicher, ob es tatsächlich zu schlechten Sektoren kommen würde
akostadinov

Ich kann Ihnen mit Sicherheit sagen, dass die Karte abstürzt und eine Neuformatierung erfordert. Ich habe dies viele Male mit SD-Karten, einem Raspberry Pie, meinem Laptop und einigen meiner Heimgeräte gemacht.
Jwzumwalt

2
Erfordert eine Neuformatierung! = Fügt den Sektoren Schaden zu . Dateisystem, ja. Branchen vielleicht.
wizzwizz4

1

Wenn Ihre SD-Karte FAT32-formatiert ist, können Sie die 2 Fette hex-editieren und einen Sektor mit dem richtigen Hex-Code als schlecht markieren. Dies ist nur ein Trick, wenn Sie eine Software logisch testen möchten, die einen fehlerhaften Sektor an diesem bestimmten Ort finden soll. es schadet auch deiner sd-karte nicht, ein reformat bringt sie wieder in den normalen zustand.


1
Willkommen bei Super User! Dies scheint ein interessanter Ansatz zu sein. Können Sie vielleicht erklären, wie die Hex-Bearbeitung konkret ausgeführt werden soll? Vielen Dank.
Ben N

Ich denke, der Linux-Befehl hdparm wird den Trick machen: Er ermöglicht es Ihnen, einen Sektor zu speichern, den Sie später bearbeiten können, und dann auf Ihre Karte zurückzuschreiben. Sie müssen jedoch Dokumentation über vfat und man hdparm finden. Entschuldigung, ich bin nirgends in der Nähe eines Windows-Computers.
Emile De Favas

Die --make-bad-sectorFlagge sieht vielversprechend aus! Ich kann jedoch nicht sagen, ob dies nur auf dem Linux-System funktioniert, auf dem dieser Befehl ursprünglich ausgeführt wird. Ich hoffe, dass der Befehl hdparm --make-bad-sector 20000 /dev/sd#den Sektor 20000 irgendwie beschädigt und auf meinem eingebetteten Hardwaregerät, auf dem kein Linux ausgeführt wird, als fehlerhaft erkannt wird. Irgendwelche Gedanken?
Gabe Krause

0

Ich frage mich, ob ein Linux-Badblockskript erstellt werden kann, um den zerstörerischen Test für einen einzelnen Sektor mehrere Stunden lang wiederholt auszuführen.

Auf einem einzelnen Sektor - nein, da der Abnutzungsgradcode auf der SD-Karte die logischen Blöcke überall neu zuordnen wird.

Sie können jedoch problemlos badblocks -win einer Schleife laufen , bis einige fehlerhafte Blöcke angezeigt werden. So etwas sollte funktionieren:

while badblocks -w /dev/xx; do :; done

Angenommen, Badblocks geben 0 zurück, wenn keine fehlerhaften Blöcke erkannt wurden, und ansonsten ≠ 0 (die Manpage sagt nichts und ich habe den Quellcode nicht überprüft.)


-1

Normalerweise implementieren sie bei SD / uSD-Karten Wear Leveling, was sehr schwierig sein kann. Abhängig vom Typ (Einzelschichtzelle, Mehrschichtzelle, TLC, 3D-NAND usw.) kann der Schreibzyklus, der erforderlich ist, um den Sektorpool so weit aufzubrechen, dass er erschöpft ist, mehrere TB umfassen.

Ich habe dies tatsächlich mit einer 4 GB, 64 GB und 256 GB Pro Duo, SSD und Thumbdrive getestet. Die 64 GB K --- s --- mit 4 Mikron 16 GB-Chips haben ungefähr 3,84 TB gedauert, bevor sie mit einem einzigen weichen Fehler im FAT-Bereich versagten . Die Verwendung von 256 GB dauerte ein bisschen weniger, aber ohne direkten Chipzugriff schätzte man, dass es wahrscheinlich 5 TB geschrieben hat, bevor es schließlich mit MBR-Korruption herauskam, aber nicht klar war, ob der Controller im USB3-Modus einwandfrei funktionierte, aber USB2 mehr Störungen beim Zurücklesen aufwies und es lief auch sehr heiß. 4 GB Duo ist beim Kopieren von Daten im Reader fehlgeschlagen. Ich bin mir nicht sicher, aber dies entspricht einer Nutzungsdauer von 6 Jahren. Die Kamera hat auch Meldungen zum Wiederherstellen angezeigt. Wenn Sie die Versorgungsspannung während des Schreibvorgangs ändern, wird der Ausfall um ein Vielfaches beschleunigt. Meine 128-GB-microSD-Karte ist nach etwa zweijähriger Verwendung mit ähnlichen Symptomen ausgefallen.

Nicht mehr relevante Notizen zu Röntgenexperimenten entfernt.


1
Es gibt bereits mehrere Antworten, die dazu beitragen, bestimmte Rektoren zu zerstören. Dein Vorschlag, zufällige zu zerstören, bringt nichts Besonderes.
Máté Juhász
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.