Nächste Seite: Beispiel 1, sehr einfaches
Aufwärts: Verwendung von storeBackup (Beispiele)
Vorherige Seite: Verwendung von storeBackup (Beispiele)
Inhalt
Bevor hier einige Beispiele erläutert werden: Es ist nicht
schlecht, wenn Du Dir darüber im Klaren bist, was Du tust und was
passiert. Hier werden zuerst einige wichtige Aspekte darüber, wie
storeBackup arbeitet, beschrieben. (Die folgenden Erklärungen
betreffen die prinzipielle Abarbeitung; aus Gründen der Performance
ist die Implementierung etwas anders. Es gibt diverse Warteschlangen,
Parallelitäten und einen kleinen Scheduler in storeBackup.pl, die
hier nicht beschrieben werden.)
storeBackup verwendet mindestens zwei interne zeilenorientierte Dateien
in jedem erzeugten Backup:
.md5CheckSums.info |
- allgemeine Informationen über das Backup |
.md5CheckSums[.bz2] |
- Information über jede gespeicherte Datei (dir, etc.) |
Wenn storeBackup.pl gestartet wird, passiert (neben einigem
anderen) Folgendes:
- Lies den Inhalt der vorherigen .md5CheckSums[.bz2]-Datei
und speichere den Inhalt in zwei Indexdateien:
dbm(md5sum) und dbm(filename). (dbm(md5sum) bedeutet, dass als Hash
die md5-Summe verwendet wird, bei dbm(filename) ist es der
Dateiname.) Standardmäßig werden diese Tabellen im Hauptspeicher
gehalten.
- Lies den Inhalt der anderen .md5CheckSums[.bz2]-Dateien
(otherBackupSeries) und speichere sie im Hash dbm(md5sum). Speichere
immer die letzte Kopie in der dbm-Struktur, falls zwei
unterschiedliche Dateien (z.B. von unterschiedlichen Backup-Serien)
identisch sind. Dieses bewirkt, dass unterschiedliche Versionen
derselben Datei aus unterschiedlichen Backups in künftigen Backups
zusammengelegt werden.
- Hier wird beschrieben, wie storeBackup.pl arbeitet,
wenn keine Dateien aus anderen Serien verlinkt werden (einfaches
Backup), siehe Beispiel 1
und Beispiel 2:
In einer Schleife über alle Dateien mache Folgendes:
- Sieh nach, ob in dbm(filename) - das alle Dateien vom vorherigen
Backup enthält -, exakt dieselbe unveränderte Datei existiert,
verwende dazu die Meta-Informationen aus dbm(filename), insbes. die
md5-Summe.
Erzeuge einen Hardlink auf die schon bestehende Datei und gehe
zu Schritt 3.
- Berechne die md5-Summe von der zu sichernden Datei und suche in
dbm(md5sum) nach dieser md5-Summe.
Wenn sie dort existiert, erzeuge einen Hardlink auf die
betreffende Datei.
Wenn sie nicht existiert, kopiere oder komprimiere die Datei.
- Schreibe die Informationen über die neue Datei in
die entsprechende .md5CheckSums[.bz2] Datei.
- Hier wird beschrieben, wie storeBackup arbeitet, wenn Dateien
mit einer anderen Backup-Serie verlinkt werden, siehe
example 3 and
example 4.
In einer Schleife über alle Dateien mache Folgendes:
- Sieh nach, ob in dbm(filename) - das alle Dateien vom
vorherigen Backup enthält -, exakt dieselbe unveränderte Datei
existiert, verwende dazu die Meta-Informationen aus dbm(filename).
(Da jetzt auf mehrere, unabhängige Backups verlinkt wird, kann es
sein, dass eine Datei gleichen Inhalts in den anderen Backups
existiert. Daher muss storeBackup.pl in dbm(md5sum)
nachsehen, ob dorthin verlinkt werden könnte, um immer auf
dieselbe Datei zu verlinken.)
- Berechne die md5-Summe der Datei, falls sie nicht aus
Schritt 1 bekannt ist.
Suche in dbm(md5sum) nach dieser md5-Summe.
Wenn sie existiert, erzeuge einen entsprechenden Hardlink.
Wenn sie nicht existiert, kopiere oder komprimiere die Datei.
- Schreibe die Informationen über die neue Datei in
die entsprechende .md5CheckSums[.bz2] Datei.
- Hier wird der (prinzipielle) Ablauf bei Verwendung der Option
lateLinks beschrieben. Siehe auch Beispiel
6 unten
Wenn Du Deine Backups auf einen NFS-Server speicherst, wird die
meiste Zeit für das Setzen der Hardlinks verwendet. Einen
Hardlink zu setzen geht sehr schnell, aber wenn das viele tausend
sind, dauert es auch seine Zeit. Du kannst das Warten auf die Hardlinks
vermeiden, indem Du die Option lateLinks verwendest:
- Erstelle ein Backup mit storeBackup.pl und setze
--lateLinks (or lateLinks = yes) in der
Konfigurationsdatei. StoreBackup.pl wird dann keine Hardlinks
generieren; es wird lediglich eine Datei geschrieben, in der
die Informationen darüber, was hätte gelinkt werden sollen,
enthalten ist.
Es handelt sich beim neuen Backup also erst einmal um ein
inkrementelles Backup.
- in einem eigenständigen Schritt wird
storeBackupUpdateBackup.pl aufgerufen, um alle benötigten
Hardlinks zu setzen, damit aus dem nicht fertiggestellten Backup
wieder ein vollständiges Backup wird. Siehe auch
Kapitel Verwendung der Option lateLinks für weitergehende
Erklärungen.
Fazit:
- Lösche kein Backup, in dem die Hardlinks noch nicht gesetzt wurden.
storeBackupUpdateBackup.pl erzeugt diese. Es ist eine gute
Idee, zum Löschen von Backups ausschließlich storeBackup.pl
oder storeBackupDel.pl zu verwenden.
- Die gemeinsame Verwendung von Plattenplatz über mehrere Backups
erfolgt immer über Hardlinks. Das bedeutet:
- Eine Backup-Serie kann nicht über mehrere Dateisystem verteilt
werden.
- Wenn Du Daten zwischen unterschiedlichen Backup-Serien
verlinken willst, müssen diese im selben Dateisystem angelegt
sein.
- Die Informationen über ein Backup in den .md5CheckSums
Dateien wird mit relativen Pfadnamen gespeichert. Es spielt daher
keine Rolle, wenn Du den absoluten Pfad zum Backup änderst oder von
einem anderen Rechner sicherst (Server macht Backup vom Client über
NFS - Client macht Backup zum Server über NFS).
(Noch) nicht gesetzte Hardlinks zu anderen Backup-Serien (über die
Option lateLinks werden ebenfalls mit relativen Pfaden
gespeichert. Das bedeutet: Da kannst backupDir verschieben
wie Du willst, aber Du solltest niemals den relativen Pfad zwischen
den Backup-Serien, ändern bevor alle Links mit
storeBackupUpdateBackup.pl erzeugt wurden.
Wenn Du weitere Ideen oder Fragen hast, kannst Du mich gern
kontaktieren (hjclaes(at)web.de).
Es ist eine gute Idee, die Konfigurationsdatei anstelle der
Kommandozeile zu verwenden. Ruf einfach
# storeBackup.pl --generate <configFile>
auf.
Editiere die Konfigurationsdatei und rufe storeBackup.pl
folgendermaßen auf:
# storeBackup.pl -f <configFile>
Du kannst die Einstellungen in der Konfigurationsdatei auf der
Kommandozeile überschreiben (siehe Beispiel 6).
Nächste Seite: Beispiel 1, sehr einfaches
Aufwärts: Verwendung von storeBackup (Beispiele)
Vorherige Seite: Verwendung von storeBackup (Beispiele)
Inhalt
Heinz-Josef Claes
2014-04-20