Forum: Mikrocontroller und Digitale Elektronik Internes Verhalten eines USB-Sticks bei Erhalt eines Sektorschreibbefehls


von Peter M. (r2d3)


Lesenswert?

Hallo,

in welchem Moment löscht ein USB-Stick einen Flash-Sektor, bzw. eine 
Flash-Zelle?

Tut er das nach Bedarf in dem Moment, in dem er einen Schreibbefehl für 
einen Sektor erhält erhält (mit der typischen Folge einer verlangsamten 
Schreibrate)

oder empfängt ein USB-Stick ähnlich einer 2,5''-SSD TRIM-Befehle und 
löscht entsprechend ungenutzte Flash-Zellen im Voraus, so dass er bei 
Erhalt eines Sektorschreibbefehls ohne Löschverzögerung gleich 
losschreiben kann?

: Bearbeitet durch User
von Foobar (asdfasd)


Lesenswert?

> in welchem Moment löscht ein USB-Stick einen Flash-Sektor, bzw. eine
> Flash-Zelle?

Da kocht jeder Hersteller sein eigenes Süppchen.

Btw, TRIM dient erstmal der Erhöhung der Lebensdauer (besseres 
Wear-leveling).  Es kann unter bestimmten Bedingungen zu verbesserten 
Schreibraten führen, zwingend ist das aber keinesfalls (sieh es eher als 
Ausnahme).

von Klaus K. (Gast)


Lesenswert?

Peter M. schrieb:
> Hallo,
>
> in welchem Moment löscht ein USB-Stick einen Flash-Sektor, bzw. eine
> Flash-Zelle?
>
> Tut er das nach Bedarf in dem Moment, in dem er einen Schreibbefehl für
> einen Sektor erhält erhält

Gibt es einen solchen "hart addressierten" (Sektor)-Befehl an den 
externen Speicher überhaupt? Oder kann der Stick resp. der 
Flashcontroller auf dem Stick selbst entscheiden, wohin er nun die Daten 
auf den Flash schreibt?!

Der PC schickt halt nur ein File/Datenstrom und es ist dem Filesystem 
auf dem Stick überlassen ob er das in die bereits gelöschte 
Blöcke/Sektoren schreibt (write) oder erst Blöcke löschen (erase) muß, 
bevor er diese beschreiben kann.

Sinnvoll wäre ein Löschen im Hintergrund, also immer wenn nichts an der 
USB-Schnittstelle passiert. Deshalb sollte man ja auch nie einen Stick 
abziehem ohne ihn vorher abzumelden.

von Jim M. (turboj)


Lesenswert?

Peter M. schrieb:
> oder empfängt ein USB-Stick ähnlich einer 2,5''-SSD TRIM-Befehle

Ein Stick kann dem OS durchaus mitteilen das die Trim Befehle 
unterstützt werden, und Windows kann diese auch nutzen.

Die Sache ist für den Flash selbst betrachtet komplizierter, da zwischen 
den Daten auf den Chips und dem USB Port noch ein Controler hängt der 
nicht-triviale Dinge tut, u.a. Wear Leveling.

Daher ist OPs Frage nicht soo einfach zu beantworten. Für kurze 
Schreibzugriffe muss der Stick nicht unbedingt jedesmal eine Löschaktion 
starten, denn er hat normalerweise ein paar vorher gelöschte Pages als 
Puffer zur Verfügung.

Man müsste also OP die Frage stellen wieso er das so genau wissen will.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Klaus K. schrieb:
> Der PC schickt halt nur ein File/Datenstrom und es ist dem Filesystem
> auf dem Stick überlasse

Das Filesystem ist bei USB-MSC Geräten auf dem Host implementiert. Das 
Gerät sieht nur Sektoradressen, genau wie eine klassische Festplatte. 
Sonst könnte man Sticks ja auch gar nicht mit unterschiedlichen 
Dateisystemen formatieren.

Der Flash-Controller im Stick wird diese Adressen noch einmal auf 
physische Adressen mappen um Wear Leveling zu ermöglichen.

Bei MTP-Geräten ist das anders, aber m.W. gibt es keine Speichersticks 
die das umsetzen. Dort werden abstrakte Dateizugriffe per USB 
übertragen, und das Dateisystem ist auf dem Gerät implementiert. Das 
wird u.a. von Android-Geräten genutzt, weil es auch den gleichzeitigen 
Schreibzugriff auf Dateien durch das Gerät selber ermöglicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter M. schrieb:
> in welchem Moment löscht ein USB-Stick einen Flash-Sektor, bzw. eine
> Flash-Zelle?
In dem Moment, wo der Controller des USB-Sticks das Löschkommando an 
seinen Flash-Chip sendet.

Dieser Moment hat allerdings gar nichts damit zu tun, wann du etwas per 
USB-Kommando an den Stick sendest. Dazwischen sitzt dessen Housekeeping 
und das Wearleveling und der Cache.

Lies mal, was so ein USB-Flash-Controller heute alles kann und macht:
- 
https://www.hyperstone.com/de/USB-31-Controller-Flash-Memory-Controller-2130.html

Da wird schnell klar: du greifst mit keinem USB-Befehl jemals irgendwie 
direkt auf das Flash zu.

: Bearbeitet durch Moderator
von Norbert (der_norbert)


Lesenswert?

Peter M. schrieb:
> oder empfängt ein USB-Stick ähnlich einer 2,5''-SSD TRIM-Befehle

Ich habe das mit sieben verschiedenen USB-Flash-Sticks versucht. Nicht 
ein einziger davon hat TRIM unterstützt.

Sandisk, Intenso, Samsung, Transcend, …

von Peter D. (peda)


Lesenswert?

Peter M. schrieb:
> in welchem Moment löscht ein USB-Stick einen Flash-Sektor, bzw. eine
> Flash-Zelle?

In dem Moment, wo eine Schreibanforderung erfolgt. Ein fabrikneuer 
USB-Stick hat also erstmal die doppelte Schreibrate, da alles gelöscht 
ist.
Im Gegensatz zu SSDs kennt ein Stick kein Trim, kann also nicht 
vorausschauend löschen.
Bessere Sticks geben eine kleinere Kapazität an, als an Flash verfügbar 
ist. Sie haben dadurch einen Pool an nicht zugewiesenen Pages, die sie 
im Hintergrund löschen können.
Z.B. gibt es Sticks mit 256GB (langsam) oder 240GB (schnell).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter D. schrieb:
> Peter M. schrieb:
>> in welchem Moment löscht ein USB-Stick einen Flash-Sektor, bzw. eine
>> Flash-Zelle?
> In dem Moment, wo eine Schreibanforderung erfolgt.
Nein, die werden unabhängig davon beim Garbage Colletion gelöscht und 
fürs Schreiben vorbereitet. Wenn eine Datei überschrieben oder gelöscht 
wird, dann wird einfach der Block als "noch zu löschen" markiert und 
später aufgeräumt. Deshalb ist so ein Stick auch noch einige Zeit nsch 
Abschluss einer Dateioperation aktiv. Und er wird nach Anlegen einer 
Versorgung auch einfach so von sich aus aktiv, kontrolliert 
Referenzzellen und kopiert Blöcke um, wenn sich die Referenzzellen 
entladen haben und die Daten gefährdet sind.

von Peter M. (r2d3)


Lesenswert?

Hallo Jim M.,

Jim M. schrieb:
> Man müsste also OP die Frage stellen wieso er das so genau wissen will.

Es geht darum, zu erkennen, ob eine dateisignaturorientierte 
Datenrettungssoftware bestimmte komprimierte Dateien erkennt.
Ein Datenträger, der TRIM versteht und umsetzt, zerstört die 
Wiederherstellungsgrundlage und ist für einen solchen Test nicht 
geeignet.

von Hmmm (hmmm)


Lesenswert?

Lothar M. schrieb:
> Wenn eine Datei überschrieben oder gelöscht wird, dann wird einfach der
> Block als "noch zu löschen" markiert und später aufgeräumt.

Ohne TRIM weiss der Stick bloss gar nichts davon, dass etwas gelöscht 
wurde, das ist im einfachsten Fall nur ein Schreibzugriff auf einen 
Sektor, um den Eintrag aus dem Directory (dessen Struktur der Stick 
nicht kennt) zu entfernen.

Insofern können eigentlich nur bisher nicht beschriebene oder 
Reservesektoren auf Verdacht gelöscht werden.

Mit TRIM wäre es anders, aber Norberts Testergebnisse klingen danach, 
dass das höchstens in seltenen Fällen unterstützt wird.

Peter M. schrieb:
> Ein Datenträger, der TRIM versteht und umsetzt, zerstört die
> Wiederherstellungsgrundlage und ist für einen solchen Test nicht
> geeignet.

Wenn es rein um Tests geht, kannst Du dafür je nach Betriebssystem auch 
TRIM sicherheitshalber deaktivieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hmmm schrieb:
> den Eintrag aus dem Directory (dessen Struktur der Stick nicht kennt)
Du wirst dich wundern, was der Controller da durchaus mitanalysiert. 
Meine Erfahrung: letzlich ist es die Firmware im Flashcontroller, die 
einen USB-Stick gut oder schlecht macht.

Ich konnte diese Erfahrung mit der Firmware wiederholt(!) bei Xmore 
microSD-Karten machen:
- 
https://www.mikrocontroller.net/search?query=xmore&forums%5B%5D=1&forums%5B%5D=14&max_age=-&sort_by_date=1

Und darunter besonders den 
Beitrag "Re: Raspberry Pi langlebigere SD-Karte, wie?" und die Links 
darin. Der Dauertest mit solchen microSD-Karten läuft übrigens immer 
noch.

Und aus einem Fehler heraus bekam ich zwischendurch mit der "anderen" 
Firmware programmierte mciroSD --> die Karten waren nach 2 Wochen 
kaputt. Mit der "richtigen" Firmware halten die selben im Dauertest 
jetzt inzwischen gut 9 Monate. Also macht die Firmware mindestens den 
Faktor 80 in der Lebensdauer aus.

: Bearbeitet durch Moderator
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Ich konnte diese Erfahrung mit der Firmware wiederholt(!) bei Xmore
> microSD-Karten machen:

Bei SD-Karten gibt aber die Spec das FAT Dateisystem vor, bei USB-Sticks 
nicht.

Beitrag #7552010 wurde vom Autor gelöscht.
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Bei SD-Karten gibt aber die Spec das FAT Dateisystem vor
So ganz eineindeutig ist das da aber nicht festgelegt und vor allem: die 
Karte verhindert nicht, dass du ein anderes FS verwendest. Ich habe eine 
steinalte Kamera, die formatiert jede SD-Karte ungefragt auf FAT16 um.

> bei USB-Sticks nicht.
Allerdings kann ich mit überaus hoher Wahrscheinlichkeit vorhersagen, 
dass ich heute exFAT (oder ausnahmsweise noch FAT32 bzw. NTFS) auf dem 
Stick antreffen werde. Und dann ist es nachvollziehbar, dass die 
Hersteller für solche FS mit einer Verbreitung >99% irgendwelche 
Optimierungen einbauen.

von Peter D. (peda)


Lesenswert?

Lothar M. schrieb:
> Du wirst dich wundern, was der Controller da durchaus mitanalysiert.
> Meine Erfahrung: letzlich ist es die Firmware im Flashcontroller, die
> einen USB-Stick gut oder schlecht macht.

Es wäre aber schon recht merkwürdig, wenn ein Hersteller diesen Aufwand 
treibt und dann diese Zusatzfunktionen nicht extra bewirbt. Insbesondere 
wäre es sinnvoll, die analysierten FS auch zu benennen.

Auch muß sicher verhindert werden, daß fälschlich Daten gelöscht werden. 
Z.B. wenn der Stick als linearer Speicher ohne bekanntes FS für 
Datenlogger verwendet wird.

von Norbert (der_norbert)


Lesenswert?

Hab' hier gerade einen 128GB:

›Bus 003 Device 002: ID 0781:5583 SanDisk Corp. Ultra Fit‹

der seltsame Symptome zeigt. Da kein TRIM funktioniert, läuft nun 
testweise eine Routine welche den Stick im Zeitlupentempo mit 0x00 
füllt. Immer alle zwei Sekunden einen kompletten 2MiB Block. Mal sehen 
ob der Controller diese ›leeren‹ Blöcke löscht und intern als frei 
markiert. Sollte sich dann später in der Schreibgeschwindigkeit zeigen.

Werde demnächst berichten…

Wer's versuchen will:
1
pv -L 1M </dev/zero \
2
  | dd if=/dev/stdin of=/dev/sdX \
3
       iflag=fullblock bs=2M

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Lothar M. schrieb:
> Niklas G. schrieb:
>> Bei SD-Karten gibt aber die Spec das FAT Dateisystem vor
> So ganz eineindeutig ist das da aber nicht festgelegt und vor allem: die
> Karte verhindert nicht, dass du ein anderes FS verwendest. Ich habe eine
> steinalte Kamera, die formatiert jede SD-Karte ungefragt auf FAT16 um.

O doch, das ist eindeutig festgelegt.

SD(SC)-Karten (mit bis zu 2 GByte Größe) müssen mit FAT16 formatiert 
werden, SDHC-Karten (zwischen 4 und 32 GByte Größe) müssen mit FAT32 
formatiert werden und SDXC-Karten (zwischen 64 GByte und 2 TByte Größe) 
sowie SDUC-Karten (größer als 2 TByte) sind mit exFAT zu formatieren.

Das steht so in der Spezifikation.

Insofern verhält sich Deine steinalte Kamera korrekt, es sei denn, die 
macht das auch mit SDHC-Karten.

Es gab mal nichtstandardkonforme SD-Karten, das waren SDSC-Karten mit 
mehr als 2 GByte Kapazität. Sowas funktionierte nur in bestimmten 
Fällen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Harald K. schrieb:
> SD(SC)-Karten (mit bis zu 2 GByte Größe) müssen mit FAT16 formatiert
> werden, SDHC-Karten (zwischen 4 und 32 GByte Größe) müssen mit FAT32
> formatiert werden
Auch wenn ich da 2 Partitionen mit 2G drauf mache?

> Das steht so in der Spezifikation.
> Insofern verhält sich Deine steinalte Kamera korrekt,
> es sei denn, die macht das auch mit SDHC-Karten.
Ja, das war mit "jede SD-Karte" gemeint. Die Kamera kann das mit den 
SDHC aufwärts gar nicht wissen, sie ist zu alt dafür.

Harald K. schrieb:
> SD(SC)-Karten (mit bis zu 2 GByte Größe) müssen mit FAT16 formatiert
> werden, SDHC-Karten (zwischen 4 und 32 GByte Größe) müssen mit FAT32
> formatiert werden
Nein, sie sollen damit formatiert werden, damit sie sich so verhalten, 
wie es den geschriebenen Worten entspricht. Sie verhindern aber nicht, 
dass ich es anders mache. Samsung formuliert das dann dementsprechend 
vorsichtig und benennt ein "standardmäßig verwendetes Dateisystem":
- 
https://www.samsung.com/de/support/memory-storage/was-bedeuten-die-angaben-sd-sdhc-sdxc-auf-meiner-sd-karte-bzw-microsd-karte/

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Auch wenn ich da 2 Partitionen mit 2G drauf mache?

Das erlaubt die Spec nicht. Es gehört genau 1 Partition mit einer ganz 
bestimmten Aufteilung drauf mit dem jeweiligen FAT-System.

Lothar M. schrieb:
> Sie verhindern aber nicht,
> dass ich es anders mache.

Sie könnten es, und wären dennoch spezifikationskonform.

von Harald K. (kirnbichler)


Lesenswert?

Lothar M. schrieb:
> Auch wenn ich da 2 Partitionen mit 2G drauf mache?

Dann verletzt Du die Spezifikation, die das nicht vorsieht.

Das heißt nicht, daß die Karte dann nicht funktioniert, sondern nur, daß 
Du Dich dann halt nicht an die Spezifikation hältst und Deine so 
formatierte Karte nicht in Geräten funktionieren wird, die sich wiederum 
an die Spezifikation halten.

Lothar M. schrieb:
> Ja, das war mit "jede SD-Karte" gemeint. Die Kamera kann das mit den
> SDHC aufwärts gar nicht wissen, sie ist zu alt dafür.

Sie sollte eigentlich SDHC-Karten gar nicht erst beschreiben (oder auch 
nur lesen) können, weil die ein geändertes Protokoll verwenden.

Lothar M. schrieb:
> Sie verhindern aber nicht, dass ich es anders mache.

Natürlich nicht. Nur kannst Du dann halt nicht erwarten, daß die Karte 
in einem Gerät funktioniert, das entsprechende Karten erwartet.

Eine mit extfs formatierte Karte wird in einer Digitalkamera nur 
Schulterzucken erzeugen, während der Raspberry Pi davon booten kann.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Das erlaubt die Spec nicht.
Wie gesagt: auch das interessiert die Karte nicht.

Ich habe viele Karten vieler Hersteller mit 2 Partitionen versehen (eine 
davon ist versteckt und enthält den Bootloader für den Rechner) und alle 
haben klaglos mitgespielt. Das meint die Windows Powershell mit 
get-partition dazu:
1
PartitionNumber  DriveLetter Offset                 Size Type
2
---------------  ----------- ------                 ---- ----
3
1                D           100663296           3.61 GB FAT32
4
2                           3971743744              1 MB Unknown

von Rolf M. (rmagnus)


Lesenswert?

Lothar M. schrieb:
> Peter D. schrieb:
>> Peter M. schrieb:
>>> in welchem Moment löscht ein USB-Stick einen Flash-Sektor, bzw. eine
>>> Flash-Zelle?
>> In dem Moment, wo eine Schreibanforderung erfolgt.
> Nein, die werden unabhängig davon beim Garbage Colletion gelöscht und
> fürs Schreiben vorbereitet. Wenn eine Datei überschrieben oder gelöscht
> wird, dann wird einfach der Block als "noch zu löschen" markiert und
> später aufgeräumt.

Das ginge aber nur mit TRIM, denn es gibt auf der USB-Seite nur lesen 
und schreiben, kein löschen. Woher soll der Stick also wissen, in 
welchen Sektoren die Daten als "gelöscht" gelten können und welche noch 
benötigt werden?

> Deshalb ist so ein Stick auch noch einige Zeit nsch Abschluss einer
> Dateioperation aktiv.

Das liegt eher am Betriebssystem-Cache, der noch vollends auf den Stick 
geschrieben werden muss.

Harald K. schrieb:
> Lothar M. schrieb:
>> Niklas G. schrieb:
>>> Bei SD-Karten gibt aber die Spec das FAT Dateisystem vor
>> So ganz eineindeutig ist das da aber nicht festgelegt und vor allem: die
>> Karte verhindert nicht, dass du ein anderes FS verwendest. Ich habe eine
>> steinalte Kamera, die formatiert jede SD-Karte ungefragt auf FAT16 um.
>
> O doch, das ist eindeutig festgelegt.

Es gibt ja auch von der SD Association einen speziellen Formatter, der 
die Karte genau nach Spec partitioniert und formatiert. Bei Geräten wie 
Kameras sollte deren Firmware das auch einhalten, wenn man die Karte 
dort formatiert.

Lothar M. schrieb:
> Niklas G. schrieb:
>> Das erlaubt die Spec nicht.
> Wie gesagt: auch das interessiert die Karte nicht.

Der Controller der Karte kann durchaus von der Annahme ausgehen, dass 
sie nach Spec formatiert und partitioniert ist. Kommt also drauf an. Bei 
FAT gibt es ja Sektoren, die bei jedem Schreibvorgang auch mit 
beschrieben werden müssen. Die Karte kann z.B. Vorkehrungen haben, damit 
genau diese Sektoren besonders ausdauernd sind, was dann nicht mehr 
funktioniert, wenn du die Karte anders partitionierst und die Sektoren 
dadurch an einer anderen Stelle zu liegen kommen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Wie gesagt: auch das interessiert die Karte nicht.

Unterscheide doch bitte mal was die Spec verlangt und was die Hersteller 
einer bestimmten Karte implementieren. Die Spec definiert im 
Wesentlichen ein Interface.

Das Interface verlangt vom Host, die Karten mit genau einem FAT der 
jeweiligen Sorte zu formatieren und zu verwenden, und von der Karte, das 
korrekt zu unterstützen. Die Karte kann als "Erweiterung" auch andere 
Partitionen/Dateisystem unterstützen, muss sie aber nicht.

Ein Gerät (z.B. Kamera) muss das FAT unterstützen, um standardkonforme 
Karten nutzen zu können. Die Kamera kann auch EXT2 unterstützen, 
braucht sie aber nicht. Ein Gerät welches FAT nicht unterstützt, ist 
nicht spec-konform, kann aber mit bestimmten Karten trotzdem 
funktionieren.

Ist wie bei der Programmiersprache C: Der Compiler/Library muss 
Standardfeatures wie z.B. "static" oder "printf" unterstützen. Er kann 
auch Erweiterungen wie "__asm__" oder "__flash" unterstützen, muss er 
aber nicht. Nur weil "__flash" mit einem Compiler funktioniert, muss es 
nicht mit allen Compilern funktionieren. Jeder Compiler muss alle 
Programme, welche ausschließlich Standard-Features nutzen, korrekt 
übersetzen. Ein Programm welches Nicht-Standard-Features benötigt kann 
mit bestimmten Compilern funktionieren, aber nicht notwendigerweise mit 
allen.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Harald K. schrieb:
> SD(SC)-Karten (mit bis zu 2 GByte Größe) müssen mit FAT16 formatiert
> werden, SDHC-Karten (zwischen 4 und 32 GByte Größe) müssen mit FAT32
> formatiert werden und SDXC-Karten (zwischen 64 GByte und 2 TByte Größe)
> sowie SDUC-Karten (größer als 2 TByte) sind mit exFAT zu formatieren.

Und was hat das nun mit USB-Sticks zu tun?
Bleibt dochmal beim Thema und macht für eine anderes Thema auch einen 
neuen Thread auf. Sonst reden hier alle nur durcheinander.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.