NILFS2 – schussfeste Dateisystem für /home

NILFS2 – schussfeste Dateisystem für /home

Wie bekannt ist, tritt ein Problem auf, wenn es auftreten kann. Wahrscheinlich hatte jeder schon einmal den Fall, dass versehentlich eine wichtige Datei gelöscht wurde oder Text in einem Texteditor versehentlich markiert und gelöscht wurde.

Wenn Sie Hoster oder Website-Besitzer sind, sind Sie wahrscheinlich schon mit Hackerangriffen auf Benutzerkonten oder Ihre eigene Website konfrontiert worden. In solchen Fällen ist es wichtig, die Chronologie wiederherzustellen, den Eindringungsweg und die Schwachstelle zu finden, die der Angreifer genutzt hat.

Für die Lösung solcher Probleme ist das Dateisystem NILFS2 bestens geeignet.

Es ist im Linux-Kernel seit 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 die Bereitstellung dieser Funktionalität müssen Sie keine Cron-Skripte einrichten, Snapshots erstellen usw. Das Dateisystem NILFS2 erledigt alles selbst. Es überschreibt niemals alte Daten und schreibt immer in neue Bereiche der Festplatte, sofern ausreichend Speicherplatz verfügbar ist. Vollständig im Einklang mit dem Prinzip Copy-on-Write.

Tatsächlich führt jede Änderung einer Datei zur automatischen Erstellung eines neuen Schnappschusses des Dateisystems, so dass Sie dieses FS als Zeitmaschine verwenden und den Zustand der Dateien zurücksetzen können.

Geschichte

NILFS2 – schussfeste Dateisystem für /homeNILFS2 wurde im Rahmen von Nippon Telegraph and Telephone Corporation, der faktisch staatlichen (sie hält die Mehrheitsanteile) und größten Telekommunikationsgesellschaft Japans, entwickelt. Genauer gesagt in den CyberSpace Laboratories unter der Leitung von Ryusuke Konishi.

Wofür genau es entwickelt wurde, ist unklar, jedoch kann man annehmen, dass ein solches FS, mit seiner Funktionalität als "Zeitmaschine", ideal für die Speicherung von Daten ist, an denen Geheimdienste möglicherweise interessiert sind, um das gesamte Bild von SMS, E-Mails usw. erneut zu rekonstruieren.

NILFS2 ist auch ein potenziell sehr wertvolles Werkzeug für innere Sicherheitsdienste, da es die Wiederherstellung aller gelöschten E-Mails aus der E-Mail-Datenbank ermöglicht und die Fehler von Mitarbeitern aufdecken kann, die versuchen könnten, ihre Dateien durch Löschen oder Ändern zu verschleiern.

Wie man die gesamte Korrespondenzgeschichte verfolgen kannIn Linux-Servern (und genau dort sollte NILFS2 für interne Sicherheitszwecke installiert werden) wird für die Speicherung von E-Mails sehr häufig eine Dateispeicherungsmethode verwendet. Das sogenannte Format Maildir. Man muss nur Courier Mail Server installieren und die Speicherung der E-Mails im Maildir konfigurieren. Ein anderes Format, mbox , besteht aus einer großen Textdatei, die leicht in einzelne Nachrichten aufgeteilt werden kann. Wenn jedoch der Mailserver eine Datenbank verwendet, ermöglicht NILFS2 die Wiederherstellung eines genauen Zeitstempels der Änderungen in der Datenbank und die Wiederherstellung der Datenbank zu einem bestimmten Zeitpunkt. Anschließend müssen die Datenbanktools verwendet werden, um zu überprüfen, was zu diesem Zeitpunkt in der Datenbank war…

Doch irgendetwas ging schief. Entweder hat die japanische Regierung beschlossen, nicht mehr allen zu folgen (á la Yarovaya-Prinzip), oder die Leistung von NILFS2 auf herkömmlichen HDDs war unterirdisch, sodass NILFS2 unter der GPL-Lizenz veröffentlicht wurde und sehr schnell in den Linux-Kernel integriert wurde, da es keine nennenswerten Beanstandungen gegen den von hochqualifizierten Japanern geschriebenen Code gab.

Was ist NILFS2 ähnlich?

Aus der Sicht der Nutzung: wie ein Versionskontrollsystem

SVN . Jeder Checkpoint des FS ist ein Commit, der automatisch ohne Wissen des Benutzers bei jeder Änderung durchgeführt wird: sei es bei der Löschung, der Änderung des Inhalts einer Datei oder der Zugriffsrechte. Jeder Commit hat eine Nummer, die linear steigt.Aus der Sicht des Programmierers: wie ein zirkulärer Puffer. Das Dateisystem sammelt Änderungen und schreibt sie in einen Block von etwa 8 MB (2000 * 4096, wobei 2000 die Anzahl der Elemente im Block und 4096 die Größe einer Speicherseite ist). Die gesamte Festplatte ist in solche Blöcke unterteilt. Die Aufzeichnung erfolgt sequenziell. Wenn der freie Speicherplatz aufgebraucht ist, werden die ältesten Snapshots gelöscht und die Blöcke neu aufgezeichnet.

Die Hauptvorteile von NILFS2

Versionierung!!!

  • Der Wiederherstellungsprozess des FS nach einem Ausfall ist einfach: Beim Booten wird der letzte Block mit einer gültigen Prüfziffer gesucht, und darauf wird der Superblock gesetzt. Dies ist praktisch eine sofortige Operation.
  • Da die Aufzeichnung immer linear erfolgt, kann NILFS2 gute Ergebnisse bei der Nutzung auf SSDs mit langsamen zufälligen Schreibvorgängen erzielen.
  • NILFS2 schont die Ressourcen von SSDs, da der Faktor der Schreibmultiplikation nahezu nicht vorhanden ist.
    • Kann gute Ergebnisse bei der Arbeit mit SSDs mit langsamer zufälliger Schreibgeschwindigkeit zeigen.
    • NILFS2 schont die SSD-Ressourcen, da der Schreibmultiplikationsfaktor praktisch nicht vorhanden ist.
      Genauer gesagt, nicht mehr als 2.Die Sache ist die, dass beim zyklischen Überschreiben der gesamten Festplatte NILFS2 unveränderliche Daten in neue Stücke (Chunks) verschieben wird.

      Wenn wir 10 % unveränderliche Daten auf der Festplatte haben, erhalten wir 10 % Schreibzuwachs bei 1 vollständigem Überschreiben. Und 50 % Zuwachs bei 50 % Auslastung des Gerätes bei 1 vollständigem Überschreiben der Festplatte.

      Der maximale Schreibverstärkungsfaktor ist 2. Das ist sehr wenig, wenn man bedenkt, dass alles sequenziell geschrieben wird. Insgesamt wird die Multiplikation des Schreibens geringer sein als bei einem normalen fragmentierten FS mit einem Sektor von 4096 Byte. (Anregung durch einen Kommentar Kommentar).

  • Potenzielle Einfachheit der Implementierung der Replikation auf einem Remote-NILFS2 FS

NILFS2 für /home

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

Und wer, wenn nicht die Benutzer, macht am häufigsten Fehler? Deshalb ist es, wie man so schön sagt, vom Himmel gesandt, NILFS2 für /home zu verwenden.

Umso mehr, da wir uns mit der weit verbreiteten Verbreitung von SSDs nun keine Sorgen mehr über starke Einbrüche beim Einsatz von CoW-Dateisystemen machen müssen.

Ja, wir können Snapshot-FS (Snapshots) so oft wie nötig in ZFS und BTRFS erstellen, aber es besteht immer das Risiko, dass eine verlorene Dateiänderung zwischen den Snapshots liegt. Und Snapshots müssen ebenfalls verwaltet werden: alte löschen. Bei NILFS2 geschieht dies alles automatisch, buchstäblich alle paar Sekunden.

Ich habe ein logisches Volume mit lvcreate (in der Gruppe der Volumes nvme, dünner Pool thin) erstellt. Ich empfehle, genau auf dem LVM-Volume zu erstellen, da es später leicht erweitert werden kann. Ich empfehle, 50 % freien Speicherplatz auf der Festplatte mit NILFS2 für eine angemessene Tiefe der Versionskontrolle zu haben.

lvcreate -V10G -T nvme/thin -n home

und es in NILFS2 formatiert:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Beginn der Schreibfunktionen für die initialen Daten des Dateisystems auf dem Gerät
      Blockgröße: 4096  Gerät: /dev/nvme/home1  Gerätegröße: 10737418240
Initialisierung des Dateisystems erfolgreich !!

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

Ich habe das sofort nach dem Starten des Computers, vor dem Einloggen in meinen Account, als Benutzer root gemacht. Wenn ich als mein eigener Benutzer eingeloggt wäre, hätten einige Programme Sockets und Dateien in meinem Benutzerverzeichnis /home/user geöffnet, was eine saubere Kopie erschwert hätte. Wie bekannt, befindet sich das Home-Verzeichnis für den Benutzer root normalerweise unter /root, daher werden im Verzeichnis /home keine Dateien geöffnet.

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

Zur letzten Zeile siehe. einen Artikel.

Nun 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 zur Leistungssteigerung, damit bei jedem Zugriff auf Dateien das atime nicht geändert wird. Dann starten wir neu.

Arten von Snapshots in NILFS2.

Ein normaler Snapshot ohne Schutz vor Löschung wird Checkpoint (checkpoint oder Wiederherstellungspunkt) genannt.
Ein Snapshot mit Schutz vor automatischer Löschung wird Snapshot (snapshot) genannt, kurz einfach Snapshot.

Die Ansicht der Checkpoints erfolgt mittels des Befehls lscp.

Die Ansicht der Snapshots (Snapshots) erfolgt mit lscp -s.

Wir können auch jederzeit Snapshots und Checkpoints mit folgendem Befehl erstellen:

mkcp [-s] Gerät

Daten wiederherstellen.

NILFS erlaubt es uns, beliebig viele alte Snapshots parallel zur Arbeit mit dem Hauptzweig des Dateisystems zu mounten. Aber nur im Lese-Modus.

Das ist so eingerichtet. Normale Checkpoints, die NILFS2 erstellt, können jederzeit automatisch gelöscht werden (wenn der Speicherplatz ausgeht oder nach den Regeln von nilfs_cleanerd), daher müssen wir den Checkpoint vor der Montage in einen Snapshot umwandeln oder, auf Russisch gesagt, den Snapshot фиксировать.

chcp ss checkpoint_nummer

Danach können wir den Snapshot, zum Beispiel so, mounten:

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

Danach kopieren wir die wiederherzustellenden Dateien aus dem Snapshot nach /home.
Und anschließend entfernen wir das unlösbarkeit Flag vom Snapshot, damit in Zukunft der automatische Müllsammler veraltete Daten löschen kann:

chcp cp checkpoint_nummer

Tools für NILFS2

Da haben wir ein Problem. Ja, natürlich können wir ein Dateisystem erstellen, seine Größe online ändern, die Liste der Checkpoints anzeigen, diese erstellen und löschen. Das Paket nilfs2-utils bietet ein minimales Gentleman-Set.

Da NTT die Finanzierung eingestellt hat, gibt es keine schnellen, niedrigstufigen Werkzeuge, die eine Historie der Dateiveränderungen anzeigen oder Differenzen zwischen Schnappschüssen erstellen können.

Mein Werkzeug n2u

Um dieses Vakuum zu füllen, habe ich mein Werkzeug n2u, das die Historie der Änderungen einer bestimmten Datei/Verzeichnis anzeigen 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    erste          7079    cp
             1792659  2019-11-25 23:09:05  geändert          7081    cp

Es arbeitet ziemlich schnell mit der gewählten Implementierungsmethode: Es sucht nach Unterschieden zwischen Dateien mit der bisektionalen Methode, indem es schnell Datei/Verzeichnis in verschiedenen Schnappschüssen montiert und vergleicht.

Ein Bereich von Checkpoints kann mit dem Schlüssel -cp CP1:CP2 oder -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Ebenfalls kann man die Unterschiede zwischen Checkpoints für eine bestimmte Datei oder ein Verzeichnis anzeigen:

n2u diff -r cp1:cp2 dateiname

Es ist möglich, die gesamte Chronologie der Änderungen anzuzeigen: alle Unterschiede zwischen den Checkpoints einer bestimmten Datei/Verzeichnis:

n2u blame [-r cp1:cp2] dateiname

Ein Datenintervall wird in diesem Befehl ebenfalls unterstützt.

Ein Aufruf an die Entwickler

Auf Habr gibt es viele Spezialisten. Bitte verbessert NILFS2. Macht Replikation, schnellen niedrigstufigen diff zwischen Revisionen, reflink und andere Funktionen!

Links

Offizielle Website von NILFS.

Repositorys:
NILFS2.
NILFS2 Werkzeuge und Module.

Newsletter:
E-Mail-Newsletter der NILFS2-Entwickler. Identifikator für das Abonnement linux-nilfs.
Archiv des Newsletters.

Anleitung zur Konfiguration von nilfs_cleanerd.
Benchmark-Tests der Leistung 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 Unternehmen Amblin Entertainment und Universal Pictures für die wunderbare Filmreihe „Zurück in die Zukunft“. Das erste Bild des Beitrags stammt aus dem Film „Zurück in die Zukunft – 3“.
  • Unternehmen RUVDS für die Unterstützung und Möglichkeit zur Veröffentlichung in meinem Blog auf Habr.

P.S. Bitte Fehler per privater Nachricht melden. Ich erhöhe dafür die Karma.

Sie können mit NILFS2 experimentieren, indem Sie eine virtuelle Maschine bei RUVDS mit dem Gutscheincode unten bestellen. Für alle neuen Kunden gibt es eine kostenlose Testphase von 3 Tagen.

NILFS2 – schussfeste Dateisystem für /home

Quelle: habr.com

60GB SSD 8Gb DDR4