# NILFS

NILFS bzw. NILFS2 (New Implementation of a Log-structured File System) ist ein Logging-Dateisystem, das für Linux implementiert wurde. Es wurde in Japan von den Nippon Telegraph and Telephone (NTT) Cyber Space Laboratories entwickelt und steht unter der GNU General Public License (GPL).

## Funktionsweise

NILFS unterscheidet sich von den meisten anderen heute gebräuchlichen Dateisystemen dadurch, dass es wie ein Tagebuch bzw. eine Protokolldatei (englisch log) aufgebaut ist. D. h. das Dateisystem beginnt chronologisch am Anfangspunkt der Partition zu schreiben und arbeitet sich kontinuierlich bis zum Endpunkt durch.
Darüber hinaus ist NILFS ein Copy-On-Write-Dateisystem. D. h., dass bei Änderungen einer Datei die neue Version separat gespeichert wird. Die alte Version der Datei bleibt auf der Festplatte bestehen und wird lediglich in den Metadaten als obsolet markiert. Einmal geschriebene Dateien werden also nicht verändert, sondern durch erneuerte Versionen ersetzt, die wiederum am Ende des belegten Bereichs geschrieben werden. Allerdings werden zur Effizienzsteigerung nicht die gesamten Dateien neu geschrieben, sondern nur jene Blöcke, die verändert wurden.
Es wird somit vorerst überhaupt nichts gelöscht. Dies kann so lange beibehalten werden, bis der Schreibprozess am Ende der Partition angekommen und diese voll ist. Ist dies der Fall, so muss der Garbage Collector zum Einsatz kommen, der veraltete Versionen gespeicherter Dateien löscht. NILFS beginnt dann erneut am Anfang der Partition zu schreiben, um sich von dort wie gehabt kontinuierlich bis zum Ende der Partition durchzuarbeiten. Konzeptuell versteht NILFS also eine Partition als endlosen Kreis (Digitaler Ringspeicher).
Der Vorteil dieser Funktionsweise liegt darin, dass einmal geschriebene Daten nicht verloren gehen, solange das Medium (Festplatte, SSD) nicht beschädigt ist. Versehentlich gelöschte Dateien können einfach wieder hergestellt werden, solange sie nicht vom Garbage Collector endgültig gelöscht und zum Überschreiben freigegeben wurden.
Auch die Wiederherstellung nach einem Systemabsturz ist wesentlich einfacher als bei anderen Dateisystemen, da wie bei einem Tagebuch, das vorübergehend zugeklappt wurde, einfach von dort weitergeschrieben werden kann, wo zuletzt geschrieben wurde.
Im Falle von einfachem Flash-Speicher ohne Wear-Leveling (ältere SSDs, USB-Sticks, SD-Karten) hat dieses Prinzip auch den großen Vorteil, dass alle Bereiche einer Partition gleichmäßig belastet werden. Es entstehen so keine Hotspots von Speicherbereichen, die wesentlich öfter beschrieben wurden als andere und daher erheblich früher ausfallen als der Rest des Speichers.

## Eigenschaften

NILFS unterstützt kontinuierliche Schnappschüsse. Zusätzlich zur Versionierungsfähigkeit des gesamten Dateisystems können Benutzer sogar Dateien, die vor wenigen Sekunden fälschlicherweise überschrieben oder zerstört wurden, wiederherstellen. Da das NILFS die Konsistenz des Dateisystems wie ein herkömmliches LFS aufrechterhalten kann, kann es nach Systemabstürzen schnell wiederhergestellt werden.
NILFS erstellt alle paar Sekunden oder pro Synchron-Schreib-Basis eine Anzahl von Checkpoints (es sei denn, es gibt keine Änderung). Benutzer können signifikante Versionen von kontinuierlich erstellten Checkpoints auswählen und diese in Schnappschüsse ändern, die beibehalten werden, bis sie wieder zu Checkpoints geändert werden.
Bis das Volume voll ist, gibt es keine Beschränkung für die Anzahl der Schnappschüsse. Jeder Schnappschuss kann als schreibgeschütztes Dateisystem bereitgestellt werden.
Die aktuelle Hauptversion von NILFS ist Version 2, die als NILFS2 bezeichnet wird. In NILFS2 wurde die Online-Garbage-Sammlung implementiert, die Festplattenplatz frei macht, wobei eine gewisse Anzahl an Schnappschüssen erhalten bleibt.
Weitere NILFS-Funktionen sind:
* B-Baum-basiertes Datei- und Inode-Management.
* Sofortige Wiederherstellung nach Systemabstürzen.
* 64-Bit-Datenstrukturen; Unterstützt viele Dateien, große Dateien und viele Festplatten.
* 64-Bit-On-Disk-Zeitstempel, daher kein Jahr-2038-Problem.
* Kernelmodul, das geladen werden kann; Es ist somit keine Neukompilierung des Kernels erforderlich.
* CRC32 Prüfsummen der Daten und Metadaten als Schutz vor Silent Data Corruption.
* Online-Partitionsverkleinerung, d. h. eine NILFS-Partition kann verkleinert werden, wenn sie eingehängt ist.

## Entwicklerteam

Dem ursprünglichen Entwicklerteam gehörten Yoshiji Amagai, Hisashi Hifumi, Ryusuke Konishi, Koji Sato, Seiji Kihara und Satoshi Moriai an.