Wie implementieren SD-Karten ihren Schreibschutz am Ende ihrer Lebensdauer?

Wie implementieren SD-Karten ihren Schreibschutz am Ende ihrer Lebensdauer?

Ich habe ein bisschen recherchiert und habe vom End-of-Life-Verhalten von SD-Karten gehört (ich weiß nicht wirklich, wie ich es sonst nennen soll), bei dem sich SD-Karten und microSD-Karten selbst schreibgeschützt machen, um Datenverlust zu vermeiden. Als ich das erste Mal davon hörte, dachte ich, das sei furchtbar clever. Jetzt bin ich mir nicht mehr so ​​sicher.

Hintergrund: Ich hatte eine microSD, die 2 Jahre intensiver Nutzung mit Raspberry Pi standhielt, bevor sie sich selbst in den Schreibschutzmodus versetzte. Ich habe dd verwendet, um das gesamte Betriebssystem und Dateisystem auf meine Ersatzkarte zu verschieben. Nach ein paar Tagen der Nutzung stellte ich fest, dass sich auch diese Karte selbst schreibgeschützt hatte. Ich dachte, ich hätte furchtbares Pech gehabt, bis meine zweite Ersatzkarte fast sofort dasselbe tat.

Das hat mich beunruhigt, also habe ich meinen Raspberry inzwischen ausgeschaltet. Aber ich frage mich, woher die SD-Karte weiß, dass sie sich selbst schreibgeschützt hat. Wenn sie die Schreibzyklen zählt und ich mit dd ein Image der gesamten Festplatte erstellt habe, dann habe ich meine SD-Karten möglicherweise beschädigt, indem ich sie glauben ließ, sie seien alt. Aber ich kann die Implementierung des End-of-Life-Verhaltens nirgendwo finden. Weiß jemand, wie es funktioniert? Ich würde gerne versuchen, es rückgängig zu machen, aber der Schreibschutz scheint auf einer sehr niedrigen Ebene implementiert zu sein. Ich kann nicht einmal mit sudo auf /dev/sdX zugreifen.

Wenn ich Recht habe und es eine Art Zählfunktion für die Schreibzyklen hat, ist das mehr als nur frustrierend. Es bedeutet, dass die SD-Karte nicht wirklich kaputt ist – es ist nur eine Vorsichtsmaßnahme. Das ist zwar nett, aber ich würde sie gerne bis zum tatsächlichen Tod verwenden, da ich regelmäßig Backups mache.

Weiß jemand vor diesem Hintergrund, wie das End-of-Life-Verhalten implementiert wird, und gibt es eine Möglichkeit, ein versehentliches Auslösen des Verhaltens rückgängig zu machen?

Antwort1

Die meisten Hersteller veröffentlichen ihren Verschleißnivellierungsmechanismus nicht, wodurch es unmöglich ist, die besten und schlechtesten Lebenserwartungsszenarien zu bestimmen (wahrscheinlich liegt das daran, dass man mit diesem Wissen eine solche Karte innerhalb kürzester Zeit zerstören könnte).

SanDisk hat jedoch vor einiger Zeit einige Einblicke gegeben (https://web.archive.org/web/20150326122100/http://ugweb.cs.ualberta.ca/~c274/resources/hardware/SDcards/WPaperWearLevelv1.0.pdf). Dies hat sich zwar wahrscheinlich geändert oder verfeinert, die Grundlagen sollten jedoch weiterhin gelten:

Jeder Speicherchip ist in Blöcke unterteilt. Ein Block ist eine Anordnung von Speicherzellen, die als Sektoren organisiert sind. (...) Die kleinste Einheit für einen Schreib- oder Lesevorgang ist eine Seite (oder ein Sektor). Die kleinste Einheit für einen Löschvorgang ist ein Block. Physische Blöcke sind logisch in Zonen gruppiert. (...) Die Abnutzungsnivellierung erfolgt innerhalb einer Zone. Die aktuelle Firmware verteilt die Abnutzung nicht über die Kapazität der Karte. Jede Zone hat etwa 3 % zusätzliche „Ersatzblöcke“ über das hinaus, was zugewiesen ist, um die logische Kapazität der Flash-Karte zu erreichen. Diese Gruppe von Blöcken wird allgemein als „Löschpool“ bezeichnet.

Auch wenn sich der Verschleiß über die Karte verteilt, bleibt das Prinzip dasselbe.

Wenn eine Karte erkennt, dass ein Block das Ende seiner Nutzungsdauer erreicht hat, entfernt sie diesen Block aus den für Schreibvorgänge verfügbaren Blöcken. Dadurch verringert sich die Größe des Löschpools. Die Kapazität der Karte wird vom Host nicht beeinflusst. Wenn der Pool der für Schreibvorgänge verfügbaren Blöcke aufgrund von Verschleiß erschöpft ist, erreicht die Karte das Ende ihrer Nutzungsdauer für Schreibvorgänge.

Da die Kapazität der Karte nicht reduziert wird und die Verschleißnivellierung auf Verbraucherkarten gespeicherte Daten nicht neu schreibt (wie bei SSDs), können einige Schreibvorgänge die Karte schnell verschleißen. Ein Schreibvorgang kann nur in einen Sektor schreiben, was erfordert, dass der gesamte Block geschrieben wird. Abhängig von Ihrem Betriebssystem ddkann eine Standardblockgröße verwendet werden, 512die viel niedriger sein kann als die Blockgröße der Karte und daher zu einer enormen Schreibverstärkung führt. Ein Beispiel: Wenn die Blockgröße der SD-Karte 16 kB beträgt und ein Sektor 512 Byte groß ist, kann der Verschleiß in diesem Fall bis zum Faktor 31 erhöht werden! Dies könnte der Grund sein, warum Ihre zweite Karte frühzeitig ausgefallen ist.

Die Verschleißinformationen werden nicht kopiert, da sie Teil der SD-Kartenhardware sind und daher nicht mit normalen Mitteln gelesen/wiederhergestellt werden können. Dasselbe gilt für den Schreibschutz, da der SD-Kartencontroller selbst dies verhindert. Also nein, wenn es sich nicht um Hardware- (mechanischer Schalter in SD-Karten) oder Software- (Einbau schreibgeschützt) Schreibschutz handelt, ist dieser Vorgang nicht umkehrbar.

Antwort2

Die Karten sollten über zusätzlichen Speicherplatz für Wear Leveling verfügen, aber es klingt, als wären die Karten, die Sie haben, dumm und hätten keine freien Blöcke und würden schreibgeschützt, weil Sie in jeden Block auf der Festplatte geschrieben haben. Wenn Sie die Dateien kopieren, anstatt zu verwenden dd, oder e2image -arzum Kopieren eines ext[234]-Dateisystems verwenden, vermeiden Sie unnötiges Schreiben in jeden ungenutzten Block auf der Festplatte, was hilfreich sein kann.

verwandte Informationen