Dies ist ein Übersichtsartikel zur Beschreibung der Funktionen. Die tatsächliche Verwendung von Hashget (ganz einfach) wird in beschrieben
Vergleich
Nach dem Gesetz des Genres beginne ich gleich mit der Intrige und vergleiche die Ergebnisse:
Datenprobe
ausgepackte Größe
.tar.gz
hashget.tar.gz
WordPress-5.1.1
43 Mb
11 MB (26 %)
155 KB ( 0.3% )
Linux-Kernel 5.0.4
934 Mb
161 MB (20 %)
4.7 MB ( 0.5% )
Debian 9 (LAMP) LXC VM
724 Mb
165 MB (23 %)
4.1 MB ( 0.5% )
Hintergrundinformationen darüber, was ein ideales und effektives Backup sein sollte
Jedes Mal, wenn ich ein Backup einer frisch erstellten virtuellen Maschine erstellte, verfolgte mich das Gefühl, etwas falsch zu machen. Warum erhalte ich ein umfangreiches Backup vom System, wo meine unbezahlbare, unvergängliche Kreativität eine einzeilige index.html mit dem Text „Hallo Welt“ ist?
Warum befinden sich in meinem Backup 16 MB /usr/sbin/mysqld? Ist es wirklich möglich, dass ich in dieser Welt die Ehre habe, diese wichtige Akte zu führen, und wenn ich versage, geht sie für die Menschheit verloren? Höchstwahrscheinlich nein. Es wird auf äußerst zuverlässigen Debian-Servern (deren Zuverlässigkeit und Betriebszeit nicht mit dem verglichen werden kann, was ich bieten kann) sowie in Backups (Millionen davon) anderer Administratoren gespeichert. Müssen wir wirklich mehr als 10 erste Kopien dieser wichtigen Datei erstellen, um die Zuverlässigkeit zu verbessern?
Allgemein tar -c
/ tar -x
. (Mit anderen Worten, dies ist eine verlustfreie Verpackung)
Wie Hashget funktioniert
hashget verfügt über die Konzepte Package und HashPackage und führt mit ihrer Hilfe die Deduplizierung durch.
Paket (Plastiktüte). Eine Datei (normalerweise ein .deb- oder .tar.gz-Archiv), die sicher aus dem Internet heruntergeladen werden kann und von der eine oder mehrere Dateien abgerufen werden können.
HashPackage – eine kleine JSON-Datei, die ein Paket darstellt, einschließlich der Paket-URL und Hash-Summen (sha256) der Dateien daraus. Beispielsweise beträgt die Hashpaketgröße für ein 5-Megabyte-Paket „mariadb-server-core“ nur 6 Kilobyte. Ungefähr tausendmal weniger.
Deduplizierung — Erstellen eines Archivs ohne doppelte Dateien (wenn der Deduplizierer weiß, wo das Originalpaket heruntergeladen werden kann, reduziert er Duplikate aus dem Archiv).
Verpackung
Beim Packen werden alle Dateien aus dem zu packenden Verzeichnis gescannt, ihre Hash-Summen berechnet und wenn die Summe in einem der bekannten HashPackages gefunden wird, werden Metadaten über die Datei (Name, Hash, Zugriffsrechte usw.) gespeichert in einer speziellen Datei .hashget-restore.json, die ebenfalls in das Archiv aufgenommen wird.
Im einfachsten Fall sieht die Verpackung selbst nicht komplizierter aus als Teer:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data
Auspacken
Das Auspacken erfolgt in zwei Schritten. Zuerst das übliche Teer-Auspacken:
tar -xf mybackup.tar.gz -C /path/to/data
dann aus dem Netzwerk wiederherstellen:
hashget -u /path/to/data
Beim Wiederherstellen liest Hashget die Datei .hashget-restore.json, lädt die erforderlichen Pakete herunter, entpackt sie, extrahiert die erforderlichen Dateien und installiert sie in den erforderlichen Pfaden mit den erforderlichen Eigentümern/Gruppen/Berechtigungen.
Schwierigere Dinge
Was oben beschrieben wird, reicht bereits für diejenigen aus, die „es wie Tar wollen, aber mein Debian in 4 Megabyte packen“. Schauen wir uns später komplexere Dinge an.
Indizierung
Wenn hashget überhaupt kein einziges HashPackage hätte, wäre es einfach nicht in der Lage, irgendetwas zu deduplizieren.
Sie können ein HashPackage auch manuell erstellen (einfach: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my
), aber es gibt einen bequemeren Weg.
Um das notwendige Hashpaket zu erhalten, gibt es eine Stufe Indizierung (Es wird automatisch mit dem Befehl ausgeführt --pack
) Und Heuristiken. Bei der Indizierung „füttert“ Hashget jede gefundene Datei an alle verfügbaren Heuristiken, die daran interessiert sind. Heuristiken können dann jedes Paket indizieren, um ein HashPackage zu erstellen.
Beispielsweise liebt die Debian-Heuristik die Datei /var/lib/dpkg/status und erkennt installierte Debian-Pakete. Wenn sie nicht indiziert sind (es wurde kein HashPackage für sie erstellt), lädt sie sie herunter und indiziert sie. Das Ergebnis ist ein sehr schöner Effekt – Hashget dedupliziert Debian-Betriebssysteme immer effektiv, selbst wenn sie über die neuesten Pakete verfügen.
Hinweisdateien
Wenn Ihr Netzwerk einige Ihrer proprietären Pakete oder ein öffentliches Paket verwendet, das nicht in der Hashget-Heuristik enthalten ist, können Sie wie folgt eine einfache Hinweisdatei hashget-hint.json hinzufügen:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}
Als nächstes wird jedes Mal, wenn ein Archiv erstellt wird, das Paket indiziert (sofern dies noch nicht geschehen ist) und die Paketdateien werden aus dem Archiv dedupliziert. Es ist keine Programmierung erforderlich, alles kann von vim aus erledigt und in jedem Backup gespeichert werden. Bitte beachten Sie, dass dank des Hash-Summen-Ansatzes, wenn einige Dateien aus dem Paket lokal geändert werden (z. B. eine Konfigurationsdatei geändert wird), die geänderten Dateien „wie sie sind“ im Archiv gespeichert und nicht abgeschnitten werden.
Wenn einige Ihrer eigenen Pakete regelmäßig aktualisiert werden, die Änderungen jedoch nicht sehr groß sind, können Sie nur auf Hauptversionen hinweisen. In Version 1.0 haben sie beispielsweise einen Hinweis gemacht, der auf mypackage-1.0.tar.gz verweist, und dieser wird vollständig dedupliziert. Dann haben sie Version 1.1 veröffentlicht, die etwas anders ist, aber der Hinweis wurde nicht aktualisiert. Macht nichts. Nur Dateien, die mit Version 1.0 übereinstimmen (wiederhergestellt werden können), werden dedupliziert.
Die Heuristik, die die Hinweisdatei verarbeitet, ist ein gutes Beispiel für das Verständnis des internen Mechanismus der Heuristik. Es verarbeitet nur hashget-hint.json-Dateien (oder .hashget-hint.json mit einem Punkt) und ignoriert alle anderen. Anhand dieser Datei wird ermittelt, welche Paket-URL indiziert werden soll, und das Hashget indiziert sie (sofern dies noch nicht geschehen ist).
HashServer
Es wäre ziemlich arbeitsintensiv, beim Erstellen von Backups eine vollständige Indizierung durchzuführen. Dazu müssen Sie jedes Paket herunterladen, entpacken und indizieren. Daher verwendet Hashget ein Schema mit
HashServer ist ein optionales Element des Schemas, nicht kritisch, es dient ausschließlich der Beschleunigung und Reduzierung der Belastung der Repositorys. Leicht deaktiviert (optional). --hashserver
ohne Parameter). Darüber hinaus können Sie problemlos
Inkrementelle und differenzielle Backups, geplante Obsoleszenz
--submit
und du bist fertig! Das nächste Backup, das Hashget erstellt, enthält keine Dateien aus diesem Archiv.
Dies ist jedoch kein sehr guter Ansatz, da sich herausstellen kann, dass wir beim Wiederherstellen alle Hashget-Backups im gesamten Verlauf abrufen müssen (sofern jede mindestens eine eindeutige Datei enthält). Dafür gibt es einen Mechanismus --expires 2019-06-01
, und nach diesem Datum (ab 00:00 Uhr) wird es nicht mehr verwendet. Das Archiv selbst kann nach diesem Datum nicht mehr gelöscht werden (obwohl Hashget bequem die URLs aller Backups anzeigen kann, die derzeit oder an einem beliebigen Datum fehlerhaft sind/werden).
Wenn wir beispielsweise am 1. ein vollständiges Backup erstellen und es mit einer Lebensdauer bis zum Monatsende indizieren, erhalten wir ein differenzielles Backup-Schema.
Wenn wir neue Backups auf die gleiche Weise indizieren, entsteht ein Schema inkrementeller Backups.
Im Gegensatz zu herkömmlichen Schemata können Sie mit Hashget mehrere zugrunde liegende Quellen verwenden. Die Sicherung wird sowohl durch die Reduzierung von Dateien aus früheren Sicherungen (falls vorhanden) als auch durch öffentliche Dateien (was heruntergeladen werden kann) reduziert.
Wenn wir aus irgendeinem Grund der Zuverlässigkeit der Debian-Ressourcen nicht vertrauen (
Hashget verlässt sich nach IHREM Ermessen nur auf vertrauenswürdige Wiederherstellungsquellen. Es werden diejenigen verwendet, die Sie für zuverlässig halten.
FilePool und Glacier
Mechanismus
$ hashget -u . --pool /tmp/pool
oder
$ hashget -u . --pool http://myhashdb.example.com/
Um einen Pool in einem lokalen Verzeichnis zu erstellen, müssen Sie lediglich ein Verzeichnis erstellen und Dateien hineinwerfen. Hashget selbst findet mithilfe der Hashes, was es benötigt. Um den Pool über HTTP zugänglich zu machen, müssen Sie auf besondere Weise Symlinks erstellen; dies geschieht mit einem Befehl (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool
). HTTP FilePool selbst besteht aus statischen Dateien, sodass jeder einfache Webserver sie bereitstellen kann und die Belastung des Servers nahezu Null ist.
Dank FilePool können Sie nicht nur http(s)-Ressourcen als Basisressourcen nutzen, sondern auch
Nachdem wir das Backup auf den Gletscher hochgeladen haben, erhalten wir seine Upload-ID und verwenden sie als URL. Zum Beispiel:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01
Jetzt basieren neue (differenzielle) Backups auf diesem Backup und sind kürzer. Nachdem tar das Diffbackup entpackt hat, können wir sehen, auf welche Ressourcen es angewiesen ist:
hashget --info /tmp/unpacked/ list
und verwenden Sie einfach ein Shell-Skript, um alle diese Dateien von Glacier in den Pool herunterzuladen und die übliche Wiederherstellung auszuführen: hashget -u /tmp/unpacked –pool /tmp/pool
Ist das Spiel die Kerze wert?
Im einfachsten Fall zahlen Sie einfach weniger für Backups (wenn Sie diese gegen Geld irgendwo in der Cloud speichern). Vielleicht viel, viel weniger.
Aber das ist nicht das Einzige. Aus Quantität wird Qualität. Damit können Sie ein hochwertiges Upgrade Ihres Backup-Schemas erhalten. Da unsere Backups jetzt beispielsweise kürzer sind, können wir nicht mehr monatlich, sondern täglich Backups erstellen. Lagern Sie sie nicht wie bisher sechs Monate, sondern fünf Jahre. Früher haben Sie es im langsamen, aber günstigen „kalten“ Speicher (Glacier) gespeichert, jetzt können Sie es im Hot-Speicher speichern, von wo aus Sie jederzeit schnell ein Backup herunterladen und es innerhalb von Minuten und nicht an einem Tag wiederherstellen können.
Sie können die Zuverlässigkeit des Backup-Speichers erhöhen. Wenn wir sie derzeit in einer Speichereinrichtung speichern, können wir sie durch die Reduzierung des Backup-Volumens in 2-3 Speichereinrichtungen speichern und schmerzlos überleben, wenn einer von ihnen beschädigt wird.
Wie kann man es ausprobieren und mit der Anwendung beginnen?
Gehen Sie zur Gitlab-Seite pip3 install hashget[plugins]
) und lesen Sie einfach den Schnellstart und führen Sie ihn aus. Ich denke, dass es 10-15 Minuten dauern wird, alle einfachen Dinge zu erledigen. Dann können Sie versuchen, Ihre virtuellen Maschinen zu komprimieren, bei Bedarf Hinweisdateien zu erstellen, um die Komprimierung zu verstärken, mit Pools, einer lokalen Hash-Datenbank und einem Hash-Server experimentieren, wenn Sie interessiert sind, und am nächsten Tag sehen, wie groß die inkrementelle Sicherung ist wird über dem von gestern liegen.
Source: habr.com