%20zu%20testen%3F%20.png)
Ich verwende microSD-Karten in einem Produkt und hatte einige Ausfälle aufgrund fehlerhafter Sektoren. Ich habe noch weitere SD-Karten aus derselben Charge und wollte sehen, ob ich sie bis zur Zerstörung testen kann (d. h. bis ein Sektor abgenutzt ist) und messen kann, wie viele Daten insgesamt bis dahin auf die Karte geschrieben wurden.
Wie kann ich dabei vorgehen?
Danke
Antwort1
Eine einfache Technik wäre die Verwendung eines sicheren Tools zum Löschen von Datenträgern. Diese Tools schreiben eine Datensequenz an jeden Speicherort auf dem Laufwerk. Dadurch werden alle Sektoren des Laufwerks getestet. Sie können diese Tools iterativ ausführen, um sicherzustellen, dass der Datenträger sehr sauber ist. Diese Reinigung verbraucht die Lebensdauer einer SD-Karte. Wenn Sie die Anzahl der Durchläufe verfolgen, die ausgeführt werden, bevor die Karte ausfällt, wissen Sie, wie viele Daten Sie auf den Datenträger geschrieben haben. Dies ist jedoch der beste Fall für das Laufwerk, da die Schreibvorgänge über den gesamten Datenträger verteilt werden.
Der schlimmste Fall wäre, immer wieder in denselben Sektor zu schreiben, bis er ausfällt. Dies würde dazu führen, dass die kleinste Datenmenge geschrieben wird, bevor die Karte ausfällt. Wenn Sie eine einzelne Datei schreiben, sie löschen und dann wiederholt erneut schreiben würden, sollte dies zu einem vorzeitigen Ausfall der Karte mit der kleinsten geschriebenen Datenmenge führen. Dies setzt voraus, dass die Karte nicht intelligent ist und die Sektoren im Flash nicht neu zuordnet, wie dies eine SSD tut.
Beide der oben genannten Schritte können mit dem Befehl dd in Linux oder auf einer Linux-Live-CD erreicht werden.
Vorausgesetzt, das Gerät war /dev/sdx, sollte Folgendes funktionieren.
i=0
while :
do
dd if=/dev/urandom of=/dev/sdx bs=1024 count=1000
if [ $? != 0 ];then break;fi
let i=i+1
echo $i
done
Das ist nicht perfekt, aber ungefähr so viel, wie Sie erreichen, ohne selbst zu programmieren. Bei jeder Iteration werden 1 MB zufällige Daten auf die Festplatte geschrieben. Wenn dd zu einem Fehler anfängt, wird es beendet und Sie erfahren, wie viele Iterationen vergangen sind, bevor es fehlgeschlagen ist. Der große Fehler dabei ist, dass die Daten zufällig sind. Wenn die Bits dieselben sind wie vorher, werden sie möglicherweise nicht vom Flash geschrieben und somit nicht ausgeführt. Bei einer angenommenen perfekten Verteilung ist das Ergebnis die doppelte Anzahl der Schreibvorgänge, die erforderlich sind, um fehlzuschlagen.
Eine perfektere Lösung wäre das Iterieren zwischen Nullen und Einsen oder die Verwendung abwechselnder Schachbrettmuster. Ohne ein /dev/one-Gerät in Linux erfordert dies eine kompliziertere Lösung, als ich hier für gerechtfertigt halte.