NILFS2 – ein kugelsicheres Dateisystem für /home

NILFS2 – ein kugelsicheres Dateisystem für /home

Wie Sie wissen, wird es auf jeden Fall passieren, wenn es zu Problemen kommen kann. Wahrscheinlich hat jeder schon einmal Fälle gehabt, in denen eine kürzlich wichtige Datei versehentlich gelöscht wurde oder Text versehentlich in einem Texteditor ausgewählt und zerstört wurde.

Wenn Sie Hoster oder Websitebesitzer sind, sind Sie wahrscheinlich schon einmal Opfer von Hackerangriffen auf Benutzerkonten oder Ihre Website geworden. In solchen Fällen ist es wichtig, die Chronologie wiederherzustellen, die Eintrittsmethode und die vom Angreifer genutzte Schwachstelle zu ermitteln.

Das NILFS2-Dateisystem eignet sich perfekt zur Lösung solcher Probleme.

Es ist seit Version 2.6.30 im Linux-Kernel vorhanden.

Die Besonderheit dieses Dateisystems besteht darin, dass es einem Versionskontrollsystem ähnelt: Sie können den Zustand des Systems jederzeit zurücksetzen und sehen, wie es vor einiger Zeit war.

Um diese Funktionalität bereitzustellen, müssen Sie keine Cron-Skripte konfigurieren, keine Snapshots erstellen usw. Das NILFS2-Dateisystem erledigt dies ganz von alleine. Es überschreibt niemals alte Daten und schreibt immer in neue Bereiche der Festplatte, wenn genügend freier Speicherplatz vorhanden ist. Ganz nach dem Copy-on-Write-Prinzip.

Tatsächlich erstellt jede Änderung an einer Datei automatisch einen neuen Snapshot des Dateisystems, sodass Sie diesen FS als Zeitmaschine verwenden und den Status von Dateien zurückspulen können.

Geschichte

NILFS2 – ein kugelsicheres Dateisystem für /homeNILFS2 wurde in den Tiefen von entwickelt Nippon Telegraph and Telephone CorporationTatsächlich handelt es sich um das staatliche (mit einer Mehrheitsbeteiligung) und größte Telekommunikationsunternehmen Japans. Genauer gesagt in den CyberSpace Laboratories unter der Leitung Ryusuke Konishi.

Wofür genau es entwickelt wurde, ist unbekannt, es kann jedoch davon ausgegangen werden, dass ein solches FS mit seiner „Zeitmaschinen“-Funktionalität ideal für die Speicherung von Daten geeignet ist, in die die Geheimdienste möglicherweise eintauchen möchten, um das Gesamtbild wiederzugeben SMS, E-Mails usw....

NILFS2 ist möglicherweise auch ein sehr wertvolles Tool für interne Sicherheitsdienste, da es Ihnen ermöglicht, alle gelöschten Briefe in der E-Mail-Datenbank wiederherzustellen und so die Fehler von Mitarbeitern aufzudecken, die anschließend möglicherweise versuchen, sie durch Löschen oder Ändern ihrer Dateien zu verschleiern.

Wie können Sie Ihren gesamten Korrespondenzverlauf verfolgen?Auf Linux-Servern (und hier sollte NILFS2 aus internen Sicherheitsgründen installiert werden) wird zum Speichern von E-Mail-Nachrichten sehr häufig die Dateimethode zum Speichern von E-Mails verwendet. Das sogenannte Format maildir. Genug zum Anbringen Kurier Mail Server und konfigurieren Sie den E-Mail-Speicher in Maildir. Anderes Format mbox ist eine große Textdatei, die leicht in einzelne Nachrichten zerlegt werden kann.

Wenn der Mailserver eine Datenbank verwendet, ermöglicht NILFS2 die Wiederherstellung des genauen Zeitpunkts von Datenbankänderungen und die Möglichkeit, die Datenbank zu jedem dieser Zeitpunkte wiederherzustellen. Und dann müssen Sie Datenbanktools verwenden, um zu sehen, was zu diesem Zeitpunkt darin enthalten war ...

Allerdings ist etwas schief gelaufen. Entweder hat die japanische Regierung ihre Meinung zur Überwachung aller geändert (nach dem Yarovaya-Prinzip), oder die Leistung von NILFS2 auf herkömmlichen Festplatten erwies sich als unterdurchschnittlich, und NILFS2 wurde unter der GPL-Lizenz veröffentlicht und gelangte seitdem sehr schnell in den Linux-Kernel Es gab keine besonderen Beschwerden über den hochqualifizierten japanischen Code, den die Entwickler des Linux-Kernels nicht hatten.

Wie ist NILFS2?

Aus Nutzungssicht: auf einem Versionskontrollsystem SVN. Bei jedem FS-Checkpoint handelt es sich um einen Commit, der bei jeder Änderung automatisch und ohne Wissen des Benutzers durchgeführt wird: sei es eine Löschung, eine Änderung des Inhalts einer Datei oder eine Änderung der Zugriffsrechte. Jeder Commit hat eine Zahl, die linear ansteigt.

Aus der Sicht eines Programmierers: ein Ringpuffer. 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 der Speicherseite ist). Die gesamte Festplatte ist in solche Blöcke unterteilt. Die Aufnahme erfolgt sequentiell. Wenn der freie Speicherplatz erschöpft ist, werden die ältesten Snapshots gelöscht und die Chunks überschrieben.

Grundlegende NILFS2-Goodies

  • Versionierung!!!
  • Die Vorgehensweise zur Wiederherstellung eines Dateisystems nach einem Ausfall ist einfach: Beim Laden wird nach dem letzten Chunk gesucht, der die richtige Prüfsumme hat, und darauf ein Superblock installiert. Dies ist ein fast sofortiger Vorgang.
  • Aufgrund der Tatsache, dass die Aufzeichnung immer linear verläuft, gilt:
    • kann gute Ergebnisse zeigen, wenn es auf einer SSD mit langsamen zufälligen Schreibvorgängen läuft.
    • NILFS2 spart SSD-Ressourcen, da es fast keinen Schreibmultiplikationsfaktor gibt.
      Genauer gesagt sind es nicht mehr als 2.Tatsache ist, dass NILFS2 beim zyklischen Neuschreiben der gesamten Festplatte unveränderliche Daten in neue Teile (Chunks) überträgt.

      Wenn wir 10 % der unveränderlichen Daten auf der Festplatte haben, erhalten wir bei einem vollständigen Neuschreiben eine Schreibsteigerung von 10 %. Nun, eine Steigerung um 1 % bei 50 % Auslastung des Geräts für 50 vollständiges Neubeschreiben der Festplatte.

      Der maximale Schreibgewinn beträgt 2. Das ist sehr niedrig, wenn man bedenkt, dass alles sequentiell geschrieben wird. Im Allgemeinen ist die Schreibanimation geringer als bei einem herkömmlichen fragmentierten Dateisystem mit einem 4096-Byte-Sektor. (Gedanke inspiriert von Kommentar).

  • Mögliche einfache Implementierung der Replikation auf ein Remote-NILFS2-FS

NILFS2 für /home

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

Und wer, wenn nicht der Nutzer, macht am häufigsten Fehler? Daher hat Gott selbst, wie man sagt, die Verwendung von NILFS2 auf /home angeordnet.

Darüber hinaus müssen wir uns mit der weit verbreiteten Verwendung von SSDs keine Sorgen mehr über schwerwiegende Beeinträchtigungen bei der Verwendung von CoW-Dateisystemen machen.

Ja, wir können FS-Snapshots in ZFS und BTRFS so oft erstellen, wie wir möchten, aber es besteht immer das Risiko, dass eine verlorene Dateiänderung zwischen den Snapshots landet. Und die Bilder müssen noch verwaltet werden: Alte müssen gelöscht werden. In NILFS2 geschieht dies alles automatisch, buchstäblich alle paar Sekunden.

Ich habe mit lvcreate ein logisches Volume erstellt (in der NVME-Volumegruppe, Thin Pool Thin). Ich empfehle, es auf dem LVM-Volume zu erstellen, da es später problemlos erweitert werden kann. Für eine angemessene Versionstiefe empfehle ich, mit NILFS50 2 % freien Speicherplatz zu haben.

lvcreate -V10G -T nvme/thin -n home

und formatierte es in NILFS2:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Start writing file system initial data to the device
      Blocksize:4096  Device:/dev/nvme/home1  Device Size:10737418240
File system initialization succeeded !!

Danach müssen Sie alle Daten aus dem aktuellen /home kopieren.

Ich habe dies unmittelbar nach dem Booten des Computers getan, bevor ich mich als Root-Benutzer bei meinem Konto angemeldet habe. Wenn ich mich als mein Benutzer anmelden würde, würden einige Programme Sockets und Dateien im Ordner /home/user meines Benutzers öffnen, was eine saubere Kopie erschweren würde. Wie Sie wissen, befindet sich der Home-Ordner für den Root-Benutzer normalerweise im /root-Pfad, sodass auf der /home-Partition keine Dateien geöffnet werden.

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

Zur letzten Zeile siehe Artikel.

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

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

Option noatime erforderlich, um die Leistung zu verbessern, damit sich die Zeit nicht bei jedem Dateizugriff ändert. Als nächstes starten wir neu.

Arten von Bildern in NILFS2.

Ein normaler Snapshot ohne Immunität gegen Löschung wird als Prüfpunkt oder Wiederherstellungspunkt bezeichnet.
Ein Snapshot, der vor dem automatischen Löschen geschützt ist, wird Snapshot genannt, dann einfach Snapshot.

Das Anzeigen von Prüfpunkten erfolgt mit dem Befehl lscp

Snapshots anzeigen lscp -s

Snapshots und Checkpoints können wir jederzeit selbst erstellen mit:

mkcp [-s] устройство

Wir stellen Daten wieder her.

Mit NILFS können wir so viele alte Snapshots bereitstellen, wie wir möchten, parallel zur Arbeit mit dem Haupt-FS-Zweig. Aber nur im Lesemodus.

Alles ist so arrangiert. Regelmäßige Prüfpunkte, die NILFS2 erstellt, können jederzeit automatisch gelöscht werden (wenn der Speicherplatz aufgebraucht ist oder gemäß den nilfs_cleanerd-Regeln). Daher müssen wir vor der Installation den Prüfpunkt in einen Snapshot umwandeln oder, auf Russisch, den Snapshot erfassen.

chcp ss номер_чекпоинта

Danach können wir den Snapshot beispielsweise so mounten:

mount -t nilfs2 -r -o cp=номер_чекпоинта /dev/nvme/home /mnt/nilfs/номер_чекпоинта

Anschließend kopieren wir die wiederhergestellten Dateien aus dem Snapshot nach /home.
Und anschließend entfernen wir das Undeletable-Flag aus dem Snapshot, damit der automatische Garbage Collector in Zukunft veraltete Daten löschen kann:

chcp cp номер_чекпоинта

Dienstprogramme für NILFS2

Aber das ist das Problem. Ja, natürlich können wir ein Dateisystem erstellen, seine Größe online ändern, die Liste der Challengepoints einsehen, erstellen und löschen. Das Paket nilfs2-utils bietet ein minimales Gentleman-Set.

Da NTT seine Finanzierung gekürzt hat, gibt es keine schnellen Low-Level-Dienstprogramme, mit denen Sie den Verlauf von Dateiänderungen anzeigen oder zwischen Snapshots unterscheiden können.

Mein N2U-Dienstprogramm

Um dieses Vakuum zu füllen, habe ich geschrieben Ihr N2U-Dienstprogramm, das den Verlauf der Änderungen an einer bestimmten Datei/einem bestimmten Verzeichnis anzeigen kann:

n2u log filename

Die Ausgabe ist in etwa so:

          CHECKPOINT        DATE     TIME     TYPE          SIZE  MODE
             1787552  2019-11-24 22:08:00    first          7079    cp
             1792659  2019-11-25 23:09:05  changed          7081    cp

Für die gewählte Implementierungsmethode funktioniert es recht schnell: Es sucht mithilfe der Halbierungsmethode nach Unterschieden zwischen Dateien und mountet und vergleicht die Datei/das Verzeichnis schnell in verschiedenen Snapshots.

Mit der Taste können Sie eine Reihe von Kontrollpunkten festlegen -cp CP1:CP2 oder -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Sie können auch den Unterschied zwischen Prüfpunkten für eine bestimmte Datei oder ein bestimmtes Verzeichnis erkennen:

n2u diff -r cp1:cp2 filename

Sie können die gesamte Chronologie der Änderungen anzeigen: alle Unterschiede zwischen den Prüfpunkten einer bestimmten Datei/eines bestimmten Verzeichnisses:

n2u blame [-r cp1:cp2] filename

Das Datumsintervall in diesem Befehl wird ebenfalls unterstützt.

Ein Schrei an die Entwickler

Es gibt viele Spezialisten für Habré. Bitte beenden Sie NILFS2. Machen Sie Replikation, schnelle Differenzierung auf niedriger Ebene zwischen Revisionen, Reflink und andere Extras!

Referenzen

Offizielle NILFS-Website.

Repositorys:
NILFS2.
NILFS2-Dienstprogramme und -Module.

Newsletter:
E-Mail-Newsletter für NILFS2-Entwickler. ID für das Linux-Nilfs-Abonnement.
Newsletter-Archiv.

nilfs_cleanerd Setup-Anleitung.
Benchmarking von EXT4-, Btrfs-, XFS- und NILFS2-Leistungstests.

Vielen Dank:

  • NILFS2-Entwickler: 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.
  • An Amblin Entertainment und Universal Pictures für eine wundervolle Filmreihe. "Zurück in die Zukunft". Das erste Bild des Beitrags stammt aus dem Film „Zurück in die Zukunft 3“.
  • Firmen RUVDS für Ihre Unterstützung und die Möglichkeit, in Ihrem Blog auf Habré zu veröffentlichen.

PS Bitte senden Sie alle Fehler, die Ihnen auffallen, in einer privaten Nachricht. Dafür erhöhe ich mein Karma.

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

NILFS2 – ein kugelsicheres Dateisystem für /home

Source: habr.com

Kommentar hinzufügen