
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 wurde im Rahmen von , der faktisch staatlichen (sie hält die Mehrheitsanteile) und größten Telekommunikationsgesellschaft Japans, entwickelt. Genauer gesagt in den CyberSpace Laboratories unter der Leitung von .
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 . Man muss nur installieren und die Speicherung der E-Mails im Maildir konfigurieren. Ein anderes Format, , 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 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 ).
- 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 homeund 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. .
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ätDaten 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_nummerDanach 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_nummerTools 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 , das die Historie der Änderungen einer bestimmten Datei/Verzeichnis anzeigen kann:
n2u log dateinameDie 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 cpEs 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 dateinameEs ist möglich, die gesamte Chronologie der Änderungen anzuzeigen: alle Unterschiede zwischen den Checkpoints einer bestimmten Datei/Verzeichnis:
n2u blame [-r cp1:cp2] dateinameEin 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
.
Repositorys:
.
.
Newsletter:
. Identifikator für das Abonnement linux-nilfs.
.
.
.
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 . Das erste Bild des Beitrags stammt aus dem Film „Zurück in die Zukunft – 3“.
- Unternehmen 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 mit dem Gutscheincode unten bestellen. Für alle neuen Kunden gibt es eine kostenlose Testphase von 3 Tagen.
Quelle: habr.com
