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.
sd-card
bad-sectors
bad-blocks
Gabe Krause
quelle
quelle
Antworten:
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.
dmsetup
können Geräte erstellen, die E / A-Fehler zurückgeben. Bauen Sie Ihr Gerät einfach miterror
und / oder alsflakey
Ziel. Vonman 8 dmsetup
:Hinweis: Die
flakey
Zielnutzung 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.
quelle
dmsetup
Befehl zum Einrichten eineserror
Geräts, das immer Lesefehler zurückgibtDieser 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.
.
.
.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
dd
, damit es sich heutzutage ähnlich verhält. Ich bin mir aber nicht sicher.Diese Antwort ist eine Erweiterung des Kommentars von @Ruslan
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.
quelle
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.
quelle
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:
und im schlimmsten Fall
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).
quelle
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.
quelle
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
sfdisk
in 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":
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
fsck
die Karte beim Booten und formatieren sie neu, wenn Fehler gemeldet werden, da eine Neuformatierung in diesem Anwendungsfall akzeptabel ist. Dann haben wirfsck
es wieder. Wenn nach der Neuformatierung immer noch Fehler gemeldet werden, wird die Hardware durch eine neuere Variante mit eMMC ersetzt.Viel Glück!
quelle
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?
quelle
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.
quelle
--make-bad-sector
Flagge 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 Befehlhdparm --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?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 -w
in einer Schleife laufen , bis einige fehlerhafte Blöcke angezeigt werden. So etwas sollte funktionieren: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.)
quelle
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.
quelle