langlebige und schnelle USB Sticks (NAND SLC mit wear leveling)

Hallo NG, Momentane Situation: Eine MSSQL Datenbank läuft auf einem USB-Stick (4polig, male). In die Datenbank werden sekündlich etwa 120 Byte geschrieben, Lesezugriffe eher selten und azyklisch. OS ist Windows XP embedded, Dateisystem ist NTFS, "write cache" ist aktiviert über "Explorer, Properties, Optimize for Performance" (siehe dazu unten auch den Link zu Windows write cache und "Plazebo Einstellungen")

formatting link

Momentan verwendeter Stick ist idVendor 0x058f Alcor Micro Corp. idProduct 0x6387 Transcend JetFlash Flash Drive bcdDevice 1.42 iManufacturer 1 JetFlash iProduct 2 Mass Storage Device iSerial 3 Y2TG7FHS

Datenblatt zu dem Stick:

formatting link
Dort steht "Erase Cycles >10,000 times" was auf MLC NAND schließen lässt, über wear leveling o.Ä. schweigen sie sich aus.

Problem: nach ca. 1 Woche Dauerbetrieb steigt der Speicher mit defekten Sektoren aus. Wurde mittlerweile mit 3 Sticks getestet. Der Stick wird sehr warm im Betrieb, es könnte durchaus auch ein Temperaturproblem sein, welches den Stick so schnell altern lässt. (Momentan meine Vermutung)

Nun bin ich auf der Suche nach schnellen, und für die obige Anwendung lange Haltbarkeit geeignete USB Sticks mit ca. 4GB.

Da stellen sich dann folgende Fragen:

  • Kann man Windows XP embedded dazu bringen den write cache zu vergrößern, bzw. was sind sinnvolle Einstellungen? Laut Link oben reicht es, NTFS zu verwenden.

  • Swap (Auslagerungsdatei oder wie es bei MS heisst) war ursprünglich auch auf dem Stick und wurde nun deaktiviert. Ich könnte mir vorstellen, dass dadurch viele Schreibzugriffe entstanden sind.

  • Welches Dateisystem ist dafür geeignet? Unter Linux gibt es ja z.B. JFFS2, ich bin aber hier unter Windows XP embedded. Da stehen mir NTFS,FAT und exFAT zur Verfügung. exFAT
    formatting link
    Macht ein spezielles Dateisystem wie exFAT überhaupt noch Sinn, wenn wear leveling verwendet wird? Meiner Meinung nach nicht. Angaben ob dynamisches oder statisches oder überhaupt wear leveling verwendet wird gibt es selten.

  • NAND oder NOR Flash? Heutzutage sind fast alle USB Sticks mit NAND Flash bestückt, also erübrigt sich die Frage quasi.

  • SLC (single level cell) oder MLC (multi level cell)? Die Haltbarkeit von MLC wird mit >10.000 cyclen angegeben, bei SLC >100.000, also bevorzuge ich SLC auch wegen dem höheren Datendurchsatz

(Auf

formatting link
wurden einige SLC und MLC Typen getestet.)

  • Für den verwendeten Stick gibt es ein "online recovery tool":
    formatting link
    Welches die Sticks wieder kurzzeitig "heilen" kann. Was mich schon sehr wundert, denn entweder sind die Zellen kaputt oder nicht. Und warum braucht das Programm eine Onlineverbindung zu einem Server? Also sehr dubios und mir unklar, was dieses Tool macht. (Eher auch unwichtig, da ich im Produktionsbetrieb sicher nicht das RecoveryTool als "Lösung" ansehe)

Eine Thesis zu dem Thema und ein Tool um Speicher zu testen:

formatting link

Einige Typen, die ich in Betracht ziehe:

formatting link
Built-in Wear Leveling Endurance Guarantee of 2,000,000 Write/Erase Cycles Built-in ECC Engine: 5-bytes detection, 4-bytes correction Hört sich alles sehr toll an, leider noch kein Händler gefunden

Reichelt: OCZUSBR2TDC-4GB (leider kein Datenblatt, auch nach Rückfrage per EMail) OCZ setzt wohl Samsung und Micron Speicher ein, je nachdem was günstiger auf dem Markt ist.

formatting link
Leider nur 10poliger USB Anschluss, ansonsten von den Daten sehr interessant.

von Transcend gibt es auch Industrial Versionen mit ausführlicherem Datenblatt:

formatting link
Sieht dort nach DualChannel SLC aus, leider auch 10poliger USB Stecker. (gibts für die umgekehrte Richtung Adapter oder müsste ich da selbst was bauen? 10polig male auf 2x4polig female gibts ja überall als Slotblende)

Interessante Links:

formatting link
formatting link

Eine Festplatte scheidet wegen Erschütterungen aus, eine SSD mit SATA oder IDE ist zu groß und die Schnittstellen dafür nicht vorhanden. Einziger anderer Ausweg wäre NAS mit SSD und ans Ethernet hängen. Kostengünstig soll das halt auch noch sein.

Also, liebe NG Gemeinde: Hat jemand einen Vorschlag? Ich kann mir nicht erklären dass der letzte Speicher so schnell den Geist aufgegeben hat wenn heutzutage wear leveling schon Standard ist und das Betriebssystem einen write cache hat. Gruß von Andy und TIA

Reply to
Andreas Weber
Loading thread data ...

"Andreas Weber" schrieb ...

Ich finde es mutig.

Das finde ich noch mutiger...

Warum nimmst Du nicht eine kleine SSD? Oder eine kleine Notebook-HD. Beides ist doch eher für diesen Zweck gebaut worden als ein USB-Stick.

Gruss Artur

Reply to
Artur Kawa

[...]

die Größe des Cache ist nicht das Problem. Die Frage ist, wie lange die Inhalte darin verweilen, bis sie geschrieben werden. Wenn nichts los ist schafft das Dateisystem die normalerweise schnellstmöglich weg.

Und 100-Byte Schreibzugriffe je Sekunde sind für Flash-RAMs natürlich nicht so toll. Da werden immer 256kB oder so geschrieben. Das wären rund

150GB/Woche. Aber normalerweise sollte das Wear-Leveling das länger abkönnen. Aber wer weiß, wenn auch noch Index-Updates und Transaktionslog-Einträge dazukommen, sind es vielleicht ein paar mehr Schreiboperationen pro Sekunde.

Einer pro Sekunde? Eher nicht.

Eher deshalb nicht weil kein Dateisystem standardmäßig verhindern wird, dass eine Datenbank in ihr DB-File schreibt. Die meisten Datenbanken machen sowieso ihr eigenes Caching. Da sind selbst die Cache-Einstellungen des Dateisystems Banane. => an den Datenbankeinstellungen drehen.

Nein, die Frage erübrigt sich nicht. Für den Einsatzzweck wäre NOR-Flash genau das richtige. Und bei 4GB ginge der Preis auch noch. Als USB-Stick dürfte es aber schwer zu bekommen sein.

Dürfte über kurz oder lang ebenfalls schwer als USB-Teil zu bekommen sein.

Ich würde mich mal bei Flash-RAMs für Industrieanwendungen umsehen.

Wieso? Es ist ein Block kaputt, nicht der Stick. Aufgrund des Wear-Levelings haben die Dinger sowieso einige Reserveblöcke.

Hersteller Fragen.

Consumerware. Das hatten wir schon.

formatting link

Jetzt stimmt die Richtung.

Das Problem sollte sich ja lösen lassen.

Wie gesagt, Write-Cache vom OS bringt bei der DB nichts.

Marcel

Reply to
Marcel Müller

ja MLC

Ich habe einen von disk2go und der Typ heisst PURE II

das ist ein SLC nand drin, schnell ist es durchaus und wear levelling haben absolut alle, nur fragt sich wie gut und wie genau wird es gemacht. (Dynamic oder auch static wear levelling etc)

ja , ich habe linux in so einem Betrieb, den swap mussten wir dort auch abstellen.

ja das wäre schon das richtige, da eben transparent auch auf dem Flash, aber eben du bist auf win.

eben, die Angaben muss man aus den Herstellern mühsam aussaugen

ja, NOR passt da nicht mehr rein.

richtig

wie gesagt versuche es mit disk2go PURE II, sind etwas teurer aber durchaus gut. Aber für die Anwendung was du beschreibtst, würde ich auch was besseres nehmen, also ein besseres diskonmodule oder solid state drive. Da ist die wear levelling strategie ganz anders ausgelegt, die controller haben mehr power und alles ist mehr stabil.

Reply to
Otto Sykora

Hab ich unten doch geschrieben. Hast du überhaupt mein Posting gelesen? Oder nur die ersten 5 Zeilen?

Reply to
Andreas Weber

Macht Linux aber z.B. nicht, dieses sammelt durchaus einige Zeit die Daten und diese werden dann beim "auswerfen" geschrieben.

Klar, aber es gibt wohl Flash-Controller (wie von Transcend Industrial) die einiges an SDRAM haben und dies auch zwischenspeichern, bis der Cluster voll ist

Die Datenbank sieht ja das darunter liegende Dateisystem nicht. Wenn der Dateisystemtreiber die Änderungen nur im Speicher ausführt und nicht gleich auf das Speichermedium schreibt, bleibt dies der Applikationsschicht verborgen.

Klar, dafür geeignet sicher, aber nicht zu bekommen als USB Stick...

Also SLC findet man durchaus bei den höherpreisigen USB Flash Speicher.

Ne, HDTune zeigt ca. 90% der Blöcke als defekt an, wenn der Stick ausfällt. Nach einem Formatieren hat er noch eine nutzbare Kapazität von paar MB. Und Hersteller schweigt sich über Onlineverbindung aus. Wenn es mit wear leveling zu tun hat, sollte das ja zur Laufzeit funktionieren. Ich habe eher das Gefühl die haben nen Bug in ihrem dynamischen wear leveling und die Software macht nen Firmwareupdate oder setzt irgendwelche Bits zurück...

Klar Consumerware, aber schau dir mal Tests bei heise an, die schreiben

2Jahre lang von /dev/random auf den Stick und noch keine Zellen defekt. So schlecht muss Consumerware nicht sein...

Das Problem ist nicht so einfach zu lösen da extrem wenig Platz in IP67 Gehäuse zur verfügung steht und jede Steckverbindung ist Fehlerquelle bei den Erschütterungen.

Ganz sicher?

Gruß von Andy

Reply to
Andreas Weber

Andreas Weber schrieb:

Moin Andreas!

Da Du Deinen Einsatz nicht genauer beschreibts kann es sein, daß einige der von mir angedachten Möglichkeiten nicht passen.

Aus Erfahrung (Linux-Live-System vom Read-Only USB-Stick, mit RAM-Disk für aktuelle Daten) würde ich versuchen die Schreibzugriffe zu begrenzen. Kannst Du nicht eine RAM-Disk einrichten, die nur beim Runterfahren den Datenbank-Dump auf den Stick kopiert?

Ich weiß nicht, wie es mit dem maximal adressierbaren Speicher bei einem WinXP embedded aussieht, also was maximal für eine RAM-Disk zur Verfügung steht. Weiter könnte es Problematisch sein, wenn es nicht bei jedem Ausschalten genug Zeit vorher gibt, die Daten zu kopieren.

Wenn die RAM-Disk nicht geht, dann könntest Du evtl die Datenbank umgehen und Deine wenigen Bytes als eine Art Datenstrom wegspeichern (Prinzip Data-Logger). Die Auswertung und die DB-Einträge würde dann auf einem Richtigen System und zu einem späteren Zeitpunkt erfolgen. Die Daten, die man wegspeichert sollten in auf den Flash-Speicher angepassten Häppchen aufgeteilt werden.

Die Erfahrung mit als Read-Only gemounteten Sticks, die etwa einmal täglich beim Booten lesend genutzt werden (das System kopiert sich auch in die RAM-Disk) zeigt keine größere Ausfall-Wahrscheinlichkeit, obwohl die Umgebungsbedingungen eher unfreundlich sind (für Dich interessant: eher Warm).

Ciao Dschen

--
Dschen Reinecke

=== der mit dem Namen aus China ===

http://WWW.DSCHEN.DE mailto:usenet@dschen.de
Reply to
Dschen Reinecke

Weil die dasselbe Problem entwickeln duerfte (Ok, haelt vielleicht etwas laenger). Er schreibt pro Sekunde 120 Bytes. Nehmen wir mal an, die sind in einem Block. Also muss der Controller pro Schreibvorgang einen Flash-Block (einige KB bis knapp 1 MB) loeschen und neu schreiben. Das ergibt pro Tag also mindestens (!) 86400 Loeschzyklen, pro Woche 604800. Wenn das Filesystem-Daten jedesmal angepasst werden noch mehr. Wenn da das Wearleveling nicht gut ist sind die 10000 Zyklen schnell weg...

Flash basierte SSDs sind eine nette Idee aber fuer gewisse Zugriffsmuster nicht wirklich tauglich.

Gerrit

Reply to
Gerrit Heitsch

Wird bei einem USB-Stick eher nicht ausgenutzt, der muss DAU-tauglich sein, also Abziehen ohne Warnung abkoennen.

Sieht nach gleichmaessig abgenutzt aus. Da macht der Controller wohl doch brauchbares Wearleveling nur ist auch damit irgendwann Ende.

Gerrit

Reply to
Gerrit Heitsch

Andreas Weber schrieb:

Ich denke, Ihr verwendet die falschen Werkzeuge. Den Betriebssystem-Cache könnt Ihr nicht so weit kontrollieren, wie Ihr wollt, und den SQL-Server schon gar nicht.

Mein Vorschlag: SQL-Server rauswerfen, eigene Applikation zum Loggen schreiben, Datei mit CreateFile() und den Flags FILE_FLAG_NO_BUFFERING und FILE_FLAG_WRITE_THROUGH öffnen und die Daten selber so lange buffern, bis ein Cluster voll ist. Immer nur volle Cluster schreiben und die Anmerkungen im MSDN zu FILE_FLAG_NO_BUFFERING lesen.

Dann noch den Artikel zu misaligned Partitions lesen:

formatting link

Wenn Ihr alles so gemacht habt, dann sollten Eure USB-Sticks länger durchhalten.

--
Mit freundlichen Grüßen

Frank-Christian Krügel
Reply to
Frank-Christian Krügel

Damit kann man sich jeden Flash-Speicher sehr schnell ruinieren. Abschalten war also eine gute Idee.

Da der USB-Stick intern sein 'wear leveling' macht, ist das eingesetzte Dateisystem egal. Manche meinen noch, man solle auf ein Journaling Dateisystem verzichten, weil es neben den benötigten Daten immer auch noch die Verwaltungsdaten schreibt.

NAND hat einfach eine sagenhafte Datendichte und damit einen tolles Preis/Leistungsverhältnis. NOR wird nur noch eingesetzt, wenn es gar nicht anders geht.

Ja. SLC: ein Bit pro Zelle. MLC: bis zu drei Bits pro Zelle. Wenn man nur ein dummdödeliges ECC für MLC verwendet, fliegt einem der Mist ruckzuck unreparierbar um die Ohren. Ich habe hier Controller die 3 ECC-Bytes pro

512 Datenbytes für SLC verwenden und 26 ECC-Bytes pro 512 Datenbytes für MLC. Kleiner Unterschied... Wie das wohl die Billig-USB-Sticks handhaben?

Ich habe vor kurzem da selber nachrecherchiert. Während um etwa 2004 rum diese Zahlen/Unterschiede noch verlautbart wurden, kann ich sie in aktuellen Datenblättern nicht mehr wiederfinden. Auch die MLC werden inzwischen mit 100.000 Zyklen angegeben.

Unter Linux muss man auch bewusst das Nachführen der Zugriffzeit abstellen, sonst wird sogar ein ansonsten ro eingehängtes Flash-Dateisystem ständig beschrieben und fällt einem irgendwann trotzdem aus ("Ich habe doch gar nix reingeschrieben!").

Gemein ist, das 'wear leveling' lange Zeit gut funktioniert. Dann fallen erste Blöcke aus (bei großen Flashes sind das dann gleich 128 oder 256 kiB pro Block der schlagartig fehlt) und dem 'wear leveling' stehen zur Lastverteilung weniger Blöcke als vorher zur Verfügung. D.h. die dann noch verbliebenen Blöcke werden noch häufiger belastet und fallen dann noch schneller aus. Lawineneffekt.

jbe

Reply to
Juergen Beisert

Was wäre bei NOR besser?

jbe

Reply to
Juergen Beisert

Eh, was? Das waere aber ein schwerer Bug im Code. Ein 'ro' gemountetes Filesystem darf niemals beschrieben werden, nein auch nicht die Zugriffszeiten.

Ansonsten mountet man eben mit 'noatime' und nimmt ext2 als FS (kein Journal), das muesste auch eine SSD halbwegs lange halten...

Nein, die Anzahl der Bloecke bleibt gleich, es kommt nur ein Reserveblock dazu. Alle mir bekannten FS reagieren beleidigt wenn die Anzahl der verfuegbaren Bloecke mit der Zeit abnimmt.

Ein mit X Bloecken formatiertes FS wird schon mit X-1 Bloecken frueher oder spaeter Aerger machen.

Gerrit

Reply to
Gerrit Heitsch

Linux sammelt solange, bis jemand 'sync()' sagt, und passiert normalerweise alle ca. 30 Sekunden.

Eine Datenbank, die ihr Geld wert ist, wird aber nicht so ignorant mit dem Dateisystem umgehen, sondern es an gewissen Stellen explizit anweisen, seine Puffer rauszuschreiben, damit sie wiederum der Anwendung zusichern kann, dass die geschriebenen Daten auch wirklich geschrieben sind.

Tja, warum nun eigentlich USB?

Stefan

Reply to
Stefan Reuther

ie lange die=20

ist=20

Ich kann mir aber vorstellen, dass die Datenbank vom Betriebssystem wenigstens f=C3=BCr das Logfile ein "flush den Cache jetzt!" anfordert. Und dann werden sowohl Windows wie Linux tats=C3=A4chlich pro Transaktion schreiben.

Gru=C3=9F, Michael Karcher

Reply to
Michael Karcher

Hi Stefan, habe ich oben geschrieben, es gibt nur 2 mögliche Schnittstellen, nämlich USB und Ethernet. Wie oben geschrieben wäre NAS mit herkömmlicher Festplatte oder SSD der letzte Ausweg. Gruß von Andy

Reply to
Andreas Weber

Hi Frank, ich geb dir völlig Recht, dass man sich die Sache so besser kontrollieren lässt. Ist aber nicht umsetzbar, da alle Awendungen momentan die SQL Datenbank verwenden.

Der ist gut, danke für den Link. btw: ich habe bei ocz nach Datenblätter gefragt. Ist nur ein:"Nö, es gibt keine Datenblätter zu dem Stick" zurückgekommen. Gruß von Andy

Reply to
Andreas Weber

Ja, Linux ist aber auch kein XP Embedded, oder?

Das ist immer eine gefährliche Sache. Wenn der Strom weg ist gehen die Daten mit ihm. Kurzum, kein Consumerdevice wird sich das ohne relativ kurzes Zeitlimit erlauben, denn sonst gäbe ed genug Dussel, die den Stick einfach nach einer Weile rausrupfen und im Netz über Datenverluste bei der betreffenden Marke herumpöbeln.

Jo, aber jedes Dateisystem kennt auch eine Write-Through-Option beim Öffnen einer Datei. Und es dürfte keine ernstzunehmende DB geben, die dieses Flag nicht setzt.

Ja, schwierig geworden. Alte CF-Karten waren mal NOR-Flash. Aber deren Maßeinheit war nicht GB. NOR-Flash hat übrigens auch signifikant kleinere Blöcke und ist schon deshalb weniger empfindlich bei kleinen Schreibzugriffen. Dafür hatten die alten Biester auch kein Wear-Leveling.

Ich schrieb ja "über kurz oder lang".

Nimm mal ein echtes Formatierprogramm. Windows stellt sich da beliebig dumm an, oder funktioniert der Trick mit der /U-Option noch?

Schwer zu sagen. Vielleicht sind auch einfach die internen Verwaltungsstrukturen im Eimer. Den Punkt mit der Temperatur würde ich auf jeden Fall angehen. Vom der Natur der Sache her ist durchaus mit einer Halbierung der Lebensdauer bei 10°C mehr zu rechnen.

Klar. Man weiß es nur nie.

Aber ich sagte ja, dass die Schreibrate von 1 Flash-Block pro Sekunde vmtl. nicht hinreichend für den Tod ist.

Sollte man in den Griff bekommen, wenn das Device und die Stecker beidseitig irgendwo mit Silikon o.ä. fixiert sind. Auf den Stecker am anderen Ende hat man keinen Einfluss? Ich meine ein USB-Stecker im Geräteinneren ist doch eher ungewöhnlich.

Jo. Wie hoch muss den die Ausfallsicherheit sein? Sonst lege doch mal das Transaktionslog der DB in eine RAM-Disk.

Marcel

Reply to
Marcel Müller

Sehr ... mutig.

Oh, oh.

Nein, Du killst den Chip. Flashspeicher muss bei Schreibzugriffen einen komplette erase block loeschen und neu schreiben, auch wenn nur ein einziges Byte geschrieben wird. Die Groesse der erase blocks liegt IIRC bei 64 KByte aufwaerts. Mit dem kontiniuerlichen Strom kleiner Schreibzugriffe triggerst Du _massive_ block rewrites und erreichst damit relativ schnell das Ende der Lebensdauer des Flashspeichers, da dieser nur eine begrenzte (wenn auch mittlerweile sehr hohe) Anzahl an Loesch/Schreibzyklen aushaelt.

Fuer Dein konkretes Szenario wird sich da vermutlich nichts passendes finden lassen. Sinnvoller waere IMHO eine Aenderung der Datenaufzeichnung: nicht MSSQL auf dem USB-Stick laufen lassen, sondern die Daten im Speicher sammeln und dann regelmaessig in groesseren Bloecken (alle 10 .. 30 min oder so) als einfaches Logfile oder in aehnlich einfacher, die Schreibzugriffe minimierender Form, auf den Stick schreiben. Das setzt natuerlich entsprechend stabile Stromversorgung/Batterie fuer das Geraet voraus sowie Leerschreiben des Puffers wenn der Strom zur Neige geht.

Swap auf Flash ist auch eine gute Methode, Flashspeicher zu killen.

Kostenguenstig, wenn sowieso schon Windows XP und MS-SQL im Einsatz sind?

Man liest sich, Alex.

--
"Opportunity is missed by most people because it is dressed in overalls and
 looks like work."                                      -- Thomas A. Edison
Reply to
Alexander Schreiber

Das duerfte aber nicht in den ueblichen USB-Sticks verbaut sein.

Eine vernuenftige Datenbank, die ACID garantiert, schert sich nicht um den Schreibcache des Betriebssystems, sondern synced die Daten auf Disk bevor die Transaktion zurueckkommt. Der MS Performance Support wollte uns allerdings vor ein paar Jahren mal erzaehlen, das MS-SQL das nicht mache ...

Man liest sich, Alex.

--
"Opportunity is missed by most people because it is dressed in overalls and
 looks like work."                                      -- Thomas A. Edison
Reply to
Alexander Schreiber

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.