SD-Karte schreiben, limit - Daten-Protokollierung
Ich will track - /registrieren, wenn mein system (ein Raspberry Pi) geschlossen wurde, in der Regel durch abrupte Leistungsverlust.
Ich will es tun, indem die Aufnahme einen Takt alle 10 Minuten, um eine SD-Karte - so alle 10 Minuten, es würde gehen, auf die SD schreiben und die aktuelle Zeit/Datum in eine Datei. Würde, die Schäden an der SD auf lange Sicht?
Wenn es nur 100k Schreibzyklen, es hätte einen "bad block" in ein paar Jahren. Aber ich habe gelesen, es gibt schaltungen, um zu verhindern, dass es - würde es verhindern, dass die bad block? Wäre es sicherer zu verteilen das Protokoll in mehrere Blöcke?
Dank
- Es hängt von der Marke und Modell von Ihrer SD-Karte, aber mit den meisten modernen Karten, die ich denke, Sie sollten in Ordnung sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Allgemeine Antwort auf diese Frage ist ein starker "es hängt". (Praktische Antwort ist, was Sie bereits haben; wenn Ihr Dateisystem Parameter sind nicht falsch, Sie haben einen großen Spielraum in diesem Fall.) Es hängt von folgenden Faktoren ab:
Wenn wir einen Blick auf einen flash-chip, ist der in Sektoren organisiert. Ein Sektor ist ein Bereich, können vollständig gelöscht werden (eigentlich zurücksetzen auf einen Zustand, mit nur 1 s), in der Regel 128 KiB für SD-Karten. Nullen geschrieben werden können, bit-by-bit, aber der einzige Weg, um zu schreiben, diejenigen zu löschen, die Branche.
Die Anzahl der Sektor löscht begrenzt ist. Der Löschvorgang wird länger dauern, jedes mal, wenn es ausgeführt wird, auf dem gleichen Sektor, und es ist mehr Unsicherheit, in die Werte geschrieben, zu jeder Zelle. Das schreiben beschränken, die für eine bestimmte Karte ist wirklich die Anzahl der löscht für einen einzigen Sektor.
Um zu vermeiden, dass das erreichen dieses limit zu schnell, die SD-Karte hat einen controller, der kümmert sich um wear-levelling. Die grundlegende Idee ist, dass für den Benutzer transparent die Karte änderungen, welche Sektoren verwendet werden. Wenn Sie einen Antrag auf die gleichen Speicher-position, es kann zugeordnet werden, um verschiedene Sektoren zu unterschiedlichen Zeiten. Die grundlegende Idee ist, dass die Karte hat eine Liste von leeren Sektoren, und Wann immer Sie benötigt wird, nimmt es die eine, die am wenigsten verwendeten.
Gibt es andere algorithmen, wie gut. Der controller kann track-Sektor-erase-Zeiten oder Fehler, die auf einem Sektor. Leider ist die Karte die Hersteller in der Regel nicht zu viel zu sagen über die genauen algorithmen, aber für eine übersicht, siehe:
http://en.wikipedia.org/wiki/Wear_leveling
Es gibt verschiedene Arten von flash-chips zur Verfügung. SLC-chips speichern nur ein bit pro Speicherzelle (es ist entweder 0 oder 1), MLC-Zellen speichern von zwei oder drei bits. Natürlich, MLC-chips sind empfindlicher gegenüber Alterung. Drei-bit (acht Stufen) - Zellen kann nicht ertragen, mehr als 1000 schreibt. Also, wenn Sie brauchen Zuverlässigkeit, nehmen Sie eine SLC Karte, trotz seiner höheren Preis,
Als das wear-Leveling verteilt der Verschleiß über die Karte, größere Karten mehr ertragen Sektor löscht als die kleinen Karten, wie Sie haben mehr Sektoren. Im Prinzip eine 4 GB-Karte mit 100 000 Schreibzyklen können tragen 400 TB Daten während Ihrer gesamten Lebensdauer.
Aber um die Dinge mehr kompliziert, die Datei-system hat eine Menge damit zu tun. Wenn ein kleines Stück der Daten, die geschrieben wird auf ein Volume, eine Menge verschiedener Dinge passieren. Zumindest die Daten an die Datei angehängt, und die dazugehörigen directory-Informationen (Datei-Größe) wird verändert. Mit einer typischen Datei-system-das bedeutet: mindestens zwei 4 KiB-block schreibt, von denen man nur eine append (keine Voraussetzung für eine Löschung). Aber viele andere Dinge können passieren: schreiben Sie ein journal, ein block immer voll, etc.
Gibt es Dateisysteme, die optimiert wurden, um verwendet werden, mit flash-Geräte (JFFS2 ist die am häufigsten). Sie sind alle, soweit ich weiß, optimiert für die raw-flash und kümmern sich um wear-Leveling und verwenden Sie bit-oder Oktett-Ebene Atomare Operationen. Ich kenne keine Datei-Systeme optimiert für SD-Karten. (Vielleicht jemand mit akademischen Interessen schaffen könnte, das wear-levelling-Systeme der Karten zu berücksichtigen. Das ergäbe ein schönes Papier oder sogar ein paar.) Zum Glück, die üblichen Datei-Systeme können optimiert werden, um mehr Kompatibilität (schneller, führt Verschleiß) mit der SD-Karte durch anpassen der Datei-system-Parameter.
Nun, dass diese zwei Schichten an der Spitze des physischen Datenträger befinden, ist es fast unmöglich, zu verfolgen, wie viele gelöscht wurden, durchgeführt. Eine der Schichten ist sehr kompliziert (Dateisystem), die andere (wear-levelling) vollständig nicht transparent.
So, wir können nur einige grobe Schätzungen. Lassen Sie uns sagen, ein klein schreiben, erlischt zwei 4 KiB-Blöcken im Durchschnitt. Diese Art der Protokollierung alle 10 Minuten verbraucht ein 128 KiB löschen Sektor alle 160 Minuten. Wenn die Karte ist eine 8 GB-Karte, es hat rund 64 Kb Sektoren, so dass die Karte Weg ist durch die einmal alle 20 Jahre. Wenn die Karte aushält, 1000 Schreibzyklen, es wird gut sein für 20 000 Jahren...
Die Berechnung oben davon ausgegangen, perfekte wear-Leveling und eine sehr effiziente Datei-system. Jedoch ein Sicherheitsfaktor von 1 000 sollte reichen.
Natürlich, das kann verdorben werden, ganz leicht. Eine der einfachsten Möglichkeiten ist, zu vergessen, um die Festplatte mounten mit der noatime Attribut. Dann wird die Datei-system-update-Datei Zugriffszeiten, die dazu führen können, schreiben Sie jedes mal, wenn auf eine Datei zugegriffen wird (einmal Lesen). Oder ist das OS-swapping-virtueller Speicher auf der Karte.
Nicht zuletzt von den Faktoren Glück. Moderne SD-Karten haben die unglückliche Tendenz, sterben aus anderen Ursachen. Die Anzahl der Zitronen mit auch sehr bekannten Hersteller ist nicht sehr klein. Wenn Sie töten eine Karte, ist es nicht unbedingt, weil der Verschleiß Grenze. Wenn die Karte ist abgenutzt, ist es immer noch lesbar. Wenn es komplett tot, es starb an etwas anderes (statische Elektrizität, kleine Fraktur irgendwo).