nilfs2

Juli 30, 2011

Suchworte (13)

  • 1echo ohne zeilenumbruch bash
  • s 7-digit git hash id unique?
  • codes pornoseiten
  • fefe kryptochef
  • fatsort guy meinte wohl fatsort-gui
  • firefox 4 funktionen in website einbauen
  • nilfs2 file image
  • firefox browser heading einstellen
  • zensur e buch
  • ubuntu one spam
  • gps ferfolgen
  • folgergeräte
  • lax u blog
  • wörter mit schuh
  • sowjetisches internet
  • chrome kennenlernen
  • isometrischer block
  • blacklist wörter kinderfilter
  • welche einstellung bei user agent faker
  • worte womit man auf pornoseiten direkt was findet
  • google übersetzer smilies
  • diskordischer kalender
  • ist gps verfassungswidrig
  • www.ins einwohnermeldeamt hacken.de
  • proxyhost für bild mobilportal
  • google chrome ausspionieren blocken
  • script linux nach inaktivität homepage firefox
  • meta suchworte "verschlüsseln"

Kategorien: Suchworte
Tagged: echo Zeilenumbruch Bash git Hash Codes Pornoseiten Fefe Kryptochef fatsort guy Firefox nilfs2 Zensur Buch Ubuntu SPAM GPS Foltergeräte Blog Wörter Schuh sowjetisch Internet Chrome Isometrisch Blacklist Kinderfilter Einstellung User-Agent Faker diskordischer Kalender verfassungswidrig Einwohnermeldeamt Proxy BILD ausspionieren Script linux Inaktivität Homepage Suchworte verschlüsseln

0 Kommentare

März 24, 2008

nilfs2: Ein log-structured file system für Linux

Achtung: Dies ist ein Artikel für technisch Interessierte, die bereits mit der Linux-Shell umgehen können und wissen was sie tun. Alle anderen sollten lieber eines der Standard-Dateisysteme wie ext3, xfs oder ReiserFS verwenden, die bereits im Linux-Kernel enthalten sind.

Nilfs2 ist ein log-structured file system. Das heißt, dass Daten bei bearbeitung nicht überschrieben werden, sondern an eine andere Stelle geschrieben werden, sodass das Original erhalten bleibt.

Ähnlich wie bei Journalling Dateisystemen führt dies dazu, dass im Falle eines Ausfalls keine Daten nur halb geschrieben sind. Aber auch nach der Schreiboperation bleibt der alte Zustand erhalten, und kann zum Beispiel genutzt werden um gelöschte Dateien wiederherzustellen. Dazu nutzt Nilfs2 Checkpoints und Snapshots. Bearbeitet man Dateien, erstellt Nilfs2 ca. alle 30 Sekunden einen Checkpoint, welcher in der Standardeinstellung nach einer Stunde gelöscht wird. Möchte man einen Checkpoint dauerhaft behalten, kann man ihn in einen Snapshot umwandeln, welcher nicht automatisch gelöscht wird.

Installation

Zur Installation lädt man den Quelltext des Kernel-Moduls und der nötigen Programme herunter und kompiliert diese. Für das Modul muss der Kernel selber nicht gepatcht werden, die Kernel-Header Dateien müssen jedoch beim kompilieren vorhanden sein. Danach muss das Modul geladen werden, und schon ist Nilfs2 einsatzbereit.

Einführung

Zunächst erstellen wir ein Testimage:
# dd if=/dev/zero of=nilfs2.image bs=1M count=200 #200MiB Datei erstellen
200+0 Datensätze ein
200+0 Datensätze aus
209715200 Bytes (210 MB) kopiert, 4,8456 Sekunden, 43,3 MB/s
# losetup /dev/loop0 nilfs2.image
# mkfs.nilfs2 /dev/loop0
mkfs.nilfs2 ver 2.0
Start writing file system initial data to the device
Blocksize:4096  Device:/dev/loop0  Device Size:209715200
File system initialization succeeded !!

Und hängen es ein:

# mount -t nilfs2 /dev/loop0 /media/loop
# cd /media/loop
# ls -a

.  ..  .nilfs  .sketch

Die Checkpoints zeigt "lscp" an:

# lscp
CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
1  2008-03-24 21:43:46  cp     -         11          3
# touch test
# ls -a

.  ..  .nilfs  .sketch  test
# lscp
CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
1  2008-03-24 21:43:46  cp     -         11          3
2  2008-03-24 21:45:58  cp     -         11          4

Wenn man möchte, kann man alte Checkpoints mit rmcp entfernen:

# rmcp 1
# lscp

CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
2  2008-03-24 21:45:58  cp     -         11          4

möchte man einen Stand dauerhaft behalten, hilft "mkcp -s" einen neuen Snapshot zu erstellen.

# echo "test1" >test
# mkcp -s
# lscp

CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
2  2008-03-24 21:45:58  cp     -         11          4
3  2008-03-24 21:47:04  cp     -          7          4
4  2008-03-24 21:47:59  ss     -         11          4
# echo "test2" >test
# lscp

CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
2  2008-03-24 21:45:58  cp     -         11          4
3  2008-03-24 21:47:04  cp     -          7          4
4  2008-03-24 21:47:59  ss     -         11          4
5  2008-03-24 21:48:04  cp     -          8          4
6  2008-03-24 21:48:11  cp     -         11          4

Stattdessen hätte man auch mit "chcp ss #num" einen existierenden Checkpoint in einen Snapshot umwandeln können.

Snapshot 4 sollte also in der Datei test den Text "test1" enthalten, wohingegen die Datei momentan "test2" enthält. Probieren wir es aus, indem wir Checkpoint 4 in einen neuen Ordner mounten:

# mount -t nilfs2 -o ro,cp=4 /dev/loop0 /media/loop2
# cd /media/loop2/
# cat test

test1

Tatsächlich, unter "/media/loop2" kann man nun im nur-lesen Modus den alten Snapshot benutzen. Möchte man den Snapshot wieder entfernen, muss man ihn zunächst mit "chcp cp #num" wieder in einen Checkpoint umwandeln:

# lscp |grep "^[ ]*4" #das  grep filtert auf Checkpoints die mit 4 anfangen
4  2008-03-24 21:47:59  ss     -         11          4
# chcp cp 4
# lscp |grep "^[ ]*4"
4  2008-03-24 21:47:59  cp     -         11          4

Nun wird der Snapshot entweder automatisch gelöscht werden, oder man kann ihn wie jeden anderen Checkpoint mit rmcp entfernen.

Checkpoints löschen

Nilfs2 nutzt einen Daemon, der via /etc/nilfs_cleanerd.conf konfiguriert wird um alte Checkpoints zu löschen. In der Datei kann man einstellen, wie lange Checkpoints aufgehoben werden(1 Stunde als Default), und wieviele Chunks in welchem Zeitabstand wieder freigegeben werden sollen.

Vorteile

Nilfs2 spielt seine Vorteile vor allem im Backupbereich aus. So kann zum Beispiel rsync-Backup mit Nilfs2 ohne Hardlinks realisiert werden, wodurch das Löschen von alten Backups beschleunigt wird. Liegt nicht nur das Backup auf dem Nilfs2, sondern die ganzen Daten, können ausversehen gelöscht Dateien aus einem Checkpoint wiederhergestellt werden, und es sind höchstens die Änderungen der letzten 30 Sekunden verloren. Eine komplette Datensicherung wäre mit einer Kombination von RAID-1(Sicherheit gegen Festplattenausfall) und Nilfs2(Sicherheit gegen versehentliches Löschen) denkbar.

Nachteile

Nilfs2 ist nicht im offziellem Kernel, was garantieren würde, dass es auch in Zukunft noch verfügbar ist.[UPDATE Seit Linux 2.6.30 ist Nilfs2 Bestandteil des offiziellen Kernels] Außerdem fehlen noch einige Dateisystemfunktionen. Weiterhin ist die Stabilität und Performance noch nicht so gut untersucht wie bei den verbreiteten Dateisystemen. Nilfs 2.0.0 kann noch kein NFS, was in 2.0.1 jedoch inzwischen möglich ist. Außerdem ergibt sich ein Problem, wenn man das Dateisystem komplett füllt, dass selbst nach dem Löschen der Datei der Platz nicht freigegeben wird, da die Datei noch in diversen Checkpoints weiterexistiert. Auch wenn diese Checkpoints gelöscht werden wird der Platz erst freigegeben, wenn die protection_period aus der Konfiguration erreicht wird. Das führt unter Umständen schoneinmal dazu, dass man ca. 1 Stunde keine neuen Datei mehr erstellen kann.

Workaround: kurze protection_period (dann aber snapshots für jeden Stand den man noch braucht!) oder darauf achten, dass das Dateisystem nie komplett gefüllt wird.

Sicheres Löschen mit Tools wie shred funktioniert aufgrund der Wirkungsweise eines log-structured FS leider nicht. Umgekehrt werden gelöschte Daten, sobald sie in keinem Checkpoint mehr enthalten sind vermutlich recht häufig durch das anlegen neuer Checkpoints überschrieben, wenn das FS aktiv genutzt wird.

Vorsicht bei 2.0.1

Nilfs2 2.0.1 erkennt Dateisysteme von 2.0.0 nicht. Dies liegt wohl nicht an einer Disk-Layout Änderungen, sondern ist ein Fehler. 2.0.1 Images laufen mit 2.0.1 jedoch problemlos.

Fazit

Momentan teste ich Nilfs2 2.0.0, und warte auf den Bugfix für 2.0.1, damit es mein Dateisystem wieder erkennt. Die Performance ist bisher super, und während des Betriebs von 2.0.0 hatte ich keinerlei Probleme, außer dass NFS noch nicht implementiert war. Es bleibt zu hoffen, dass Regressionen wie bei 2.0.1 eine Ausnahme bleiben.

[UPDATE] Inzwischen ist nilfs2 bei 2.0.4 (utils 2.0.5) angekommen, und der 2.0.1 Bug ist beseitigt, NFS wurde nachgerüstet und im 2.0.4 Release wurde ein von mir gemeldeter Bug beim löschen von Dateien die mehrere Gigabyte groß sind beseitigt. Auf der Backup-Partition ist nilfs2 jetzt schon länger ohne Probleme im Einsatz. Mit Rsync werden die Dateien auf den aktuellen Stand gebracht, und dann wird ein Snapshot erstellt, welcher den Stand dauerhaft sichert.

Kategorien: Linux OpenSource Software
Tagged: Filesystem nilfs Technik nilfs2 Dateisystem

1 Kommentar