Kann ein Null-Füll-Reset den Verschleiß von USB-Sticks / Flash-Laufwerken ausgleichen?

4

So wie ich es verstehe, wird Wear-Leveling auf USB-Sticks / Flash-Laufwerken :

  • helfen, die letzten länger zu machen. (Reduzieren Sie die "Abnutzung", dass eine physikalische Flash-Zelle nur bis zum XX-fachen beschrieben werden kann)
  • kann nur wirklich funktionieren, wenn nicht verwendete Flash-Speicherzellen zum Umschalten vorhanden sind. (Je mehr der USB-Stick gefüllt ist, desto weniger alternative Zellen zum Ausgleichen des Verschleißes gibt es)

Im schlimmsten Fall habe ich zu einem bestimmten Zeitpunkt den gesamten Speicher des USB-Sticks verbraucht. Dann ist es weniger wahrscheinlich, dass ein gewisser Verschleiß noch auftreten kann. Kann / (wie würde) ich diesen Zustand wiederherstellen?

Ich meine in Bezug auf USB-Sticks, was leer ist

0000 0000 0000 0000(Null fill) scheint mir genauso gültig ein Daten als zu sein
1111 1111 1111 1111oder 1010 1110 0011 1111oder einem anderen Bit-Muster.

Die Firmware des USB-Sticks muss irgendwie wissen, was als "unbenutzte" Flash-Zelle gilt, damit er sie wieder zum Abnutzungsausgleich verwenden kann. Aber nachdem ich irgendwann einmal den gesamten USB-Stick gefüllt habe, habe ich Probleme zu sehen, wie die Firmware feststellen kann, welche Daten "überschrieben" werden können, da sie keine Daten enthalten.

Meine Frage lautet also: Kann das Auffüllen mit Nullen eine Möglichkeit sein, den Abnutzungsgrad eines USB-Sticks zurückzusetzen

Obwohl ich befürchte, dass dies oft von der Implementierung abhängt ("Firmware" und "Hersteller"), denke ich immer noch, dass es eine Logik für diesen Ansatz geben könnte, anzunehmen, dass "Zero-Filling" das Zurücksetzen des USB-Sticks auf bestimmte - Besser gestaltete USB-Sticks .

Die Logik, die ich mir vorstelle, wäre, dass die Abnutzungskorrektur der Firmware erkennt, dass ein ganzer Block (dh 512 Byte oder 2 KB) nur auf Null gesetzt wird.

Vorher 1101 1011 1000 0010 ... 0001 0011
blockieren : Nachher blockieren:0000 0000 0000 0000 ... 0000 0000

Wenn ich aus diesem Block lese, möchte ich natürlich diese Informationen erhalten:
Block danach: 0000 0000 0000 0000 ... 0000 0000 Diese Informationen können jedoch im laufenden Betrieb generiert werden, indem der Block XYZ = leer in einer bestimmten Flash-Zelle gespeichert wird, die nur der Firmware zur Verfügung steht.

Wenn dies der Fall wäre, würde der Pool beim "Zurücksetzen" (durch Null-Füllen) für andere Zwecke aktiviert, da die Informationen im BLOCK XYZ = leeren Firmware-Speicherbereich des Sticks gespeichert sind.

Ich habe gelesen, dass es einige USB-Sticks geben sollte, die eine solche Firmware haben und daher zurückgesetzt werden können? Kann das wahr sein? Ich möchte durch die Frage eine "Tendenz" kennenlernen, die vielleicht mit Informationen von namhaften Herstellern untermauert ist. Möglicherweise gibt es sogar eine Liste mit USB-Sticks, die auf diese Weise zurückgesetzt werden können. Damit könnte die Antwort einen Link zu einer solchen Liste enthalten.

Ich gehe auch davon aus, dass es nicht "eine neue Firmware" gibt, die von jedem USB-Stick hergestellt wird, und möglicherweise gibt es eine bekannte (häufig verwendete) USB-Firmware, die einen solchen Abnutzungsgrad ausgleicht. Dann könnte die Frage bezüglich dieser Firmware beantwortet werden.

Bestenfalls könnte eine kluge Person einen Weg finden, um die Frage in dieser Form zu beantworten. Sie enthält einige Anweisungen, die es uns Benutzern (von Super-Usern) ermöglichten, "herauszufinden", ob dieser Verschleißausgleich aktiviert ist oder nicht.

Hintergrundinformationen zu meiner Frage

USB-Sticks / Flash-Laufwerke sind sicher eine nette Sache. Das Problem ist aber, dass die Art und Weise, wie sie die Daten speichern, abnutzt, was bedeutet, dass erst nach XX Schreibvorgängen in eine Datenzelle! BINGO! dein stick ist tot!

Eine Möglichkeit, das Problem zu lösen ( Flash-Speicherzellen können nur sehr selten beschrieben werden), ist das "Wear Leveling". Wobei es wichtig ist, dass - falls möglich - die Daten nicht immer auf dieselben Flash-Speicherzellen geschrieben werden .

Anstatt die Daten immer in dieselben physischen Zellen zu schreiben, werden die Daten (wenn sie geändert werden) in einige andere neue physische Zellen geschrieben. Dies reduziert den "Stress", da dies im besten Fall so weitergeht.

Zum besseren Verständnis einiger grundlegender Aspekte des Abnutzungsniveaus habe ich dieses Konzept unten aufgenommen. Es zeigt, wie die Informationen von "Hallo", "Gruß", "Hallo" und "Hallo" anschließend in einer logischen Datenzelle mit dem Namen " Daten " gespeichert werden , die tatsächlich geschrieben wird jedes Mal auf einen anderen physischen Flash-Speicher (daher ein kleines "Konzept" des Wear Leveling).

Zustand 1:
[CELL1: leer] [CELL2: leer] [CELL3: leer]


=> schreibe Daten "Hallo"


Zustand 2:
[CELL1: Hallo] [CELL2: leer] [CELL3: leer]
 data = CELL1

=> Daten auf "salut" aktualisieren


Zustand 3:
[CELL1: Hallo] [CELL2: Gruß] [CELL3: leer]
 data = CELL2

=> Daten auf "hola" aktualisieren

Zustand 4:
[CELL1: hallo] [CELL2: salut] [CELL3: hola]
 data = CELL3

=> aktualisiere Daten auf "hi"

state5
[CELL1: hi] [CELL2: salut] [CELL3: hola]
 data = CELL1 


Beobachten Sie, wie nach dem Schreiben von 4-fachen Daten jede Zelle im Durchschnitt nur 1,33-mal geschrieben wurde. Beachten Sie auch, dass die Information, welche Zelle die "logischen Daten " enthält , ebenfalls gespeichert und aktualisiert werden soll (was erfordert, dass die Firmware diese Abrechnung vornimmt - unter Verwendung von etwas reserviertem Speicher auch dafür).

Mensch und Frieden
quelle

Antworten:

3

Einige Flash-Laufwerke können prüfen, ob die geschriebenen Daten Nullen sind, und diese Region einfach entfernen, anstatt den Flash-Speicher zu programmieren. Obwohl ich nicht weiß, wie häufig es ist.

Momentan arbeite ich am MMC-Controller (kann dir nicht sagen, wem, das ist ein Geheimnis :-)) und dessen Firmware überprüft den Dateninhalt, nicht beim Schreiben, sondern später beim Löschen und GC. Es werden alle gefundenen Nullregionen aufgehoben.

Wie geht das?

"herausfinden", ob dieser Verschleißausgleich aktiviert ist oder nicht.

Sie können versuchen, die Lesegeschwindigkeit des zuvor geschriebenen, mit Nullen gefüllten Datenblocks und des zufällig gefüllten Datenblocks zu vergleichen (besser, wenn Sie das Laufwerk nach dem Schreiben ausschalten, um die Verwendung des Cache zu vermeiden). Wenn Ihr Flash-Laufwerk den Inhalt eingehender Daten überprüft und nur die Zuordnung des geschriebenen Bereichs aufhebt, sollte das Lesen dieses Bereichs viel schneller erfolgen, da der Controller das tatsächliche Lesen von Flash überspringen kann (was eine lange Operation ist).

Anon
quelle
Da ein 2k-Block (der eine gemeinsame Größeneinheit für einen Block zu sein scheint) aus Daten bestehen kann, können alle Nullen auf eine Weise reduziert werden, die TRIM neu abtastet, und die Informationen (auch wenn alle Nullen Informationen sind) können in a gespeichert werden 1Byte Information sonst im Speicher. Diese "Null" -Blöcke könnten zum Abnutzungsradfahren verwendet werden. Natürlich kann der Block nicht zum Schreiben von Daten verwendet werden, da dies den Speicher praktisch vergrößern und fehlschlagen würde, sobald die Blöcke wieder mit Daten gefüllt sind. Aber die Logik, ein bestimmtes Muster zu handeln ("alles Null ist nur ein Muster in 2k"), könnte verwendet werden, um den Verschleißschutz zu erhöhen.
humanityANDpeace
1

Aber nachdem ich irgendwann einmal den gesamten USB-Stick gefüllt habe, habe ich Probleme zu sehen, wie die Firmware feststellen kann, welche Daten "überschrieben" werden können, da sie keine Daten enthalten.

TRIM soll dieses Problem lösen, indem ein Mechanismus bereitgestellt wird, mit dem das Betriebssystem dem Laufwerk mitteilen kann, dass es nicht erwartet, dass ein Sektor Daten enthält. TRIM ist eine SAS / SATA-Spezifikation und keine USB-Spezifikation, daher funktioniert dies leider nicht für USB-Flash-Laufwerke.

Ohne TRIM ist es für das Laufwerk nicht sicher, anzunehmen, dass keine Daten benötigt werden.

Kann das Auffüllen mit Nullen ein Weg sein, um den Abnutzungsgrad eines USB-Sticks zurückzusetzen?

Klar, ob die Firmware so funktioniert. Ohne den Quellcode der Firmware oder die Entwicklerdokumentation ist dies nicht sicher zu wissen. Flash-Chips funktionieren in Seiten und Blöcken. Der Chip kann nur ganze Blöcke auf einmal löschen (z. B. 128 KB), die aus vielen Seiten bestehen (z. B. 2 KB), die normalerweise größer sind als herkömmliche Festplattensektoren, die USB-Laufwerke emulieren (512 Byte).

Möglicherweise gibt es sogar eine Liste mit USB-Sticks, die auf diese Weise zurückgesetzt werden können. Damit könnte die Antwort einen Link zu einer solchen Liste enthalten.

Angesichts der Tatsache, dass USB-Sticks heutzutage spottbillig sind, ist es sehr wahrscheinlich, dass es sich nicht wirklich lohnt, dem Hersteller diese Informationen zur Verfügung zu stellen.

Ich gehe auch davon aus, dass es nicht "eine neue Firmware" gibt, die von jedem USB-Stick hergestellt wird, und möglicherweise gibt es eine bekannte (häufig verwendete) USB-Firmware, die einen solchen Abnutzungsgrad ausgleicht. Dann könnte die Frage bezüglich dieser Firmware beantwortet werden.

Jedes USB-Flash-Laufwerk verfügt über einen Mikrocontroller (Mikrocontroller = CPU + ROM oder Firmware). Sie können das Flash-Laufwerk öffnen und anhand der Zahlen auf dem Chip suchen, um den Typ zu ermitteln. Verglichen mit der Gesamtzahl der produzierten Flash-Laufwerke gibt es wahrscheinlich nur eine begrenzte Anzahl, aber es würde mich nicht überraschen, dass es sehr viele Variationen einiger Kerntypen geben würde. Sicher gibt es keine einzige Standardfirmware oder ähnliches.

Es gibt Chip-Dienstprogramme, mit denen Sie den Mikrocontroller auf einigen von ihnen neu programmieren können, um virtuelle CD-ROMs und dergleichen auf bestimmten Arten von Flash-Laufwerken zu erstellen. Dies ist eine wild undokumentierte Gegend, zu der es schwer ist, Informationen zu finden. Ich hatte nicht viel Glück.

Das Problem ist aber, dass die Art und Weise, wie sie die Daten speichern, abnutzt, was bedeutet, dass erst nach XX Schreibvorgängen in eine Datenzelle! BINGO! dein stick ist tot!

Nein, nur diese Zelle. SSDs (und SD-Karten und Flash-Laufwerke) sind überprovisioniert, was bedeutet, dass sie mehr Flash enthalten als auf dem Paket angegeben. Dieser zusätzliche Blitz wird als "Reservebereich" verwendet, um abgenutzte Blöcke abzudecken. Es deckt auch Herstellermängel ab - kein Flash hat zu 100% garantierte Arbeitsblöcke mit Ausnahme des ersten Blocks.

LawrenceC
quelle
In Ihrem letzten Absatz sagen Sie "Nein, nur diese Zelle." ... bevor Sie angeben, dass die meisten Flash- / USB-Speichersticks auf 2k-Blöcken funktionieren. Was meinst du mit Zelle? Verlust von 1 Byte (= 1 Zelle) oder Verlust von 2 kByte (= 1 Zelle = 1 2 kBlock)? Außerdem glaube ich, dass Sie sagen, dass viele Wahrheitssticks für ihre Qualität nicht wirklich vom Benutzer unterscheidbar sind und daher intelligentere Lösungen wie eine Art TRIM oder eine Null-Feld-Rückstellungstechnik (wie in einer anderen Antwort angegeben) keinen Anreiz darstellen ...
humanityANDpeace
Nun, nur ein Byte auf der Seite ist möglicherweise fehlerhaft (dh es wird nicht auf 1 zurückgeschaltet, wenn es gelöscht wird), aber da Algorithmen wahrscheinlich auf der Seiten- oder Blockebene arbeiten, führt dies zum tatsächlichen Verlust der Seite oder des Blocks.
LawrenceC
0

USB-Speicher sind weder mechanisch (wie die frühen Kügelchen auf einem Gitter) noch magnetisch (wie auf einem Band) oder optisch (wie CDs), sondern elektrisch. Betrachten Sie jeden Ort als eine kleine Batteriezelle, die sich mit der Zeit (über einen längeren Zeitraum) entlädt. Jegliches Schreiben führt zu einer Verschlechterung. Null-Füllung macht die Sache nur noch schlimmer. Der Chip selbst verfügt entweder über einen Controller, der Wear Leveling verwendet, oder nicht - ein Benutzer kann dies nicht ändern. Vereinfacht ausgedrückt sorgt der Wear Leveling lediglich dafür, dass verschiedene Teile des USB einen angemessenen Anteil an der Speicheranforderungslast haben.

pnuts
quelle
Dankeschön. Ich kann nicht verstehen, warum Sie mir erklären, dass es nicht mechanisch / magnetisch ist? (Meine Frage war sicherlich nicht so dumm, dass ich das nicht schon wissen würde). Es geht eigentlich um die Besonderheiten des "Wear Leveling" und darum, wie ein Zero-Fill (unter der Annahme einer bestimmten Firmware) das Gerät tatsächlich zurücksetzen kann. Ich kann einfach nicht akzeptieren, dass sich ein dummer "Abnutzungsgrad", der erst einmal auf alle Blöcke geschrieben wurde, nie mehr erholen würde. Daher denke ich, dass es für "gute USB-Sticks" so etwas wie einen "TRIM" oder einen Reset (per Zero-Fill) geben muss
humanityANDpeace
Vielen Dank für die Erklärung des Teils (diese Fragen sind für ein breiteres Publikum gedacht) und es tut mir leid, dass ich es falsch verstanden habe. In der Tat gefällt mir sehr, dass zumindest versucht wurde, die Frage zu beantworten. Steht dieses Problem mit dem häufigen Einschalten von USB im Zusammenhang mit dem Problem mit der Verlängerung der Lebensdauer von Flash-Zellen, oder wie haben Sie es gemeint? danke
humanityANDpeace