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 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
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!
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.