rdiff-backup – Die Linux TimeMachine

Hallo Leute,

ich suchte vor einiger Zeit lange nach einem geeigneten Backupsystem für unsere Linux IT Landschaft. Wir hatten damals bacula im Einsatz; dies hat uns überhaupt nicht zugesagt. Danach schrieb ich eigene Shell Backupscripts, was zwar funktionierte, aber sehr mühsam zu warten war und somit auch nicht ideal war.

Im Grunde waren folgende Punkte wichtig:

  • Inkrementelle Backups (Platz sparen bzw. Bandbreite sparen)
  • Voll automatisiert
  • Einfach und verständlich in der Konfiguration

im Grunde also eine Art “TimeMachine” für Linux. Durch Zufall stieß ich dann endlich auf rdiff-backup – dies war ein Heureka für mich. Zuletzt hatte ich das gefunden was ich seit Monaten suchte. Wir setzen rdiff-backup jetzt seit knappen 2 Jahren ein und waren nie glücklicher. Auch die schlechten Gefühle am Abend sind jetzt weg. Noch dazu verwenden wir mein “offsite-backup-script”.

rdiff-backup ist im Grunde eine Kombination aus rsync, ssh und einem klugen Shell Script.

Zur Installation

“rdiff-backup” muss auf dem Backupserver sowie auf dem zu sichernden Server installiert werden.

apt-get install rdiff-backup

das wars auch schon bezüglich Installation.

Konfiguration

Die Konfiguration ist kinderleicht und funktioniert auch leicht und übersichtlich wenn man mehrere Server sichern will.

Zuerst erstellt man einen SSH Key auf dem Backupserver (Server A) und fügt diesem auf dem zu sichernden Server (Server B) ein.

Danach erstellt man ein “ssh-konfiguration file” unter dem Benutzer der dann das Backup ausführen soll (in diesem Fall root):

vim /root/.ssh/config

Hier fügen wir dann alle Server im folgendem Format ein:

Host serverB
HostName serverB.example.com
Port 22
User root

danach die Datei speichern und schließen.

Nun solltet ihr auf dem Backup Server via

ssh serverB

auf den zu sichernden Server zu kommen (ohne Passwort und weitere Angaben). Funktioniert das können wir fortfahren.

Der letzte Schritt ist ein Script anlegen, welches “rdiff-backup” ausführt und die Backups macht:

vim /root/scripts/rdiff-backup.sh

#!/bin/bash

# Lokales Backup
rdiff-backup /etc /srv/backups/serberA/etc/

# Remote Backup
rdiff-backup serverB::/etc /srv/backups/serverB/etc

Das Script muss man natürlich an seine Anforderungen anpassen. Die Verzeichnisse müssen schon erstellt worden sein (/srv/backups/serverB/etc usw) ansonsten funktioniert “rdiff-backup” nicht.

Danach speichern und das Script ausführbar machen:

chmod +x /root/scripts/rdiff-backup.sh

und via

crontab -e
30 1 * * * sh /root/scripts/rdiff-backup.sh

als Cronjob hinzufügen. Ihr könnt das Script auch jederzeit manuell ausführen, danach findet ihr in eurem Backupverzeichnis immer die aktuellen Files sowie die Inkrementellen Files (diese müssen via einem Befehl wiederhergestellt werden)

Kleiner Tipp: Fügt “10 22 * * * dpkg -l > /etc/dpkg_list” in euren Contab hinzu, damit wisst ihr bei einem Totalausfall eures Servers immer genau welche Pakete/Libraries installiert waren und spart so viel Zeit beim Wiederherstellen.

Wiederherstellung

Zum Wiederherstellen eines Verzeichnisses könnt ihr entweder den Ordner auf wieder auf den Server kopieren (im Backupordner sind immer die aktuellsten Files) oder ihr verwendet den “rdiff-backup” Befehl dafür:

#Stellt ein aktuelles Backup wieder her
rdiff-backup -r now serverB::/etc /srv/backups/serverB/etc

#Stellt das Verzeichnis wieder her wie es vor 10 Tagen war
rdiff-backup -r 10D serverB::/etc /srv/backups/serverB/etc

Backups löschen die älter als X Tage sind

Falls ihr ältere Backups nicht mehr benötigt, dafür aber den Speicherplatz, könnt ihr mit

rdiff-backup --force --remove-older-than 12W /srv/backups/serverB/etc

alle Inkrementellen Daten löschen die älter als 12 Wochen sind.

Links

Hoffe ihr habt so viel Freude mit diesem Backupsystem wie ich es habe

peace
LEWIS

Flattr this!

rsync Backup Script

** Update **

Wie in den Kommentaren zu sehen ist müsst ihr “bzip2” installieren (falls noch nicht vorhanden) damit MySQL auch wirklich Backups erstellt.

** Update 2 **

Hab das Script jetzt auf GitHub gehostet: https://github.com/dat-lewis/rsync-backup-script

Hallo Leute,

habe hier ein einfaches “rsync” Backup Script das ihr für eure Bedürfnisse anpassen könnt.

#!/bin/bash    

DATUM=`date +%d_%m_%y`
BACKUPDIR=/srv/backups/
REMOTEDIR=/srv/backups_franklin/
REMOTEUSR=root
REMOTESRV=backup.nimmervoll.eu
WEBBACKUP=/var/www/html
DB_BACKUP="/srv/backups/MySQL"
DB_USER="root"
DB_PASSWD="DATENBANKPW"

# WEBSITE Backup erstellen -->
tar cfvz /srv/backups/html/html_backup_$DATUM.tar.gz $WEBBACKUP

# MySQL Backup erstellen -->
mysqldump --user=$DB_USER --password=$DB_PASSWD --all-databases | bzip2 > $DB_BACKUP/mysql_$DATUM.bz2

# Auf Backupserver übertragen -->
rsync -avze 'ssh -p PORT' $BACKUPDIR $REMOTEUSR@$REMOTESRV:$REMOTEDIR

Zur Erklärung:

Mit diesem Script wird (so oft ihr es per Cron Job ausführt) ein lokales Backup eurer MySQL Datenbank + Webseiten erstellt. Danach wird das Backup via rsync auf einen Backupserver kopiert.

Was ihr anpassen müsst:

BACKUPDIR – Backuppfad am Server
REMOTEDIR – Backuppfad am Backupserver
REMOTEUSR – Der Benutzer am Backupserver mit dem rsync ausgeführt wird
REMOTESRV – IP / Domain eures Backupserver
WEBBACKUP – Pfad zu euren Webseiten
DB_BACKUP – Datenbank Backuppfad am Server
DB_USER – MySQL Benutzer
DB_PASSWD – MySQL Passwort für den MySQL Benutzer

tar cfvz /srv/backups/html/html_backup_$DATUM.tar.gz $WEBBACKUP

In dieser Zeile müsst ihr das rot markierte noch für euch anpassen.

rsync -avze 'ssh -p PORT' $BACKUPDIR $REMOTEUSR@$REMOTESRV:$REMOTEDIR

In dieser Zeile noch den SSH Port eintragen von eurem Backupserver.

Danach speichern und über einen Cron Job so oft ausführen lassen wie ihr möchtet.

peace
LEWIS

Flattr this!

BLACK MARCH / ACTA

Hallo Leute,

als ich diesen Blog ins Leben gerufen habe, dachte ich nicht, dass ich mich hier jemals politisch äußern werden, doch die aktuellen Entwicklungen verlangen dieses leider.

SOPA und PIPA wurden “dank” des massiven Widerstandes der Internet Community zwar abgeweht doch dies war, wie viele sich schon dachten nur eine Ablenkung der wirklichen Gefahr.

Heute wurde ACTA von der EU unterzeichnet (LINK) was dies zur Folge haben wird könnt ihr euch hier ansehen:

Der Berichterstatter im federführenden Handelsausschuss des Europaparlaments, Kader Arif, ist unter scharfem Protest zurückgetreten.

“Ich nehme nicht weiter an dieser Maskerade teil”, ließ er die Öffentlichkeit in einer Mitteilung wissen. “Keine Einbindung der Zivilgesellschaft, fehlende Transparenz seit Beginn der Verhandlungen, die Unterschrift wurde ohne weitere Erklärung geleistet, die mehrfach geäußerten Bedenken des Europaparlamentes wurden einfach weggewischt. Der beschleunigte Zeitplan habe dafür gesorgt, dass er seinen Aufgaben als Berichterstatter nicht habe nachkommen können. Arif: “Dieses Abkommen kann massive Konsequenzen für das Leben der Bürger haben.””

Ich bitte euch alle etwas gegen dieses Gesetz zu unternehmen. Hier sind ein paar Links mit denen Ihr euch an der Gegenbewegung beteiligen könnt:

FÜR EIN FREIES INTERNET!!

Flattr this!