In den letzten Monaten reifte im Linux-Kernel ein neues Dateisystem: F2FS ist auf die Eigenheiten von Flash-Speicher zugeschnitten mit dem Ziel, dort eine bessere Leistung als konventionelle Dateisysteme zu liefern.
Neue Dateisysteme für Linux sind Mammutprojekte, deren Reifeprozess oft lange Jahre dauern kann. Prominentes Beispiel ist BTRFS , das seit 2007 entwickelt wird und erst seit Ende 2014 als stabil gilt. Vergleichsweise flott hat es das Flash-Friendly Filesystem (F2FS) zu einer stabilen Version geschafft. F2FS ist in seiner Arbeitsweise speziell für auf die Eigenheiten von Flash-Nand-Speicher wie SD-Karten, SSDs und eMMC-Speicherchips von mobilen Geräten optimiert. Es orientiert sich an Log-strukturierten Dateisystemen, die sich von Haus aus gut für Flash-Speicher mit Nand-Chips eignen. Als Open-Source-Projekt angelegt
Samsung hat F2FS von Anfang an als Open-Source-Projekt aufgestellt. Der Code wird in Abstimmung mit den Linux-Kernel-Entwicklern gepflegt, damit die Fortschritte zügig in den Hauptzweig des Kernels kommen und damit auch zu Android. Mit der Aufnahme in den Linux-Kernel erschließt sich F2FS eine größere Zielgruppe von Anwendern, aber auch von Entwicklern, da der eingereichte Code von Samsung den strengen Qualitätskontrollen des Kernels unterliegt. Zuletzt machte F2FS mit der Kernel-Version 3.18 größere Fortschritte nach Fehlerbehebungen und Aufnahme von Vorschlägen der Linux-Entwickler. Es wird damit jenseits der Android-Landschaft auch für Linux-Anwender interessant, zumal neuere Distributionen wie Ubuntu 14.10/15.04 und Open Suse 13.2 mit F2FS auf Datenpartitionen umgehen können. Wozu ein Flash-Dateisystem?
Die heute üblichen Flash-Nand-Speicher-SSDs arbeiten mit Feldeffekttransistoren (Speicherzellen), die in Zeilen und Spalten angeordnet sind. Für Massenspeicher bietet sich eine Schaltung nach Nand (von „NOT AND“) als Logikgatter an, da dieser logische Aufbau mit wenig Datenleitungen auskommt. MLC-Speicherzellen, die über verschiedene Spannungen mehr als ein Bit pro Zelle speichern können, haben eine deutlich begrenzte Lebensdauer von rund 10?000 Schreibzyklen. Das macht eine gleichmäßige Verteilung (Wear-Leveling) der Schreibvorgänge über den gesamten Flash-Speicher nötig. Spezielle Flash-Dateisysteme wie JFFS, Yaffs und Log FS berücksichtigen diese Eigenschaften und arbeiten als Log-strukturiertes Dateisystem. Daten schreiben sie ähnlich eines zyklischen Logbuchs sequenziell auf den Flash-Speicher stellen damit eine gleichmäßige Nutzung aller Zellen sicher. Diese Dateisysteme sind aber Exoten, da sie einen ungünstigen Nebeneffekt haben: Daten und Metadaten landen sequenziell in mehreren Versionen auf dem Speichermedium, und es ist die Aufgabe einer aufwendigen und relativ langsamen Garbage-Collection, veraltete und gelöschte Daten aus dem Log zu entfernen. Zudem sollen Flash-Medien ja auch mit konventionellen Dateisystemen wie FAT, NTFS und Ext3/4 funktionieren, ohne dabei schnell kaputt zu gehen. Deshalb bekommen Flash-Massenspeicher von ihrem Controller eine Abstraktionsschicht, den Flash Translation Layer (FTL). Diese Schicht erlaubt keinen direkten Zugriff auf Flash-Zellen, sondern übersetzt alle Schreib-und Leseaktionen, damit das Medium nach außen einer mechanischen Festplatte gleicht. Was F2FS anders macht
F2FS ist ein Mittelweg: Es strukturiert Daten für Schreibvorgänge wie ein Log-strukturiertes Dateisystem in möglichst lange sequenzielle Serien, überlässt es aber dem Flash Translation Layer, die Redundanzen zu beseitigen. Da der Controller von Flash-Laufwerken mehrere Schreiboperationen gleichzeitig verarbeiten kann, erzeugt F2FS bis zu sechs simultane Datenströme. Und schließlich gruppiert F2FS Daten mit kurzer Lebensdauer (Dateien) und langer Vorhaltezeit (Superblock, Index, Dateisystem-Informationen). Diese Gruppierung entlastet die interne Garbage-Collection des Controllers. Der Bereich für Metadaten ist bei F2FS nicht als Log-strukturiertes Dateisystem angelegt, da hier nur kleine, zufällig verteile Änderungen erfolgen, die der FTL besser managen kann. Wenn das Speichermedium voll wird, verzichtet F2FS außerdem auf eine Gruppierung der Datenströme und geht zu zufälligen Schreiboperationen (Random Writes) über, da auch in dieser Situation der FTL schneller freie Bereiche findet. F2FS in Ubuntu, Debian und Open Suse
Während einige Android-Geräte F2FS schon als Standard nutzen, ist der Support unter Linux-Distributionen noch nicht konsequent, obwohl die verwendeten Kernel schon mit dem neuen Dateisystem umgehen könnten. Die gebräuchlichen Installer der Distributionen unterstützen noch kein F2FS, und so eignet sich F2FS vorerst nur für manuell angelegte Datenpartitionen auf SSDs, SD-Karten und USB-Sticks. Damit das System F2FS-Partitionen erstellen, einhängen und überprüfen kann, sind die F2FS-Tools nötig – und die gibt es noch nicht in jeder aktuellen Distribution. Debian / Ubuntu und Open Suse haben das Paket bereits im Angebot, Fedora noch nicht. In Ubuntu und Debian (ab Version 8) installieren Sie die F2FS-Tools mit dem Kommando
sudo apt-get install f2fs-tools
und in Open Suse mit diesem Kommando:
sudo zypper install f2fs-tools
Danach können Sie in der Shell mit dem Tool mkfs.f2fs eine neue F2FS-Partition in einem freien Bereich auf dem Flash-Datenträger anlegen:
sudo mkfs.f2fs -l [Name] /dev/sdb4
F2FS unterstützt Partitionsgrößen bis 16 TB. Über den Dateimanager oder mit dem Mount-Befehl lässt sich die neue Partition dann wie gewohnt in ein Zielverzeichnis einhängen und nutzen:
sudo mount /dev/sdb4 [Zielverzeichnis]
Bei F2FS-formatierten Wechselmedien erfolgt das Einhängen automatisch. Für Partitionen auf SSDs, die beim Booten des Systems eingehängt werden sollen, ist dagegen ein Eintrag in der Konfigurationsdatei „/etc/fstab“ nach diesem Schema nötig:
Achten Sie auch auf Berechtigungen, denn F2FS verhält sich auch auf externen USB-Datenträgern wie ein Unix-Dateisystem und nicht wie ein DOS-Dateisystem.
Benchmarks mit FS-Mark belegen, dass F2FS auf externen Speichermedien und Datenpartitionen durch die Bank eine bessere Leistung als Ext4 oder Fat32 bietet. Damit kann F2FS seine Eignung für typische externe Datenspeicher beweisen. Auf der anderen Seite zeigt das Dateisystem Schwächen bei zufälligen konkurrierenden Schreiboperationen mehrerer Prozesse. Damit bleibt Ext4 der Favorit für Systempartitionen auf SSDs und auf Datei-Servern mit einer hohen Zahl an konkurrierenden I/O-Zugriffen.