Hotswap Dateisystem

OP #3002530
Hi liebe Forengemeinde!

Ich habe ein Linux betriebenes ARM-Board welches in unregelmäßigen 
Abständen (5sek - 10 min) Daten auf einen USB Stick speichert.

Nun bin ich auf der Suche nach einem Dateisystem bei dem es möglich ist 
den USB Stick im laufendem Betrieb, im worst-case unter einem 
Schreibvorgang abzuziehen.

Falls eine definierte Anzahl von Bytes verloren geht, z.B.: die letzte 
Transaktion, ist das OK. Wichtig ist das derdieser Bereich aber 
beschreibbar bleibt und keine "Reperatur"/(umfangreicher)"Check" des 
Datenträgers erforderlich wird.


EXT3?
OP
Hab' eh überlegt es in PC Hard- & Software zu stellen... wie auch immer 
jetzt is es da vll. verschiebt es jemand...

Ext3 war ein schnellschuß von mir. Das ganze soll ja Windows kompatibel 
sein.

Also wohl eher NTFS mit NTFS-3G, die Frage ist ob ich da das Journaling 
so benützen kann, dass im schlimmsten Fall nur die Daten verloren sind 
die während des Abziehens geschrieben hätten werden sollen.
Gast
wenn man immer die die gleiche Datei schreibt. Also nur 1 Datei auf dem 
Stick. Dann sollte das dateisystem egal sein. Es müssen keinen änderung 
am Filesystem vorgnommen werden. Dann kann man sich selber in der Datei 
eine Struktur überlegen wo man am anfang reinschreibt, wo die letzen 
daten geschrieben wurden. Dann kann man FAT, FAT32, FAT16, NTFS nehmen.
Gast
> Also am besten 1 Datei die die gesamte größe des Sticks hat.

Da wäre ich noch nicht so sicher, daß es IMMER bei JEDEM Sick klappt. Da 
der USB-Stick ja aus Controller und Speicher besteht, bin ich ja nicht 
sicher, ob der Controller definiert immer ALLES bis in den Speicher 
bekommt wenn der Strom weg ist.

Da würde ich mindestens 2 verschiedene Sticks benutzen, damit evtl. noch 
einer übrig bleibt im Fehlerfall.
Gast
oszi40 schrieb:
> Da wäre ich noch nicht so sicher, daß es IMMER bei JEDEM Sick klappt. Da
> der USB-Stick ja aus Controller und Speicher besteht, bin ich ja nicht
> sicher, ob der Controller definiert immer ALLES bis in den Speicher
> bekommt wenn der Strom weg ist.

und? das war wollte auch niemand!

> Falls eine definierte Anzahl von Bytes verloren geht, z.B.: die letzte
> Transaktion, ist das OK.
OP
Peter II schrieb:
> Malte S. schrieb:
>> Das gilt aber nur, wenn die Größe der Datei nicht geändert wird.
>
> ja, hätte ich noch dazu schreiben müssen. Also am besten 1 Datei die die
> gesamte größe des Sticks hat.

Das mit einer Datei ist eine gute Idee, warum diese aber eine fixe Größe 
bzw. den ganzen Stick belegen muß verstehe ich nicht.

Hatte an folgenden Dateibeginn gedacht:

WRITING|START|END|WRITING|START|END|DATA....|DATA....

Writing... Bit das definiert ob gerade geschrieben wird oder nicht
start... beginn des blocks
end... ende des blocks

Es wird immer abwechseld die erste Struktur und die zweite benutzt. 
Logischerweise wir immer das bit Writing zuerst gesetzt dann start und 
end dann die daten und dann wieder writing zurückgesetzt.

Wozu brauch ich die feste Größe?
Gast
Erwin W. schrieb:
> Das mit einer Datei ist eine gute Idee, warum diese aber eine fixe Größe
> bzw. den ganzen Stick belegen muß verstehe ich nicht.

weil beim vergrößern einer Datei sich die Daten des Dateisystems ändern 
müssen, wenn dort etwas schieft geht ist nicht mehr sichergestellt das 
es danach noch lesbar ist.
Gast
Erwin W. schrieb:
> Wozu brauch ich die feste Größe?

das filesystem legt die daten nicht zwangsläufig linear nacheinander ab. 
um sich in dem chaos wieder zurecht zu finden, schreibt das filesystem 
diverse daten, wenn du das system beim schreiben der informationen mit 
dem abziehen des sticks überrascht, dann wird das ganze kompliziert (und 
ntfs ist nicht unbedingt dafür entworfen worden). wenn die datei immer 
gleich gross ist, dann verminderst du das risiko ein wenig.

alles in allem dürfte es einfacher sein wenn du einfach direkt auf 
blockebene schreibst, dann hast du die ganzen probleme nicht.
Gast
Erwin W. schrieb:
> Wozu brauch ich die feste Größe?

Peter meint wahrscheinlich, daß Du dann immer den selben logischen 
Speicherort erreichst ohne das Directory zu verändern.

Ob nicht beim Schreiben defekt markierte Blöcke zu ungewollten 
Veränderungen führen? Ein Journaling-Dateisystem kann zwar vieles auf 
logischer Ebene ausbügeln, ob jedoch die durch Spannungsausfall 
fehlerhaft gewordenen Zellen im Speicher immer mehr werden wird erst die 
Erfahrung zeigen mit dem konkreten Stick.

http://www.techwriter.de/thema/usb-mem0.htm#lebensdauer
OP
Da habt Ihr recht, fixe Größe ergibt sinn. - Warum aber den ganzen 
Datenträger?
Auf Blockebene schreiben scheint mir keine Option, da das ganze unter 
windows ohne spezielle mechanismen lesbar sein soll.

- Und wie ist das mit dem Schreiben im Detail:
Nehmen wir mal an jemand zieht den Stick unter einem Schreibvorgang ab.
Im Normalfall sollten die Pins der Stromversorgung am längsten sein.
D.h Zuerst sind die I/Os weg --> Speichercontroller bekommt keinen Input 
mehr von USB muß aber die vorhanden Operationen noch ausführen da er ja 
auf Blockebene (Wear Leveling, Flash Speicher an sich... ) ließt und 
schreibt --> Könnte das nicht ein Problemen sein? Oder sind neue 
Datenblöcke sowieso immer in einem neuem Block und die Bytes dazwischen 
sowieso vom Controller ausgeblendet. - Oder ist das Abziehen eh so 
"langsam", dass der Controller sowieso noch genug Zeit (bzw. die 
kondensatoren groß genug damit er noch Saft hat) hat den Block fertig zu 
löschen/schreiben.
Erwin W. schrieb:
> Oder ist das Abziehen eh so
> "langsam", dass der Controller sowieso noch genug Zeit (bzw. die
> kondensatoren groß genug damit er noch Saft hat) hat den Block fertig zu
> löschen/schreiben.

Wenn man sich mal so einen Stick ansieht, sind (ohne jetzt die Schaltung 
nachzuvollziehen) meistens nur ein "großer" Bulk-Kondensator und einige 
Entkopplungs-Cs auf der Platine, gesamt vielleicht in der Größenordnung 
20 uF - 50 uF, je nach NAND-Flash brauchen die ~ 1 ms bis 2 ms zum 
Löschen eines Blocks (z.B. 128 kiB) und dann z.B. ~10 ms zum neuen 
Schreiben der Daten... ältere NANDs zogen dabei etwa 20 mA (heutige mit 
Controller wesentlich mehr, einfach mal nach einer längeren Kopieraktion 
anfassen).
Angenommen es sind 100 mA (NAND + Controller) und die Teile arbeiten 
noch zuverlässig, wenn die Spannung 500 mV unter der normalen Spannung 
liegt.

Wenn ich mich nicht verrechnet habe ist das nach ~ 250 us der Fall...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.