Flash-Dateisysteme unter Linux

Wear Leveling für den Superblock


[ Seminar Linux und Netzwerke, Softwareentwicklung mit Eclipse ] ... [ Inhaltsübersicht ] ... [ Glossar ]
Abschliessend soll noch ein Algorithmus vorgestellt werden, der es ermöglicht eigentlich statische (Flash)-Speicherinhalte weitestgehend dynamisch zu gestalten. Auf diese Weise wird zusätzliches Wear Leveling erreicht. Besonders interessant ist diese Technik für den Superblock, der immer an einer festen Stelle liegt, sowie das Journal. Dieser Algorithmus wurde im Designpaper von JFFS3 vorgstellt, das nun UbiFS heisst.

Abbildung 9: Superblock Wear Leveling
Quelle: infradead.org
Superblock Wear Leveling


Um es zu ermöglichen den Superblock auf dem Speichermedium dynamisch zu speichern werden am Anfang des Medium zwei Blöcke als s.g. Anker Blöcke (anchor area) reserviert. Dies sind tatsächlich die ersten beiden Erase Blocks des Speichers. An erster Stelle des ersten Anker Blocks wird nun ein Pointer auf einen "chain eraseblock" gespeichert, der wiederum an erster Stelle einen Pointer auf einen zweiten chain eraseblock speichert. Es können theoretisch auch noch mehr chain eraseblocks auf diese Weise miteinander verbunden sein. Der letzte chain eraseblock zeigt jedoch auf den eigentlichen Erase Block in dem der Superblock an erster Stelle liegt. Wie in Abbildung 9 zu sehen ist können die chain eraseblocks und der "super eraseblock" an beliebigen Stellen liegen. Diese Erase Blöcke werden nach der Wear Leveling Strategie des Dateisystems ausgesucht. In diesem Fall liegt der super eraseblock zunächst im Erase Block 501.
Es werden nun (2) Änderungen am Dateisystem vorgenommen und der Superblock muss neu geschrieben werden. Der Superblock verweilt dabei im gleichen Eraseblock, wird lediglich einen Block weiter "geschoben". Dies wird wiederholt bis der Erase Block voll ist (3). Nach bekannter Wear Leveling Strategie wird nun ein neuer Erase Block als super eraseblock ausgewählt und der Zeiger im letzten chain eraseblock aktualisiert (4). Schritt (2) bis (4) wiederholen sich nun so lange, bis auch der chain eraseblock 2 voll ist und es wird nun ein neuer chain eraseblock 2 gesucht und der Pointer auf ihn im chain eraseblock 1 aktualisiert (6). Das Verfahren wiederholt sich bis der erste Anker Block vollständig gefüllt ist.
An diesem Punkt (8) angekommen wird der "Anker" in den zweiten Anker Block geschrieben und der erste kann gefahrlos gelöscht werden. Er steht nun wieder zur Verfügung, falls der zweite Anker Block gefüllt ist.

Nach oben

[ Seminar Linux und Netzwerke, Softwareentwicklung mit Eclipse ] ... [ Inhaltsübersicht ] ... [ Glossar ]