So erstellen Sie inkrementelle Sicherungen mit RSYNC unter Linux

So erstellen Sie inkrementelle Sicherungen mit RSYNC unter Linux

In früheren Artikeln haben wir bereits darüber gesprochen, wie wir mit RSYNC lokale und entfernte Backups durchführen können und wie wir den RSYNC -Daemon einrichten können. In diesem Tutorial lernen wir eine sehr nützliche Technik, mit der wir durchführen können inkrementell Backups und planen Sie sie mit dem guten alten Cron.

In diesem Tutorial lernen Sie:

  • Der Unterschied zwischen harten und symbolischen Verbindungen
  • Was ist eine inkrementelle Sicherung
  • Wie die Option RSYNC -Link -Dest funktioniert
  • So erstellen Sie inkrementelle Sicherungen mit RSYNC
  • So planen Sie Backups mit Cron
So erstellen Sie inkrementelle Sicherungen mit RSYNC unter Linux

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Verteilung unabhängig
Software Rsync
Andere Keiner
Konventionen # - Linux -Commands, die mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden sollen sudo Befehl
$-Linux-Commands, die als regulärer nicht privilegierter Benutzer ausgeführt werden sollen


Harte gegen symbolische Links

Bevor wir weiter vorgehen und lernen, wie Sie inkrementelle Sicherungen mit RSYNC erstellen, sollten wir uns etwas Zeit nehmen, um den Unterschied zwischen klar zu erfassen symbolisch Und hart, Links, da letztere eine entscheidende Rolle in unserer Implementierung spielen (Sie können diesen Teil überspringen, wenn es für Sie offensichtlich klingt).

Auf Unix-basierten Systemen wie Linux haben wir zwei Arten von „Links“: hart und symbolisch. Der ln Der Befehl generiert standardmäßig harte Links; Wenn wir symbolische Links erstellen wollen, müssen wir sie mit dem aufrufen -S Option (kurz für --symbolisch).

Zu verstehen wie Hard_links Arbeit, wir müssen uns auf das Konzept von konzentrieren Inode. Ein Inode ist eine Datenstruktur im Dateisystem, das verschiedene Informationen zu einer Datei oder einem Verzeichnis enthält (die übrigens nur eine „spezielle“ Datei ist), wie z. die tatsächlichen Daten.

Zu diesem Zeitpunkt denken Sie vielleicht, dass der Name einer Datei auch in seinen Inode „gespeichert“ wird: Dies ist nicht der Fall. Was wir üblicherweise als "Dateinamen" bezeichnen.

Ein Verzeichnis kann mehr als einen Verweis auf denselben Inode enthalten: Diese Referenzen nennen wir Hard_links. Alle Dateien haben (natürlich) mindestens einen harten Link.

Harte Links haben zwei Hauptbeschränkungen: Sie funktionieren nicht über Dateisysteme hinweg Und kann nicht für Verzeichnisse verwendet werden.

Wenn die Anzahl der harten Verbindungen für einen Inode erreicht 0, Der Inode selbst wird gelöscht und so werden die referenzierten Blöcke auf der Festplatte vom Betriebssystem verwendbar (die tatsächlichen Daten werden nicht gelöscht und können manchmal wiederhergestellt werden, es sei denn, er wird durch neue Daten überschrieben). Die Anzahl der mit einem Inode verbundenen harten Verbindungen wird in der Ausgabe des ls Befehl, wenn es mit dem aufgerufen wird -l Möglichkeit:

$ ls -l ~/.Bash_logout -rw-r- -R--. 1 EGDOC EGDOC 18 Jan 28 13:45/Home/EGDOC/.Bash_logout 

In der obigen Ausgabe können wir das deutlich sehen ~/.Bash_logout ist die einzige Referenz (die einzige harte Verbindung) zu seinem spezifischen Inode. Erstellen wir einen weiteren harten Link und sehen, wie sich die Ausgabe des Befehls ändert:

$ ln ~//.bash_logout bash_logout && ls -l ~/.Bash_logout -rw-r- -R--. 2 EGDOC EGDOC 18 Jan 28 13:45/Home/EGDOC/.Bash_logout 


Wie erwartet wurde die Anzahl der harten Links von einer Einheit erhöht und ist jetzt jetzt 2. Nochmal: ~/.Bash_logout Und ~/bash_logout sind nicht zwei verschiedene Dateien; Es sind nur zwei Verzeichniseinträge, die auf denselben Inode zeigen. Dies kann leicht durch Laufen demonstriert werden ls, diesmal mit dem -ich Option (kurz für --Inode): Es macht so, dass der Inode -Index die Ausgabe enthalten ist:

$ ls -li ~/.bash_logout ~/bash_logout 131079 -rw-r-r-r--. 2 EGDOC EGDOC 18 Jan 28 13:45/Home/EGDOC/.Bash_logout 131079 -rw-r--R--. 2 EGDOC EGDOC 18 Jan 28 13:45/Home/EGDOC/BASH_LOGOUT 

Wie Sie sehen können, wurden referenziert Inode Ist 131079 in beiden Zeilen.

Symbolische Links sind unterschiedlich. Sie sind ein moderneres Konzept und überwinden die beiden Einschränkungen der harten Verbindungen: Sie können für Verzeichnisse verwendet werden und können über Dateisysteme hinweg festgelegt werden. A symbolischer Link ist eine besondere Art von Datei, die auf eine völlig andere Datei verweist (ihr Ziel). Das Entfernen eines symbolischen Link. Auf der anderen Seite bricht das Löschen der "Ziel" -Datei die symbolischen (en) Zeigen Sie darauf hin.

Zu diesem Zeitpunkt sollte klar sein, warum es bequemer ist, in Bezug auf den Platz auf der Festplatte harte Links zu erstellen: Wenn wir einen harten Link hinzufügen, erstellen wir keine neue Datei, sondern eine neue Referenz zu einem bereits vorhandenen.



Erstellen von inkrementellen Sicherungen mit RSYNC

Zuallererst, was heißt so genannt inkrementelles Backup? Ein inkrementaler Sicherungsspeicher speichert nur die seit der vorherigen Sicherung geänderten Daten, die geändert wurden. In einer inkrementellen Sicherungsstrategie ist nur die erste Sicherung der Serie eine „vollständige Sicherung“. Die nachfolgenden, speichern nur die inkrementellen Unterschiede. Dies hat den Vorteil, weniger Platz auf der Festplatte und weniger Zeit zu erfordern, um abgeschlossen zu werden, im Vergleich zu vollständigen Backups.

Wie können wir verwenden? rsync Um inkrementelle Sicherungen zu erstellen? Sagen Sie, wir möchten inkrementelle Sicherungen von unserer erstellen $ Home Verzeichnis: Zuerst erstellen wir eine vollständige Sicherung davon und speichern es in einem Verzeichnis, das wir nach dem aktuellen Zeitstempel benennen werden. Wir werden als einen Link zu diesem Verzeichnis erstellen, und wir werden es nennen neueste Um eine leicht zu identifizierbare Referenz zu erhalten.

Die nachfolgenden Sicherungen werden durch Berechnung der Unterschiede zwischen dem aktuellen Zustand der $ Home Verzeichnis und das letzte existentierte Backup. Jedes Mal, wenn eine neue Sicherung erstellt wird, wird der Strom erstellt neueste Link, der immer noch auf die vorherige Sicherung hinweist, wird entfernt. Es wird als mit dem neuen Backup -Verzeichnis als Ziel nachgebildet sein. Der Link zeigt immer auf die neueste verfügbare Sicherung.

Selbst wenn die Sicherungen inkrementell sind, werden wir immer die vollständigen Dateien in jedem Verzeichnis in jedem Verzeichnis sehen, nicht nur die, die sich geändert haben: Dies liegt daran. Diejenigen, die seit der letzten Sicherung modifiziert wurden.

Um unsere Sicherungsstrategie umzusetzen, werden wir die nutzen --Linkdest Option von rsync. Diese Option nimmt ein Verzeichnis als Argument an. Beim Aufrufen von RSYNC werden wir als angeben:

  • Das Quellverzeichnis
  • Das Zielverzeichnis
  • Das zu verwendende Verzeichnis als Argument der --Linkdest Möglichkeit

Der Inhalt der Quelle Verzeichnis wird mit dem des Verzeichnisses verglichen, das an die übergeben wird --Linkdest Möglichkeit. Neue und geänderte Dateien, die im Quellverzeichnis vorhanden sind Zielverzeichnis Wie immer (und Dateien, die in der Quelle gelöscht werden --löschen Option wird verwendet); Unveränderte Dateien werden auch im Sicherungsverzeichnis angezeigt, aber sie werden nur harte Links auf Inodes zeigen, die in den zuvor erstellten Backups erstellt wurden.

Implementierung

Hier ist ein einfaches Bash -Skript mit einer tatsächlichen Implementierung unserer Strategie:

#!/bin/bash # Ein Skript zur Durchführung inkrementaler Sicherungen mit RSYNC Set -o errexit set -o nounset set -o pipefail readonly source_dir = "$ home" readonly backup_dir = "/mnt/data/backups" readonly datetime = "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" (Datum '+%y-%M-%d_%H:%M:%s') "Readonly Backup_path =" $ backup_dir/$ datetime "readonly last_link =" $ backup_dir/letztes "mkdir- p "$ backup_dir" rsync -av - -delete \ "$ source_dir/" \ - -link -dest "$ lasting_link" \ -EXCLUDE = ".Cache "\" $ backup_path ""rm -rf"" $ last_link ""ln -s"" $ backup_path ""$ last_link"" 
Kopieren

Das erste, was wir taten, war, einige schreibgeschützte Variablen zu deklarieren: SCRECT_DIR Das enthält den absoluten Weg des Verzeichnisses, den wir sichern möchten (unser Heimverzeichnis in diesem Fall), Backup_dir Verzeichnis, das den Pfad zum Verzeichnis enthält, in dem alle Backups gespeichert werden, TERMINZEIT das speichert den aktuellen Zeitstempel, Backup_path Dies ist der absolute Weg des Backup -Verzeichnisses, der durch ""Beitritt"" erhalten wird Backup_dir und der Strom TERMINZEIT. Schließlich setzen wir die Neuest_link Variable, die den Pfad der symbolischen Verbindung enthält, die immer auf die neueste Sicherung hinweist.

Wir starten dann die rsync Befehl bereitzustellen -A Option (kurz für --Archiv) Um die wichtigsten Attribute der Quelldateien zu erhalten, die -v Option, den Befehl ausführlicher (optional) und die zu gestalten, und die --löschen Option zu erstellen, damit auch Dateien, die von der Quelle gelöscht wurden.

Beachten Sie, dass wir dem einen nachfolgenden Schrägstrich hinzugefügt haben SCRECT_DIR Im Befehl rsync: Dies macht so, dass nur der Inhalt des Quellverzeichnisses synchronisiert ist, nicht das Verzeichnis selbst.

Wir führen den Befehl mit dem aus --Linkdest Option, übergeben die Neuest_link Verzeichnis als Argument. Das erste Mal, dass wir das Skript starten, wird dieses Verzeichnis nicht vorhanden: Dies erzeugt keinen Fehler, sondern führt zu einer vollständigen Sicherung wie erwartet.

Wir beschlossen, das auszuschließen .Zwischenspeicher Verzeichnis aus der Backup mit dem --ausschließen Option, und schließlich haben wir das zur Verfügung gestellt Backup_path Um RSYNC zu unterweisen, wo die Backup erstellt wird.

Nachdem der Befehl erfolgreich ausgeführt wurde, wird der Link, der auf die vorherige Sicherung zeigt.

Das ist es! Bevor wir das Skript in der realen Welt verwenden, sollten wir es besser bei der Behandlung des Fehlers hinzufügen (zum Beispiel könnten wir das neue Backup -Verzeichnis löschen, wenn die Sicherung nicht erfolgreich abgeschlossen ist), und da die rsync Der Befehl kann möglicherweise für einen ziemlich langen Zeitraum ausgeführt werden (zumindest erstmals, wenn eine vollständige Sicherung erstellt wird), möchten wir möglicherweise eine Form der Signalausbreitung vom übergeordneten Skript zum untergeordneten Prozess implementieren (wie dies zu tun ist Ein schönes Thema für ein weiteres Tutorial).



Führen Sie das Skript regelmäßig mit Cron aus

Dieses Skript soll nicht manuell gestartet werden Crontab. Um unser Crontab zu bearbeiten und einen neuen hinzuzufügen Cron-Job, Wir müssen nur den folgenden Befehl ausführen:

$ crontab -e 

Der Crontab wird im Standardtexteditor geöffnet. Darin können wir das neue erstellen Cron-Job. Wenn das Skript beispielsweise alle 12 Stunden ausgeführt wird, könnten wir diesen Eintrag hinzufügen:

0 */12 * * */path/to/backup-Skript.Sch 

Schlussfolgerungen

In diesem Tutorial haben wir den Unterschied zwischen erklärt symbolisch Und hart Links unter Linux und wir haben gelernt, warum es im Kontext einer inkrementellen Sicherungsstrategie wichtig ist, die mit RSYNC implementiert ist. Wir haben gesehen, wie und warum wir den RSYNC benutzen --Linkdest Option, um unsere Aufgabe zu erfüllen, und wir haben ein einfaches Bash -Skript erstellt, um den Strategiefluss zu veranschaulichen. Schließlich haben wir gesehen, wie die Aufruf des Skripts regelmäßig mit Cron planen kann.

Verwandte Linux -Tutorials:

  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Dinge zu installieren auf Ubuntu 20.04
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Mastering -Bash -Skriptschleifen beherrschen
  • So erstellen Sie Symlink unter Linux
  • Verschachtelte Schleifen in Bash -Skripten
  • Ubuntu 22.04 Systemsicherung und Wiederherstellung
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Big Data Manipulation zum Spaß und Gewinn Teil 1
  • Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
"