Secure Erase /CMD38 / Low Level Format („TRIM“) bei (Micro-) SD Karten. Warum kein Thema?

TeleTubby666

Cadet 3rd Year
Registriert
Juni 2021
Beiträge
42
Hallo,

ich hatte diesen Text bereits Anfang des Jahres bereits im Hardwareluxx Forum gepostet, aber keine Reaktion darauf bekommen. Das wiederum untermauert meine abschließende Frage meines Textes nur umso mehr, so dass ich hier nun noch einmal mein Glück versuchen möchte:

Es gibt da ein Thema, das mich seit längerem beschäftigt, und zwar geht es darum, dass in vielen Geräten (Micro-) SD Karten nutze, wie z.B. auf diversen Spielkonsolen, meinem Raspberry, diversen Mobilgeräten oder auch gelegentlich zum Datentransport, wenn ich keinen USB Stick zur Hand habe. Dass ich gestern wieder mit einer korrupten Datei zu kämpfen hatte, nehme ich jetzt zum Anlass, meine Gedanken hier zu formulieren.

Wie wahrscheinlich jeder weiß, sorgt das Wear Leveling dieser Karten dafür, dass Speicherbereiche gleichmäßig beschrieben werden, so lange genügend freier Platz auf den Karten vorhanden ist. Ist die Karte jedoch nahezu vollständig beschrieben worden, kommt es zur verstärkten Belastung der verbleibenden Bereiche und auch nach dem Löschen von Daten zu einem dauerhaften Einbruch der Leistung, weil die Karte quasi nicht „mitbekommt“ welche Bereiche wieder als beschreibbar markiert worden sind.

Bei SSDs sowie in modernen Betriebssystemen hat sich der TRIM-Befehl etabliert, der der SSD die freien Bereiche übermittelt und zum erneuten Beschreiben frei gibt. Mit dem Zero-Erase-ATA Kommando lässt sich die SSD in Sekundenschnelle (natürlich unter Verlust aller Daten) auf den Werkszustand zurück setzen, bevor sie verkauft oder komplett neu eingerichtet werden soll.

Bei SD Karten gibt es einen ähnlichen Befehl, das sog. CMD38-Kommando, das auch alle Speicherzellen zum erneuten Beschreiben frei gibt. Leider wird dieses jedoch kaum bis gar nicht verwendet, weil die meisten SD-Kartenleser intern über USB angeschlossen sind und diesen Befehl nicht an die Karte durchreichen können. Im Internet wird zum Zurücksetzen der Karten kurioserweise z.B. der SD Card Formatter der SD Card Association empfohlen, obwohl der überhaupt nicht mit dem o.g. Kommando arbeitet sondern - viel schlimmer - die SD Karte mit Nullen überschreibt.

Es bleiben also als Alternativen ausschließlich Geräte, die den CMD38 Befehl an die Karte weiter reichen können. Dazu gehören beispielsweise DSLR-Kameras, wenn die „Low-Level“ Formatierung angewählt wird, oder auch Platinencomputer wie z.B. der Raspberry oder der Arduino, für die sich im Internet (sehr wenige) entsprechende Anleitungen finden lassen.

Ich persönlich möchte eigentlich die Leistung, Lebensdauer und die Zuverlässigkeit meiner Karten verbessern. Aber muss ich mir dafür nun allen Ernstes eine neue DSLR (meine alte Canon unterstützt nur Karten bis zum SDHC-Standard), einen Arduino oder einen zweiten Raspberry zulegen, um gelegentlich einen Erase durchführen zu können? Gibt es noch andere Lösungen, von denen ich nichts weiß? Warum gibt es so wenig im Netz zu diesem Thema? Interessiert sich wirklich niemand dafür?

Auf eure Antworten bin ich sehr gespannt und freue mich sehr darauf!

Liebe Grüße!
 
  • Gefällt mir
Reaktionen: emerald
Ich fürchte das es auf "Interessiert sich wirklich niemand dafür" hinaus läuft.
Korrekterweise, sorry fürs Klugschei**en - ein ESP ist ein ESP, kein Arduino, nur die Programmierumgebung (IDE) des Arduino wird dafür genutzt. Das mit dem CMD38 Befehl war mir nicht bekannt danke für die Info dazu.

Was deinen Grundgedanken angeht wäre es dann nicht interessanter eine Industrial Grade SD Karte zu kaufen z.B. https://www.kingston.com/de/memory-cards/industrial-grade-microsd-uhs-i-u3?
 
TeleTubby666 schrieb:
Dass ich gestern wieder mit einer korrupten Datei zu kämpfen hatte

Mutmaßungen.

Annahmen usw. keine Fakten.

die Frage ist ob der User das Gerät korrekt in Betrieb setzt und nutzt.

tools gibt es zu Hauf.

wenn man meint man kennt die Technik, das Silizum und wie es verschalten ist elektrisch, man kenne die Firmware vom Reader, firmware von der SD Card usw. dann sollte man auch in der lage sein ein geeignetes Betriebssytem zu installieren. z.b. freebsd und dann gewisse tools, welche immer dabei sind auch zu verwenden.

https://linux.die.net/man/8/badblocks
https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html
https://www.heise.de/download/product/hxd-50764

TeleTubby666 schrieb:
für die sich im Internet (sehr wenige) entsprechende Anleitungen finden lassen.

Wo ist das Problem. Ist seit Slackware 96 im Grunde immer gleich.
Man darf auch die alten bewährten Dinge verwenden und muss kein systemd oder die neuen netzwerknamensschema verwenden.

--

Man sollte auch mal prüfen ob man nicht den "Card Reader" der billigen Camera ruiniert hat als Laie. Kontaktfehler sollen ja üblich sein. Es gibt ja eine gewisse garantiere Anzahl wie oft man etwas an und abstecken darf, danach ist es eine lotterie ob es geht.
TeleTubby666 schrieb:
Ich persönlich möchte eigentlich die Leistung, Lebensdauer und die Zuverlässigkeit meiner Karten verbessern.

Und erneut keine Ahnung über das Silizium. Wobei es ein alter HUT ist, Thema SSD, thema USB Stick.

--

Kauf dir eine neue Kamera, neue Speichermedien und einen neuen REader für den PC. Dann prüfen ob es erneut auftritt. Neuware, kein Refurbished.
 
Interessiert sich wirklich niemand dafür?

Das wird es sein.
 
TeleTubby666 schrieb:
Gibt es noch andere Lösungen, von denen ich nichts weiß?

Hi, erstmal vielen Dank für deinen Beitag. Ich hatte mich auch lange gefragt warum es "TRIM" nicht für SD-Cards, USB-Sticks, etc gibt. Jetzt bin ich im Bilde, dass es mit CMD38 zumindest eine Implementierung des Features für SD-Cards gibt. Es freut mich umso mehr das mein Raspi es auch noch unterstützt. :-)

Nach meinem Kenntnisstand werden in SD-Cards und USB-Sticks im Consumer-bereich für gewöhnlich Flash-Chips von geringer Qualität verbaut, gewissermaßen der Rest, welcher für höherwertige Produkte wie SSDs nicht geeignet ist.
Daher werden SD-Cards und USB-Stick mehr als "Verbrauchs-" bzw. "Wegwerf"-Ware betrachtet und Features wie TRIM erscheinen weniger relevant, zumal es den erneuten Absatz auch schmälern würde sollten die billigen Produkte länger halten. Hier kümmert sich also der integrierte Controller mehr schlecht als recht um die Flash-Zellen und anhand diverser Bewertung zu Produkten dieser Art scheinen die Ausfallraten auch entsprechend hoch zu sein oder auch die Erfahrungsberichte mit korrupten Dateien.

Für den Professional- bzw. Industrial-Bereich aber sind zuverlässige SD-Cards ein relevanter Faktor und daher gibt es wahrscheinlich das CMD38 im MMC-Befehlssatz.
Als DIY-NAS/-Router/-Whatever-Bastler lege ich auch Wert auf Zuverlässigkeit, lange Lebensdauer und Performance... aber diese Nische ist vermutlich kleiner und damit unrelevanter als der Professional- bzw. Industrial-Bereich.

Nun zu deiner Frage:
In den letzten Jahren hatte ich einige USB-Adapter für NVME oder SATA in den Händen und einige unterstützten das Durchreichen des TRIM/DISCARD-Befehls, auch ATA-Secure-Erase bzw. TCG-Opal-CMDs wurde unterstützt. Das hat mich schon positiv beeindruckt. Bei USB-Card-Readern kann es durchaus sein, dass es Produkte gibt, welche den MMC-Befehlssatz und damit CMD38 unterstützen.

Bei welchen USB-Card-Readern könnte es funktionieren ? Die Antwort scheint hier beschrieben zu sein: https://pawitp.medium.com/quickly-wipe-an-sd-card-with-esp8266-95c5ad473cd9
Adapter, welche SDCards als "/dev/mmcblk*" verbinden, scheinen den MMC-Befehlssatz zu unterstützen.
Nach Stackexchange beherrschen das z.B. die Realtek Chips "RTS5129" und "RTS5139", welche oft in Laptops direkt verbaut werden.
Vielleicht hast du ein entsprechendes Notebook mit verbautem RTS5129 oder RTS5139 zur Hand oder es gibt USB-Card-Reader mit diesen Chips.
 
  • Gefällt mir
Reaktionen: TeleTubby666 und Anakin Solo
Nachtrag: Weitere Recherche deutet daraufhin, dass weit mehr Realtek Card Reader Chips den MMC-Befehlssatz und damit CMD38 ("TRIM") unter Linux unterstützen.

Siehe z.B. hier ,
Realtek PCI-Express card reader including rts5209, rts5227, rts522A, rts5229, rts5249, rts524A, rts525A, rtl8411, rts5260.
Realtek USB 2.0 card readers including RTS5129, RTS5139, RTS5179 and RTS5170.
hier und hier.

Sollte man also ein Notebook mit integriertem Card-Reader zu Verfügung haben stehen die Chancen sehr gut das es möglich ist eine SDcard zu trimmen.

Getestet habe ich auf einem alten Lenovo L540 Notebook (RTS5227) und auf einem Pi 3B. Dabei hat sich gezeigt, dass mittels
  • blkdiscard
  • fstrim
  • EXT4 mount option "discard"
das Verwerfen von Blöcken funktioniert.
 
  • Gefällt mir
Reaktionen: TeleTubby666 und gymfan
Vielen, vielen Dank für die ausführlichen Erläuterungen und die vielen Tipps!

Hier wird auf einem meiner Laptops die SD Karte nach Eingabe von fdisk -l als mmcblk0 angezeigt und entsprechend funktioniert das Löschen mittels blkdiscard -f /dev/mmcblk0 auch. Super!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: emerald
@TeleTubby666 — hast du in der Zwischenzeit weitere Entdeckungen gemacht, von denen du uns berichten kannst und magst? Lassen sich SD-Karten im Anschluss an das "blkdiscard" tatsächlich schneller beschreiben, oder führt die schöne Theorie in der Praxis zu keinem Gewinn? Falls es was bringt, bei welchen SD-Karten (Marken und Modelle) ist das der Fall? Es ist ja zu befürchten, dass nicht alle das CMD38-ERASE tatsächlich auch in der Weise durchführen, dass sie alle Flash-Zellen physikalisch löschen und nicht nur als unbenutzt betrachten.
 
Guten Morgen,

ich nutze das o.g. Vorgehen tatsächlich regelmäßig, um meine (Micro-)SD Karten wieder zu bereinigen. Allerdings muss ich zugeben, dass ich noch keine Geschwindigkeitsmessungen vorher/nachher durchgeführt habe. Es gibt jedoch einige SD-Karten, die seit längerer Zeit dauerhaft im Gebrauch sind (z.B. im Raspberry). Wenn ich das nächste mal eine solche Karte zurücksetzen möchte, dann werde ich eine entsprechende Messung durchführen, versprochen!

Die Befürchtung, dass bei einigen Karten der CMD38-Befehl nicht korrekt durchgeführt wird, kann ich nicht teilen, denn der Prozess dauert bei jeder Karte nur wenige Sekunden - danach ist die Karte leer. Wenn wirklich jede Zelle gelöscht würde, dann würde der Prozess deutlich länger dauern.


Edit: Ich habe nach ca. zwei Jahren Laufzeit ein Backup meines Raspberry Images erstellt, die SD Karte mittels blkdiscard wieder zurückgesetzt und das Image zurück gespielt. Viel hat sich nicht getan, die Änderung der Schreibgeschwindigkeit im Benchmark mag mit 1 MB/s innerhalb der Messtoleranz gelegen haben, aber der Effekt auf die SD Karte lässt sich einwandfrei nachweisen:
https://gitlab.com/scalvin/stickpic
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: emerald und Zongo
Zurück
Oben