Hdup

Aus mxlinuxusers.de

hdup[Bearbeiten | Quelltext bearbeiten]

hdup ist ein Werkzeug zum Erstellen von Sicherungskopien mit den folgenden Eigenschaften:

  • inkrementale Backups (monatlich, wöchentlich, täglich)
  • Verschlüsselung der Archive mittels mcrypt oder GPG möglich. Allerdings wird das von MX-19 bereitgestellte Paket mcrypt im Moment (August 2021) als fehlerhaft bezeichnet und von der Benutzung wird abgeraten
apt show mcrypt

"Bitte beachten Sie, dass dieses Paket fehlerhaft ist und von den Upstream-Autoren nicht gewartet wird. Wenn Sie können, suchen Sie bitte nach anderen Implementierungen (openssl, gnutls, gnupg)."

"Please note that this package is buggy and unmaintained by the upstream authors. If you can, please look for other implementations (openssl, gnutls, gnupg)."

  • komprimierte Archive möglich (bzip/gzip/lzop)
  • Archive können auf einem entfernten Host gesichert und von dort wieder zurückgespielt werden
  • Archive können aufgeteilt (gesplittet) werden
  • Zugriff auf Archive ist auch ohne hdup mit normalen Linux-Werkzeugen möglich (z.B. mit Dateibrowser)
  • Steuerung des Backups über eine Konfigurationsdatei /etc/hdup/hdup.conf, dort sind verschiedene Backup-Profile möglich

Verwendung[Bearbeiten | Quelltext bearbeiten]

Backup[Bearbeiten | Quelltext bearbeiten]

Der einfachste Aufruf von hdup für ein Backup sieht so aus:

hdup monthly profilname

'monthly' ist das sogenannte Schema (Scheme), davon existieren drei verschiedene, die aufeinander aufbauen:

  • monthly: vollständiges Backup
  • weekly: inkrementelles Backup, das auf dem letzten monatlichen (monthly) Backup beruht
  • daily: inkrementelles Backup, das auf dem letzten wöchentlichen (weeklly) Backup beruht

Sollte noch kein "höheres" Backup existieren, so wird statt dem gewünschten Schema automatisch das höhere Schema angelegt. Möchte man also ein wöchentliches (weekly) durchführen und es existiert kein monatliches Backup, so wird stattdessen das notwendige monatliche Vollbackup durchgeführt.

Der profilname, in hdup eigentlich Host genannt, bezeichnet den Abschnitt in der hdup.conf (s.u.) mit diesem Namen,

[profilname]

hat also nicht unbedingt etwas mit einen Hostrechner zu tun.

Das erzeugte Archiv wird in dem in der Option 'archive dir' angegebenen Verzeichnis als Unterverzeichnis mit dem Namen des benutzten Hosts und dem Datum abgelegt. Um dies zu verdeutlichen ein Beispiel:

In /etc/hdup/hdup.conf steht dieser Eintrag

 archive dir = /mnt/backup

und hdup wird am 31.7.2021 so ausgeführt:

hdup monthly elektron

dann findet sich anschliessend das Backup im Verzeichnis /mnt/backup/elektron/2021-07-31/ unter dem Namen elektron.2021-07-31.monthly.tar.bz2. Ausserdem befindet sich im Verzeichnis /mnt/backup/elektron/ ein Unterverzeichnis etc, das Verwaltungsinformationen für hdup enthält.

Möchte man das Archiv auf einen entfernten Rechner ablegen, so geht das mit diesem Aufruf

hdup monthly profilname @USER@REMOTEHOST

wobei USER der Username ist und REMOTEHOST der Name des entfernten Rechners, also z.B.

hdup monthly privat @gosia@elektron.atom.net

Wichtig ist dabei der Klammeraffe @ vor dem Usernamen und dass kein Doppelpunkt : zulässig ist.

Voraussetzung für die Ablage auf einem entfernten Rechner ist aber, dass dort hdup installiert ist.

Zum Transport des Archivs auf den entfernten Rechner kann jedes geeignete Programmbenutzt werden, das diese zwei Kriterien erfüllt:

  1. es muss die Filterfunktion beherrschen (lesen von stdin, Ausgabe auf stdout)
  2. und es muss die Syntax user@remotehost verstehen.

der Autor von hdup, Miek Gieben, garantiert dass ssh dafür getestet wurde und funktioniert, aber auch rsync sollte funktionieren. Welches benutzt werden soll, wird in der hdup.conf mit der Option proto festgelegt.

Wiederherstellung[Bearbeiten | Quelltext bearbeiten]

Natürlich möchte (oder muss) man sein Backup auch mal wieder zurückspielen. Das kann durch dieses Kommando gemacht werden:

hdup restore HOST DATE DIRECTORY

HOST hat die schon bei Backup erwähnte Bedeutung.

DATE stellt alles bis zu diesem Datum wieder her. hdup sucht nach dem letzten Monatsarchiv, dann nach dem letzten Wochenarchiv und schließlich nach dem Tagesarchiv, um das angegebene Datum aufzufüllen. Das DATUM kann entweder als DD-MM-YYYY (Datumsangabe = Standard), als YYYY-MM-DD (Datumsangabe = iso) oder als MM-DD-YYYY (Datumsangabe = amerikanisch) angegeben werden. Dies wird über die Konfigurationsdatei gesteuert.

Ein besonderes Datum ist 'static', das hdup anweist, im Verzeichnis 'static' zu suchen. Dies wird verwendet, wenn in der Konfigurationsdatei die Option 'no history = yes' gesetzt ist. Die Verwendung dieses Datums ist gefährlich, da hdup die alte Sicherungsdatei mit der neuen überschreiben wird. Wenn das System während des Überschreibens abstürzt, hat man überhaupt keine Sicherung mehr! Dies sollte man nur verwenden, wenn man wirklich keinen Platz für zwei monatliche Sicherungen hat.

Ein weiteres spezielles Datum ist 'today' (heute), das hdup anweist, das aktuelle Datum zu verwenden.

DIRECTORYD teilt hdup mit, in welches Verzeichnis das Archiv entpackt werden soll.

Wurde das Archiv auf einem entfernten Rechner abgelegt, so muss entsprechend wie beim Backup der Username und der entfernte Rechner mit angegeben werden:

hdup restore HOST DATE DIRECTORY @USER@REMOTEHOST

Für @USER@REMOTEHOST gelten die gleichen Regeln, die schon beim Backup angegeben wurden.

Optionen von hdup[Bearbeiten | Quelltext bearbeiten]

Auch für hdup existieren Optionen, mit denen man das Verhalten beeinflussen kann. Möchte man diese verwenden, so werden sie direkt nach hdup aufgeführt

hdup [ OPTION ] SCHEME HOST

oder

hdup [ OPTION ] restore HOST DATE DIRECTORY
Optionen von hdup
Option Bedeutung
-c /PFAD/ZUR/KONFIGDATEI kann angegeben werden, wenn eine andere Konfigurationsdatei als /etc/hdup/hdup.conf benutzt werden soll
-s /PFAD/ZUR/DATEI kann angegeben werden, wenn nur eine einzelne Datei aus dem Archiv wiederhergestellt werden soll. Pfad muss der volle Pfad sein, relative Pfadangaben sind nicht möglich
-i ignoriert Fehler von tar bei der Wiederherstellung
-I ignoriere Fehler in der Konfigurationsdatei
-P tar wird so gepatcht, dass es die Optionen --no-recursion, --listed-incremental und --files-from zusammen verarbeiten kann. Diese Optionen ermöglichen zwei Dinge in hdup:
  1. Verzeichnisinformationen werden in 'filelist' geschrieben und
  2. --no-recursion wird an tar übergeben.

Dies behebt den Fehler, dass hdup keine Verzeichnisinformationen in die Archive schreibt

-d simuliert nur ein Backup, ohne es durchzuführen
-q unterdrückt die Ausgabe von Subprozessen (z.B. von tar oder ssh)
-q -q unterdrückt die Log-Ausgaben von hdup
-q -q -q unterdückt jegliche Ausgabe von hdup
-V ausführlichere Ausgaben von hdup
-V -V noch ausfürlichere Ausgaben von hdup. Wird zusätzlich die Option -D benutzt, erfolgt eine Ausgabe der zu sichernden Dateien
-h Hilfemeldung
-v zeigt die Version von hdup
-D Ausgabe von zahlreichen Meldungen, die zur Fehlersuche hilfreich sein können

Konfigurationsdatei hdup.conf[Bearbeiten | Quelltext bearbeiten]

Die Einstellungen für hdup befinden sich in der Datei /etc/hdup/hdup.conf Eine kleine Musterkonfigurationsdatei wird bei der Installation dort abgelegt und muss aber editiert und so an die eigenen Bedürfnisse angepasst werden. Eine Beschreibung dieser Konfigurationsdatei erhält man durch Aufruf der Man-Page von hdup.conf

man hdup.conf

hdup.conf besteht aus einem globalen Teil am Anfang, gekennzeichnet durch diese Zeile

[global]

und ein bis mehreren (maximal 255) Teilen, die die verschiedenen Backup-Profile beschreiben. Diese letzten Teile werden "Host" genannt, haben aber nicht unbedingt etwas mit einem Host, bzw. Hostnamen zu tun. Es sind letztlich einfach Namen, mit denen verschiedene Backupaufgaben bezeichnet und aufgerufen werden. So könnte man z.B. ein Backup-Profil [user] anlegen, in dem Daten der User gesichert werden und ein zweites Profil mit dem Namen [system], dass dafür sorgt, dass z.b. die Verzeichnisse /etc und /root gesichert werden. Wenn also jetzt von "Host" geredet wird, sind immer solche Backup-Profile gemeint.

Die Einstellungen werden überall in der Form

option = wert

notiert, wobei auch mehrere Werte angegeben werden können. Diese werden dann durch Kommata getrennt:

dir = /var/www, /etc, /root

Optionen von hdup.conf[Bearbeiten | Quelltext bearbeiten]

der globale Teil muss, wie schon gesagt, ganz am Anfang stehen und wird durch die "Überschrift"

[global]

eingeleitet. Alle in ihm festgelegten Optionen gelten für alle anderen Hosts (Backup-Profile), sofern sie dort nicht extra überschrieben werden. Wird also hier z.B. Kompressionsmethode auf gzip gesetzt

compression = gzip

dann gilt diese Methode für alle anderen Hosts, in denen keine Kompressionsmethode festgelegt wurde.

Nach den Optionen des globalen Teils kommen die Optionen für die einzelnen Hosts (Backup-Profile), eingeleitet durch ihren Namen:

[host1]
...
[host2]
...

Bei den Optionen gibt es solche, die unbedingt angegeben werden müssen (Mandatory) und optionale. Außerdem existieren sogenannte "binäre Optionen", die durch on, yes oder true eingeschaltet werden. In der folgenden Tabelle wird in der Regel dann nur noch der Wert "on" angegeben, als Kennzeichen, dass es sich um eine binäre Option handelt. Per default sind sie "ausgeschaltet", das bedeutet, wenn sie nicht extra angegeben werden, stehen sie auf "aus", können aber ausdrücklich durch die Werte "no, off oder false" als "ausgeschaltet" gekennzeichnet werden.

mandatorische Optionen[Bearbeiten | Quelltext bearbeiten]

  • archive dir: Verzeichnis, in dem das Archiv gesichert werden soll
archive dir = /mnt/backup
  • dir: zu sichernde Verzeichnisse. Bei der Wiederherstellung (restore) kann es weggelassen werden.
dir = /home

optionale[Bearbeiten | Quelltext bearbeiten]

Liste wichtiger Optionen
Option Argument Bedeutung
algorithm gpg oder mcrypt benutzter Algorithmus zur Verschlüsselung. Bei Benutzung muss auf jeden Fall auch ein Eintrag bei 'key' (s.u.) und 'gpg' bzw. 'mcrypt' erfolgen (unbedingt die obige Warnung beachten, dass von der Benutzung von mcrypt abgeraten wird)
allow remote on, yes, true entfernte Archive dürfen von diesem Host hochgeladen werden, andernfalls werden sie verweigert
always backup on hdup wird immer eine Sicherung durchführen. Normalerweise wird die Sicherung abgebrochen, wenn keine incfile gefunden wird. Diese Option bewirkt, dass hdup eine wöchentliche Sicherung durchführt, wenn das Sicherungsschema täglich ist und keine wöchentliche incfile gefunden wird. Wenn hdup bei einer wöchentlichen Sicherung keine monatliche incfile findet, führt es einen monatlichen Dump durch
chunk size xK oder xM maximale Grösse, in der die Archive aufgeteilt werden sollen (K=Kilobyte, M=Megabyte, z.B. 640M). Die einzelnen Teile werden dann mit einem Suffix '__split__XX' "durchnummeriert", wobei xx zwei Buchstaben bezeichnet, die mit aa, dann ab, ac usw. bis zu zz gehen.
compression bzip, gzip, lzop oder none gewünschte Kompressionsmethode, Default ist gzip
compression level 1..9 1=geringe Kompression, aber am schnellsten, 9=höchste Kompression, langsam. Default 6
date spec default, iso oder ameican Datumsformat. default=DD-MM-YYYY (27-07-2021), iso=YYYY-MM-DD (2021-07-27), american=MM-DD-YYYYY (07-27-2021)
exclude Datei- oder Verzeichnisnamen Liste von auszuschliessenden Dateien oder Verzeichnissen als reguläre Expression, durch Kommata getrennt. Verzeichnisnamen müssen mit einem Slash / enden. WICHTIG: nicht in Anführungszeichen setzen
force on wenn 'on' ist eine Wiederherstellung ins Wurzelverzeichnis / erlaubt
free xk, xm oder xG wieviel freier Platz muss auf dem Backup-Medium mindestens frei sein, damit ein Backup durchgeführt wird (k=Kilobyte, m=Megabyte, G=Gigabyte)
gpg /usr/bin/gpg Pfad zu gpg. OpenPGP encryption wird zur Verschlüsselung benutzt. In diesem Fall muss auch der key (User ID) angegeben werden (s.u.)
group Unter welcher Gruppenzugehörigkeit soll das Backup gespeichert werden. Default ist die Gruppenzugehörigkeit des Users
include Dateinamen Liste von zu sichernden Dateien als reguläre Expression, durch Kommata getrennt. WICHTIG: nicht in Anführungszeichen setzen. Hier aufgelistete Dateien haben Vorrang vor denen in "exclude" ausgeschlossenen Dateien. Ist also eine Datei sowohl in "exclude" als auch in "include" aufgeführt wird sie gesichert
inherit HOST Eine Liste von Hosts, von denen geerbt werden soll. Alle angegebenen Schlüsselwörter überschreiben entweder die Schlüsselwörter des aktuellen Hosts (für einzelne Elemente) oder hängen sie an (für Listen). Dies ermöglicht die Erstellung spezifischer Hostkonfigurationen aus gemeinsamen Teilen
key USER ID wird gpg zur Verschlüsselung benutzt, muss hier die User ID vom key eingetragen werden
log on vom jeweiligen LOG_DAEMON werden Logmeldungen mit der Priorität LOG_NOTICE erzeugt, bei Fehlen in der Form
FAILURE, <hostname>, <error condition>

im Erfolgsfall in dieser Form

SUCCESS, <hostname>, <archive size>, <archive time>
mcrypt /PFAD/ZU/mcrypt mcrypt wird zur Verschlüsselung benutzt. In diesem Fall müssen auch die Einträge bei 'algorithm' und 'key' erfolgen (s.o.). Allerdings wird von der Benutzung von mcrypt aus Sicherheitsgründen abgeraten
no history on Wenn diese Option eingeschaltet ist, speichert hdup jedes Archiv in einem Verzeichnis namens "static", wodurch keine Historie der Archive gespeichert wird. WARNUNG: Die Verwendung dieser Option ist gefährlich. Wenn ein Backup fehlschlägt und die Archive nicht an einen sicheren Ort kopiert wurden, existieren überhaupt keine Backups mehr! Ein Postrun-Skript, das die Archive an einen sicheren Ort kopiert, befindet sich im Verzeichnis examples der hdup-Quellen. Es ist ratsam, diese Option nur zu verwenden, wenn man genau weiss, was man tut.

Die Wiederherstellung eines solchen Archivs kann durch die Verwendung des Wortes "static" als Wiederherstellungsdatum erreicht werden.

nobackup DATEINAME Das Argument ist ein Dateiname. Wenn er angegeben wird, sucht hdup nach dieser Datei in den Verzeichnissen, die es sichert. Wenn diese Datei gefunden wird, werden das aktuelle Verzeichnis und alle Unterverzeichnisse von der Sicherung ausgeschlossen
one filesystem on Bei 'on' bleibt hdup im lokalen Dateisystem für jedes mit 'dir' angegebene Verzeichnis, wenn ein Backup erstellt wird
overwrite on alte Archive werden überschrieben
postrun SKRIPTNAME ein Kommando oder Skript, das nach der Ausführung von hdup ausgeführt werden soll. Folgende Argumente können dabei benutzt werden, die zu den angegebenen Werten expandiert werden:
  • %h = aktueller Host
  • %a = vollständiger Pfad des Archivnamens der aktuellen Sicherung
  • %s = aktuelles Schema (daily, weekly oder monthly)
  • %u = Username unter dem das Archiv gesichert wird (Besitzer des Archivs)
  • %e = 'yes' wenn Verschlüsselung benutzt wurde, sonst 'no'
  • %c = 'yes' wenn das Archiv gesplittet wurde (chunk), sonst 'no'
  • %g = Gruppenname unter dem das Archiv gesichert wird

Jedes andere Argument wird zu '-empty' expandiert (ohne Anführungszeichen).

Bricht das Skript mit einem Fehler ab, so hat das trotzdem keinen Einfluss auf das Backup

prerun SKRIPTNAME ein Kommando oder Skript, das vor der Ausführung von hdup ausgeführt werden soll. Es können die gleichen Argumente wie bei 'postrun' benutzt werden. WICHTIG: anders als bei 'postrun' wird bei fehlerhaftem Abbruch des Skriptes anschliessend kein Backup durchgeführt!
proto PFAD/ZUM/KOMMANDO fungieren können. Möglich wäre auch die Angabe von '/dev/null', wenn kein 'ssh' benutzt werden soll
proto option OPTION eventuell erforderliche Optionen für 'proto', z.B.
proto option = -i /home/user/.ssh/identity -oProtocol=2
remote hdup Ort vom entfernten hdup, z.B.
@user@remotehost
remote hdup option OPTIONEN Angabe der Optionen, wenn 'remote hdup' benutzt wird. Die Optionen entsprechen denen in der Datei hdup.conf
skip on veraltete Option (Deprecated), nicht mehr benutzen. Das Backupverzeichnis selbst wird nicht ins Backup einbezogen, dies ist aber sowieso default
sparse on veraltete Option (Deprecated), nicht mehr benutzen. Wenn 'on' wird tar's --sparse Feature benutzt, dies ist aber sowieso default
tar /PFAD/ZU/TAR braucht in der Regel nicht angegeben werden. Das verwendete tar muss die Syntax von GNU tar verstehen, Hintergrund: Das unter Linux vorhandene GNU tar entspricht nicht ganz dem POSIX-Standard
tar option OPTION eventuelle Extra-Optionen, die von hdup an tar und untar übergeben werden. hdup überprüft nicht die Korrektheit diese Optionen!
user USERNAME unter welchem Usernamen soll das Archiv gespeichert werden. Default ist der ausführende User

reguläre Ausdrücke[Bearbeiten | Quelltext bearbeiten]

Die Schlüsselwörter include und exclude benötigen einen regulären Ausdruck als Eingabe. Wichtig ist, dass ein regulärer Ausdruck sich von den üblichen Dateimustern (Globbing) der Bash unterscheidet. Etwas mehr dazu steht im Abschnitt "Beispiele". Zusätzlich gilt: Wenn ein Ausdruck mit einem Schrägstrich '/' endet, wird er nur auf Verzeichnisse angewendet. Ein '/' an einer anderen Stelle wird nicht speziell behandelt.

Der gesamte Pfadname einer Datei oder eines Verzeichnisses wird für den Mustervergleich verwendet. Bei der Mustererkennung wird zwischen Groß- und Kleinschreibung unterschieden.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Um alle Dateien mit der Endung .txt zu finden, muss das Muster .*.txt verwendet werden. Das in der Bash verwendete Muster *.txt für diese Suche funktioniert hier nicht!

Um alle Dateien unter opt zu finden, verwendet man ^/opt. Um ein bestimmtes Verzeichnis in /opt zu finden sollte man ^/opt/bla/ verwenden. Möchte man ein einzelnes Verzeichnis abgleichen, so muss man den vollständigen Pfadnamen und ein führendes und schließendes '/' angeben.