Asus macht es mit dem EEE-PC [1] vor: Den Notebooks ohne rotierende Festplatte gehört die Zukunft. Solid State Disks (SSD) brauchen weniger Strom als herkömmliche Platten, zeichnen sich durch kürze Zugriffszeiten aus und sind gegen Erschütterungen weitgehend unempfindlich. Als Flashkarten bei Digitalkameras, USB-Sticks für den PC und als Massenspeicher in Embedded-Devices sind die billig herzustellenden Chips schon länger Usus. Zu den neuen Einsatzfeldern zählen Hybrid-Festplatten und USB-Sticks als Pagingdevice für Windows Vista.
Gegen den Einsatz der praktischen Speicher gibt es auch wenig einzuwenden. Der Anwender muss sich nur klar darüber sein oder werden, dass sowohl die innere Organisation der Flashchips als auch die Besonderheiten der für Flash geeigneten Dateisysteme aus Datenschutzgründen problematisch sind. Die Gründe dafür erläutert dieser Artikel.
In puncto Produzieren von Datenrückständen kann man alle Dateisysteme in zwei Gruppen unterteilen: Klassische Dateisysteme arbeiten in-place. Wenn sie alte Daten mit neuen überschreiben, liegen die neuen Daten hinterher an derselben Position, wie die alten vorher. In diese Gruppe fallen fast alle für Festplatten designten Dateisysteme wie Ext 2 bis 4, XFS, Reiser, JFS et cetera.
Das andere Konzept besteht darin, neue Daten grundsätzlich an einen neuen Ort zu schreiben und die alten Daten als ungültig zu deklarieren, aber unangetastet zu lassen. Dieses als Copy on Write (COW) bekannte Verfahren haben erstmals Sprite LFS [2] eingesetzt, ebenso Netapps WAFL [3] und die neuen Dateisysteme ZFS [4] und Btrfs [5]. Flash-Dateisysteme sind prinzipbedingt alle COW-Dateisysteme.
Um Daten einigermaßen sicher zu vernichten, genügt es bei In-place-Dateisystemen in der Theorie, eine bestehende Datei mit neuen Daten zu überschreiben. In der Praxis sollte man trotzdem eine gewisse Vorsicht walten lassen, denn setzt das Nutzprogramm die neue Dateigröße kleiner an als die neue, bleiben am alten Dateiende Daten unreferenziert auf dem Medium zurück.
Problem Nummer zwei: Viele Programme und Bibliotheken überschreiben Dateien, indem sie zunächst die Größe auf null setzen und das Dateisystem damit veranlassen allen belegten Speicherplatz freizugeben. Erst danach schreiben sie die Datei dann neu, wodurch das Dateisystem neuen Speicherplatz zuteilen muss. Hierbei ist nicht sichergestellt, dass die neuen Daten am selben Ort liegen wie die alten - die alten Daten sind potenziell wiederherstellbar, abhängig von der Zuteilung des Dateisystems.
COW-Systeme können nicht löschen
Bei COW-Dateisystemen bleiben beim Überschreiben einer Datei die alten Daten auf dem Medium stets unangetastet. Sicheres Löschen einer Datei ist damit prinzipiell unmöglich, wenn das Dateisystem dies nicht explizit unterstützt. Als Abhilfe kann es genügen, mehr Daten zu schreiben, als freier Platz verfügbar ist. Wenn das Dateisystem freien Platz im Round-Robin-Verfahren zuteilt, sollte so alles einmal überschrieben sein.
Leider gibt es genug Beispiele, in denen dieses Vorgehen zwar die meisten, aber nicht alle Daten überschreibt. Besonders vorsichtige Nutzer löschen daher meistens das komplette Gerät, beispielsweise mit DD, legen ein frisches Dateisystem an und spielen ein Backup ein. Beim Ausliefern von neuen Systemen ist die Verfahrensweise durchaus verbreitet. Übrigens: Wenn es gilt, Metadaten wie Dateinamen oder -berechtigungen zu überschreiben, verhalten sich auch In-place-Dateisysteme ähnlich wie COW-Dateisysteme und schreiben geänderte Daten an andere Stellen.
Hardware-bedingte Datenrückstände
Die meisten Flashmedien zeichnen sich dadurch aus, dass sie ihre Eigenschaften (siehe Kasten "Flash-Technik") - so gut es geht - vor dem Betriebssystem verstecken. Bei praktisch allen an Endnutzer verkauften Medien simuliert ein interner Hostadapter ein ATA-Festplatteninterface. Damit kann das Betriebssystem beliebige Sektoren von nur 512 Byte Länge schreiben, obwohl der Flashchip Blöcke von 16 bis 256 KByte besitzt, die eine Logik vor dem Beschreiben löschen muss. Zwischen Löschen und Wiederbeschreiben klafft ein Zeitfenster, in dem der Block keine gültigen Daten enthält. Dies ist der Grund, warum alle Dateisysteme für rohes Flash dem COW-Prinzip folgen.
Das Gleiche gilt auch für den FTL (Flash Translation Layer), der das Bindeglied zwischen rohem Flash und einem Blockdevice-Interface bildet. Das Erase-Block-Management als Teil des FTL schreibt neue Daten stets in freie Blöcke und gibt die Blöcke mit alten Daten später frei. Dabei versucht es die Löschvorgänge im Chip zu verteilen, da Flash nur begrenzt viele Erase-Zyklen verträgt. Wie dies genau passiert, geben die Flashspeicher-Produzenten (beispielsweise Toshiba und Samsung) nur im Rahmen von Patentveröffentlichungen, zum Beispiel [6], oder gar nicht bekannt. Grundsätzlich gibt es jedoch zwei Möglichkeiten.
Am einfachsten ist es, immer komplette Blöcke zu schreiben. Dabei verwaltet der Chip einen kleinen Pool von freien Blöcken, in die er neue Daten schreibt. Sobald sie geschrieben sind, kann er die alten Blöcke löschen und damit in den Pool freigeben. Üblicherweise geschieht das Löschen rasch nach dem Schreiben, sodass alte Daten nur in Ausnahmesituationen wie Stromverlust oder Hardwarefehlern erhalten bleiben.
Alternativ verwaltet die Speicherlogik kleinere Einheiten. Wird ein Teilblock überschrieben, bleiben andere Daten in diesem Block weiterhin gültig. Folglich kann sich der Pool freier Blöcke schnell erschöpfen - üblicherweise sind nur etwa 3 Prozent des Speicherplatzes dafür reserviert. Tritt der Fall ein, muss ein Garbage-Collection-Algorithmus alle gültigen Fragmente umkopieren und so wieder komplette Blöcke freigeben. Zwischen Schreiben und Garbage Collection kann durchaus einige Zeit liegen - Zeit, in der aus Betriebssystem-Sicht Daten nicht mehr vorhanden sind, die der Flashspeicher aber in Wahrheit in sich trägt.
|
Flash-EEPROMs sind Bausteine mit nicht-flüchtigem Inhalt, sie behalten die Daten auch ohne Spannungsversorgung. Wegen der kleinen Chips und günstiger Herstellung kommen meist NAND-Flashbausteine zur Auslieferung, die stets eine bestimmte Anzahl Flashtransistoren (so genannte Floating Gates) in Serie schalten. Weil selektive Schreiboperationen immer nur vom logischen Zustand Falsch zum Zustand Wahr möglich sind, muss eine Logik vor jedem Schreibvorgang einen Löschzyklus einschieben. Löschen nur en bloc
Im Gegensatz zu gewöhnlichem EEPROM-Speicher lässt sich beim Flash-EEPROM ein Wort, die kleinste adressierbare Speichereinheit (8 bis 64 Bit), nicht einzeln löschen, sondern nur blockweise. Ein Block ist meist ein Viertel, Achtel, Sechzehntel und so weiter der Gesamtspeicherkapazität eines Chips. Diese EEPROM-Blöcke (auch Erase Block genannt) sind deutlich größer als die Blöcke, mit denen herkömmliche Filesysteme arbeiten. Zudem ist die Anzahl der Löschzyklen (Endurance) begrenzt. Die Hersteller garantieren für jeden einzelnen Block nur 100 000 bis eine Million Zyklen.
Grund für die Abnutzung: In den Floating Gates durchtunneln bei jedem Löschzyklus die Elektronen die Oxidschicht des Transistors (Fowler-Nordheim-Tunneleffekt). Die für diesen quantenmechanischen Effekt erforderliche hohe Spannungen beschädigt bei jedem Löschvorgang ein wenig die Oxidschicht, die das Floating Gate umgibt (Abbildung 1). Ist die Degeneration so weit fortgeschritten, dass die im Transistor gefangenen Elektronen entweichen, geht das dort gespeicherte Bit verloren und die Zelle ist defekt. Die Hersteller der Flashgeräte versuchen diesem schleichenden Effekt entgegenzuwirken, indem sie Reservezellen und ein Defektmanagement einbauen, das kaputte Blöcke wegmappt.
Abbildung 1: Die Oxidschicht um das FloatingGate hindert die Elektronen daran, abzufließen. Durch die Löschvorgänge degeneriert jedes Mal die schützende Oxidschicht.
(Bild: © Quelle: Wikipedia)
|