NILFS2 — eine unverwüstliche Dateisystem für /home

NILFS2 — eine unverwüstliche Dateisystem für /home

Wie bekannt ist, wenn ein Problem auftreten kann, wird es auch auftreten. Jeder hatte wahrscheinlich schon einmal die Erfahrung, versehentlich eine wichtige Datei zu löschen oder in einem Texteditor Text durch falsches Markieren und Löschen zu verlieren.

Wenn Sie ein Hoster oder Website-Besitzer sind, hatten Sie wahrscheinlich schon mit Hackerangriffen auf Benutzerkonten oder Ihre eigene Website zu kämpfen. In solchen Fällen ist es wichtig, den Verlauf wiederherzustellen, den Zugang und die Schwachstelle, die der Angreifer genutzt hat, zu identifizieren.

Für solche Probleme ist das NILFS2-Dateisystem eine hervorragende Lösung.

Es ist im Linux-Kernel ab Version 2.6.30 enthalten.

Das Besondere an diesem Dateisystem ist, dass es einem Versionskontrollsystem ähnelt: Sie können den Zustand des Systems jederzeit zurücksetzen und sehen, wie es vor einiger Zeit war.

Für diese Funktionalität müssen Sie keine Cron-Skripte einrichten oder Snapshots erstellen. Das Dateisystem NILFS2 erledigt das alles selbst. Es überschreibt niemals alte Daten und schreibt immer in neue Bereiche der Festplatte, wenn genügend Speicherplatz zur Verfügung steht. Dies geschieht ganz im Einklang mit dem Copy-on-Write-Prinzip.

Jede Änderung an einer Datei führt automatisch zur Erstellung eines neuen Snapshots des Dateisystems, sodass Sie dieses Dateisystem als Zeitmaschine verwenden können, um den Zustand der Dateien zurückzusetzen.

Geschichte

NILFS2 — eine unverwüstliche Dateisystem für /homeNILFS2 wurde entwickelt von Nippon Telegraph and Telephone Corporation, einer faktisch staatlichen (sie hat die Kontrolle) und größten Telekommunikationsgesellschaft Japans. Genauer gesagt in den CyberSpace Laboratories unter der Leitung von Ryusuke Konishi.

Es ist unklar, wofür genau es entwickelt wurde, aber es kann davon ausgegangen werden, dass ein solches Dateisystem mit seiner „Zeitmaschinen“-Funktion ideal für die Speicherung von Daten ist, die möglicherweise für Spezialdienste von Interesse sein könnten, um das gesamte Bild von SMS, E-Mails usw. erneut zu rekonstruieren...

NILFS2 ist ebenfalls ein potenziell sehr wertvolles Werkzeug für interne Sicherheitsdienste, da es die Wiederherstellung aller gelöschten E-Mails in der E-Mail-Datenbank ermöglicht und Missbrauch von Mitarbeitern aufdecken kann, die versuchen könnten, ihre Spuren zu verwischen, indem sie ihre Dateien löschen oder ändern.

Wie kann man die gesamte Kommunikationshistorie nachverfolgen?In Linux-Servern (wohin NILFS2 für interne Sicherheitszwecke installiert werden sollte) wird häufig eine Dateispeicherungsmethode für E-Mails verwendet. Das sogenannte Format Maildir. Es reicht aus, den Courier Mail Server zu installieren und die Speicherung der E-Mails im Maildir zu konfigurieren. Ein weiteres Format mbox stellt eine große Textdatei dar, die einfach in einzelne Nachrichten geparsed werden kann.

Falls der Mailserver eine Datenbank verwendet, ermöglicht NILFS2 die Wiederherstellung des genauen Zeitstempels der Änderungen in der Datenbank und die Möglichkeit, die Datenbank zu einem beliebigen Zeitpunkt wiederherzustellen. Danach müssen die Datenbank-Tools verwendet werden, um zu sehen, was zu diesem Zeitpunkt vorhanden war...

Allerdings ist etwas schiefgelaufen. Möglicherweise hat die japanische Regierung entschieden, nicht mehr alle zu überwachen (ähnlich dem Jarov-Prinzip), oder die Leistung von NILFS2 auf herkömmlichen HDDs war unterirdisch, sodass NILFS2 unter der GPL-Lizenz veröffentlicht wurde und schnell in den Linux-Kernel aufgenommen wurde, da die Entwickler des Linux-Kernels keine wesentlichen Beanstandungen an dem von hochqualifizierten Japanern geschriebenen Code hatten.

Wie sieht NILFS2 aus?

Aus der Sicht der Nutzung: wie ein Versionskontrollsystem SVN. Jeder Checkpoint des Dateisystems ist ein Commit, der automatisch ohne Wissen des Benutzers bei jeder Änderung erfolgt: sei es das Löschen, Ändern des Inhalts einer Datei oder Ändern der Zugriffsrechte. Jeder Commit hat eine fortlaufende Nummer.

Aus der Sicht eines Programmierers: wie ein zirkulärer Puffer. Das Dateisystem speichert Änderungen und schreibt sie in Blöcke von etwa 8 MB (2000 * 4096, wobei 2000 die Anzahl der Elemente im Block darstellt und 4096 die Seitenhöhe ist). Die gesamte Festplatte ist in solche Chunks unterteilt. Die Aufzeichnung erfolgt sequentiell. Wenn der freie Speicherplatz erschöpft ist, werden die ältesten Schnappschüsse gelöscht und die Chunks überschrieben.

Die Hauptvorteile von NILFS2

  • Versionierung!!!
  • Die Wiederherstellung des Dateisystems nach einem Ausfall ist einfach: Beim Booten wird der letzte Chunk mit einer gültigen Prüfziffer gesucht und der Superblock wird darauf gesetzt. Dies ist nahezu ein sofortiger Vorgang.
  • Da die Schreibvorgänge immer linear erfolgen, gilt:
    • es können gute Ergebnisse bei SSDs mit langsamen, zufälligen Schreibvorgängen erzielt werden.
    • NILFS2 schont die SSD-Ressourcen, da der Schreibmultiplikationsfaktor nahezu nicht vorhanden ist.
      Genauer gesagt, beträgt er nicht mehr als 2.Der Punkt ist, dass NILFS2 bei zyklischen Schreibvorgängen des gesamten Laufwerks unveränderliche Daten in neue Chunks überträgt.

      Wenn wir 10 % unveränderlicher Daten auf dem Laufwerk haben, erzeugen wir einen 10 % höheren Schreibaufwand bei einer vollständigen Schreibvorgabe. Bei 50 % Belegung des Gerätes ergibt das einen 50 % höheren Aufwand bei einer vollständigen Schreibvorgabe des Laufwerks.

      Der maximale Schreibmultiplikationsfaktor beträgt 2. Das ist sehr gering, wenn man bedenkt, dass alles sequenziell geschrieben wird. Insgesamt wird die Schreibmultiplikation geringer sein als bei einem herkömmlichen fragmentierten Dateisystem mit einer 4096-Byte-Sektorenstruktur. (Angeregt durch Kommentar).

  • Potenzielle Einfachheit der Implementierung der Replikation auf ein entferntes NILFS2-Dateisystem

NILFS2 für /home

In Unix-ähnlichen Betriebssystemen gibt es in der Regel einen Ordner /home, in dem die Benutzerdaten gespeichert werden. Verschiedene Programme bewahren in diesem Ordner ihre benutzerspezifischen Einstellungen auf.

Wer könnte häufiger Fehler machen als die Benutzer selbst? Daher ist es nur logisch, NILFS2 für /home zu verwenden.

Vor allem, da wir mit der weitverbreiteten Nutzung von SSDs nun keine Angst mehr vor erheblichen Leistungseinbußen bei der Verwendung von CoW-Dateisystemen haben müssen.

Ja, wir können sowohl in ZFS als auch in BTRFS so oft wie nötig Snapshots erstellen, aber es gibt immer das Risiko, dass eine verlorene Dateiänderung zwischen den Snapshots liegt. Außerdem müssen Snapshots verwaltet werden: Alte müssen gelöscht werden. In NILFS2 geschieht dies automatisch, buchstäblich alle paar Sekunden.

Ich habe ein logisches Volume mit lvcreate (in der Volume-Gruppe nvme, dünner Pool thin) erstellt. Ich empfehle, dies auf einem LVM-Volume zu tun, da es später leicht erweitert werden kann. Ich empfehle, 50 % freien Speicherplatz auf der Festplatte mit NILFS2 für eine respektable Versionierungstiefe zu haben.

lvcreate -V10G -T nvme/thin -n home

und habe es in NILFS2 formatiert:

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
Beginne mit dem Schreiben der initialen Daten für das Dateisystem auf das Gerät
      Blockgröße: 4096  Gerät: /dev/nvme/home1  Gerätegröße: 10737418240
Die Initialisierung des Dateisystems war erfolgreich!!

Danach müssen alle Daten vom aktuellen /home kopiert werden.

Ich habe dies sofort nach dem Hochfahren des Computers gemacht, bevor ich mich in mein Konto angemeldet habe, als Benutzer root. Hätte ich mich mit meinem Benutzerkonto angemeldet, hätten einige Programme Sockets und Dateien im Ordner meines Benutzers /home/user geöffnet, was eine saubere Kopie erschwert hätte. Wie bekannt, befindet sich der Heimatordner für den Benutzer root normalerweise unter /root, daher werden im /home-Bereich keine Dateien geöffnet.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

Zur letzten Zeile siehe. den Artikel.

Als nächstes bearbeiten wir /etc/fstab, in dem das Dateisystem für /home gemountet wird, auf

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

Option noatime ist notwendig, um die Leistung zu verbessern, damit bei jedem Zugriff auf Dateien die atime nicht verändert wird. Anschließend starten wir neu.

Arten von Snapshots in NILFS2.

Ein normaler Snapshot ohne Löschschutz wird Checkpoint (Checkpoint oder Wiederherstellungspunkt) genannt.
Ein Snapshot mit Schutz vor automatischem Löschen wird Snapshot genannt, im Folgenden einfach Snapshot.

Die Ansicht von Checkpoints erfolgt über den Befehl lscp

Ansicht von Snapshots: lscp -s

Wir können jederzeit Snapshots und Checkpoints erstellen mit:

mkcp [-s] device

Daten wiederherstellen.

NILFS ermöglicht es uns, beliebig viele alte Snapshots parallel zur Hauptzweigung des Dateisystems im Lesemodus zu mounten.

Alles ist so eingerichtet. Gewöhnliche Checkpoints, die NILFS2 erstellt, können jederzeit automatisch gelöscht werden (wenn der Speicherplatz erschöpft ist oder gemäß den Regeln von nilfs_cleanerd), daher müssen wir den Checkpoint vor dem Mounten in einen Snapshot umwandeln oder, um es auf Russisch zu sagen, festhalten.

chcp ss checkpoint_nummer

Danach können wir den Snapshot beispielsweise so mounten:

mount -t nilfs2 -r -o cp=checkpoint_nummer /dev/nvme/home /mnt/nilfs/checkpoint_nummer

Anschließend kopieren wir die wiederherzustellenden Dateien aus dem Snapshot nach /home.
Und später setzen wir das Unlöschbarkeitsflag des Snapshots zurück, damit der automatische Müllsammler veraltete Daten in Zukunft löschen kann:

chcp cp checkpoint_nummer

Hilfsprogramme für NILFS2

Da gibt es ein Problem. Ja, wir können Dateisysteme erstellen, deren Größe online ändern, eine Liste der Checkpoints einsehen sowie diese erstellen und löschen. Das Paket nilfs2-utils bietet ein minimales Set an Funktionen.

Da NTT die Finanzierung eingestellt hat, gibt es keine schnellen, niedrigstufigen Werkzeuge, die es ermöglichen, die Änderungsverläufe von Dateien abzurufen und Differenzen zwischen Snapshots zu erstellen.

Mein Tool n2u

Um diese Lücke zu füllen, habe ich mein Tool n2u, das die Änderungsverläufe einer bestimmten Datei/Verzeichnis ausgeben kann:

n2u log dateiname

Die Ausgabe sieht ungefähr so aus:

          CHECKPOINT        DATUM          UHRZEIT       TYP           GRÖSSE  MODUS
             1787552  2019-11-24 22:08:00    first          7079    cp
             1792659  2019-11-25 23:09:05  geändert        7081    cp

Es funktioniert ziemlich schnell für die gewählte Implementierung: Es sucht nach Unterschieden zwischen den Dateien mittels Bisection, indem es schnell Dateien/Verzeichnisse in verschiedenen Snapshots einbindet und vergleicht.

Es kann einen Bereich von Checkpoints mit dem Schalter -cp CP1:CP2 oder -cp {JAHR-MM-TAG}:{JAHR-MM-TAG}.

Außerdem kann man die Unterschiede zwischen Checkpoints für eine bestimmte Datei oder ein Verzeichnis einsehen:

n2u diff -r cp1:cp2 dateiname

Die gesamte Änderungschronologie kann angezeigt werden: alle Unterschiede zwischen den Checkpoints einer bestimmten Datei/Verzeichnis:

n2u blame [-r cp1:cp2] dateiname

Der Datumsbereich wird in diesem Befehl ebenfalls unterstützt.

Aufruf an die Entwickler

Auf Habr gibt es viele Fachleute. Bitte, verbessert NILFS2. Macht Replikation, ein niedertiefiger schneller Diff zwischen Revisionen, Reflink und andere Features!

Links

Offizielle Webseite von NILFS.

Repositorys:
NILFS2.
NILFS2-Tools und -Module.

Mailinglisten:
E-Mail-Verteiler der NILFS2-Entwickler. Identifikator zum Abonnieren ist linux-nilfs.
Archiv der Mailingliste.

Einrichtungsanleitung für nilfs_cleanerd.
Benchmark-Tests der Performance von EXT4, Btrfs, XFS & NILFS2.

Danksagungen:

  • An die Entwickler von NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi und Satoshi Moriai. Weitere wichtige Mitwirkende sind: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Den Firmen Amblin Entertainment und Universal Pictures für die großartige Filmreihe «Zurück in die Zukunft». Das erste Bild des Beitrags stammt aus dem Film «Zurück in die Zukunft – Teil 3».
  • Firmen RUVDS für die Unterstützung und die Möglichkeit, in ihrem Blog auf Habr zu veröffentlichen.

P.S. Bitte sendet entdeckte Fehler privat. Ich erhöhe dafür die Karma.

Experimentieren Sie mit NILFS2, indem Sie eine virtuelle Maschine bei RUVDS mit dem folgenden Gutschein bestellen. Für alle neuen Kunden gibt es eine kostenlose Testphase von 3 Tagen.

NILFS2 — eine unverwüstliche Dateisystem für /home

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster