Backup ist so ein Thema, dass man in seiner Vollständigkeit versteht, wenn man kein Backup hat oder es nicht möglich ist, das vorhandene Backup wiederherzustellen. Es gibt zahlreiche Lösungsansätze fuer das Backup/Restore Szenario.
Beispielsweise gibt es für die meisten Content Management Systeme Erweiterungen, die ein Datei- und ein Datenbank Backup auf dem Root-Server erzeugen und danach auf ein Ziel Ihrer Wahl übertragen (z.B. Drupal Backup & Migrate oder WordPress UpdraftPlus Backup and Restoration). Bis zu einem gewissen Umfang (der schwer errechenbar ist, weil er von so vielen Parametern abhängt) klappt das auch gut und zuverlässig.
Das Backup der Datenbank (Dump) funktioniert meist reibungsloser als das der Dateien. Datenbanken sind komprimiert erheblich kleiner als tausende von PDF oder JPG-Dateien, daher kann es bei den Dateien ab einem gewissen Umfang kompliziert werden. Sie werden normalerweise komprimiert und dann als zip oder tar.gz Archiv auf das Ziel übertragen. Alle paar Tage wird ein Vollbackup erzeugt und dazwischen inkrementelle Backups. Die Komprimiererei bei einem Voll-Backup kann auch einen Root-Server schnell an den Rand der Leistungsfähigkeit bringen und für locker mal 30 Minuten beschäftigen. Abhängig von der sonstigen Konfiguration des Systems kann das bedeuten, das manche Services in dieser Zeit sehr langsam laufen. Was aber viel wichtiger ist: Die Backups sind normalerweise nicht verschlüsselt. Genau an dieser Stelle kommt Duply ins Spiel.
Was ist Duply?
Zunächst gibt es das Backup Programm Duplicity. Duplicity ist ein
Encrypted bandwidth-efficient backup using the rsync algorithm
Das hört sich gut an. Es nutzt den rsync Algorithmus, erstellt inkrementelle Backups und das auch noch verschluesselt. Leider ist es etwas aufwendig zu konfigurieren, so dass die Zeitschrift Ct im Jahr 2006 das Script ftplicity schrieb und die Bedienung damit erleichterte (Ct – Hinter Schloss und Siegel).
Aus ftplicity entwickelte sich Duply, ein in der Programmiersprache Python geschriebenes Skript, das die Nutzung von Duplicity vereinfacht.
Beispiel
Nehmen wir an, sie haben viele virtuelle Server auf Ihrem Root-Server. Jeder soll ein eigenes Datei-Backup des Dokumentenverzeichnisses erhalten. Das Backup soll auf einen FTP Server übertragen werden und verschluesselt sein. Wir haben die FTP Zugangsdaten fuer den Ziel-Server und den Pfad des zu sichernden Verzeichnisses auf unserem Root-Server. Es soll alle 7 Tage ein Vollbackup erstellt werden und dazwischen 7 inkrementelle Backups. Eine Wiederherstellung der Dateien in einem anderen Verzeichnis soll möglich sein. Auf dem Root-Server läuft Ubuntu 14.04.
Installation
Wir benötigen zunächst das Paket Duplicity und einen FTPclient (ncFTP), der dann den eigentlich Dateitransfer übernimmt.
apt-get install duplicity ncftp
Erstes Backup
Sie können nun bereits ein Backup erstellen und per FTP übertragen. Den folgenden Befehl müssen Sie nur mit Ihren Zugangsdaten füllen und abschicken.
FTP_PASSWORD=[FTP-Passwort] duplicity [zu-sicherndes-Verzeichnis] ftp://[FTP-User]@[FTP-Host]/[Verzeichnis]
Nach dem Absenden werden Sie nach einem Passwort gefragt. Geben Sie ein beliebiges Passwort ein und merken es sich, Sie benötigen es bei der Wiederherstellung der Daten wieder.
root@server1:~# FTP_PASSWORD=*** duplicity /var/www/piwik.serverblogger.ch ftp://****@****/**** NcFTP version is 3.2.5 Local and Remote metadata are synchronized, no sync needed. Last full backup date: none GnuPG passphrase: Retype passphrase to confirm: No signatures found, switching to full backup. --------------[ Backup Statistics ]-------------- StartTime 1420383883.70 (Sun Jan 4 16:04:43 2015) EndTime 1420383889.16 (Sun Jan 4 16:04:49 2015) ElapsedTime 5.46 (5.46 seconds) SourceFiles 7119 SourceFileSize 41831081 (39.9 MB) NewFiles 7119 NewFileSize 41831081 (39.9 MB) DeletedFiles 0 ChangedFiles 0 ChangedFileSize 0 (0 bytes) ChangedDeltaSize 0 (0 bytes) DeltaEntries 7119 RawDeltaSize 38427305 (36.6 MB) TotalDestinationSizeChange 11915629 (11.4 MB) Errors 0 ------------------------------------------------- root@server1:~#
Herzlichen Glückwunsch, auf der Ziel FTP-Seite sind tatsächlich Dateien angekommen – Ein erstes Backup!
Wiederherstellung des Backups (restore)
Nachdem das mit dem Backup recht einfach ging, wollen wir die Daten in einem anderen Verzeichnis wiederherstellen.
FTP_PASSWORD=[FTP-Passwort] duplicity ftp://[FTP-User]@[FTP-Host]/[Verzeichnis] [restore-Verzeichnis]
root@server1:~/backup# FTP_PASSWORD=**** duplicity ftp://****@****/****/backup /root/backup/test NcFTP version is 3.2.5 Local and Remote metadata are synchronized, no sync needed. Last full backup date: Sun Jan 4 16:04:38 2015 GnuPG passphrase: root@server1:~/backup# cd test root@server1:~/backup/test# ls logs public_html
Nach Eingabe des richtigen Passworts wird das Verzeichnis test erstellt und die gesicherten Daten dort wiederhergestellt. Das funktioniert alles sehr schnell und elegant, nun wollen wir es mit Duply automatisieren.
Automatisierung der Backups mit Duply
Bevor wir Duply installieren muss die Sache mit der Passworteingabe automatisiert werden. Dazu erstellen wir uns Schlüssel mit dem Befehl.
gpg --gen-key
Es folgt ein Dialog
root@server1:# gpg --gen-key gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
Waehlen Sie DSA and Elgamal aus
Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 2
Die Schlüssellaenge von 2048 koennen Sie uebernehmen
DSA keys may be between 1024 and 3072 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits
Der Schlüssel soll nicht verfallen
Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 0 Key does not expire at all
Antworten Sie mit y
Is this correct? (y/N) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: Hagen Graf Email address: hagen@novatrend.ch Comment: Serverblogger Test You selected this USER-ID: "Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key.
Geben Sie an dieser Stelle wieder Ihr Passwort ein und merken es sich. Dieses Passwort brauchen Sie später in der Duply Konfigurationsdatei. Die nächste Meldung bezieht sich auf einen gpg-agent, der beim Start einer Session die Passphrase abfragt und zur Verfügung stellt. Dieser gpg-agent ist nicht installiert und daher kommt diese Meldung. Sie können sie ignorieren.
gpg: gpg-agent is not available in this session
Jetzt startet die Schlüsselerzeugung.
We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. gpg: WARNING: some OpenPGP programs can't handle a DSA key with this digest size +++++...+++++....+++++.++++++++++++++++++++++++++++++.+++++++++++++++..+++++.....+++++++++++++++.+++++.+++++....+++++.++++++++++.+++++.++++++++++....+++++++++++++++>+++++................>+++++..................................................................................................+++++ Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 288 more bytes)
In meinem Fall brach die Schlüsselerzeugung nach kurzer Zeit ab, weil nicht genug „entropy“ (Zufall) im System vorhanden war. Um die Entropie zu erhoehen, müssen Sie ihr System beschaftigen. Es gibt unterschiedliche Ansaetze (Beispiel). Ich habe es zuerst mit der mehrfachen Ausfuehrung des Befehls ls / -R probiert. Der Screenshot zeigt eine Shell mit der Schlüsselgenerierung, die Shell oben rechts zeigt die Entropie an, unten rechts wird das System beschäftigt.

Die Schlüsselerzeugung ging daraufhin weiter.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++.+++++++++++++++.+++++++++++++++.+++++.++++++++++++++++++++.+++++..++++++++++++++++++++>++++++++++>+++++...............................................................................+++++^^^
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ******* marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048D/6986FD72 2015-01-04
Key fingerprint = 43C1 DA7D 7CAE A2BC 34CF 6665 BB91 22E0 6986 FD72
uid Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>
sub 2048g/27AC130F 2015-01-04
Merken Sie sich den Key, der im gelb markierten Bereich steht.
wget http://downloads.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.9.x/duply_1.9.1.tgz tar xvfz duply_1.9.1.tgz cp duply_1.9.1/duply /usr/local/bin
Nun müssen Sie ein Profil erstellen.
duply [name-des-profils] create
Ich möchte wieder die Piwik Installation sichern und geben folgendes ein
root@server1:~# duply piwik.serverblogger.ch create Congratulations. You just created the profile 'piwik.serverblogger.ch'. The initial config file has been created as '/root/.duply/piwik.serverblogger.ch/conf'. You should now adjust this config file to your needs.
Sie müssen nun die Konfigurationsdatei bearbeiten
nano /root/.duply/piwik.serverblogger.ch/conf
Diese Werte müssen Sie anpassen
GPG_KEY='*****' // Der gelb markierte Key von oben GPG_PW='*****' // ihr Passwort bei der key-Erzeugung TARGET='ftp://****@****/****/****' // FTP Zugangsdaten TARGET_PASS='*****' // FTP Passwort SOURCE='/var/www/piwik.serverblogger.ch' // zu sichernden Verzeichnis MAX_AGE=1M // Nach 1 Monat werden alle aelteren Backups geloescht TEMP_DIR=/tmp // Das temporaere Verzeichnis
OPTIONAL
Wenn Sie die Datenbank (MySQL Dump) mit sichern wollen, können Sie sich eine Datei mit dem Namen pre anlegen
/root/.duply/piwik.serverblogger.ch/pre
Inhalt der Datei
mysqldump -u [Benutzername] -p[Passwort] piwik > piwik.sql
Backup mit Duply
Mit dem Befehl duply [profilname] backup koennen Sie nun ein Backup ausühren. In meinem Fall
duply piwik.serverblogger.ch backup
Ein Vollbackup wird mit full aufgerufen
duply piwik.serverblogger.ch full
Ein inkrementelles Backup mit incr
duply piwik.serverblogger.ch incr
Sie sollten nun nicht nach einem Passwort gefragt werden! Mit duply -h können Sie sich die Hilfeseite anzeigen lassen.
Automatisierung
Der letzte Schritt ist nun der Eintrag in der Crontab um den Backup Befehl regelmässig auszuführen.
crontab -e
Sonntags um 0:00 wird ein volles Backup erstellt und alte Backups gelöscht. Von Montag bis Samstag wird jeweils um 0:00 Uhr ein inkrementelles Backup durchgeführt.
# do a full backup on sunday & delete old backups 0 0 * * 7 /usr/bin/duply /root/.duply/piwik.serverblogger.ch full_verify_purge --force # run the incremental backup each night at 00:00h 0 0 * * 1-6 /usr/bin/duply /root/.duply/piwik.serverblogger.ch incr
Restore mit Duply
Die Wiederherstellung funktioniert ebenso einfach wie das Backup
duply [Profilname] restore [Zielverzeichnis]
Andere Plattformen
Mit Duplicity und Duply können Sie auf auf andere Ziele sichern, beispielsweise S3 Amazon Web Services, Google Cloud Storage, Rackspace Open Cloud, und Dropbox.
tl;dr: Backups sind hilfreich und nicht schwer!
Schreibe einen Kommentar